创建一个我在 PHP 服务器端无法弄清楚的小管理行更新程序。我希望 sql 查询只更新页面上已更改的 $_POST 字段,这样它就不会循环所有 100 条左右的记录。
这是我的方法:
1) jQuery 监听改变的输入字段,然后分配 name 属性 user-field-updated
2) PHP 检测到 user-field-updated 已设置。
3) 在提交重新加载时,PHP 检测到此输入,并按行 ID 更新 SQL。我如何确保 PHP 知道哪个输入字段转到哪个行 ID?
jQuery 客户端更新名称属性:
$(".listen").keyup(function() {
$(this).attr("name", "user-field-updated");
})
生成类似于 phpmyadmin 的简单版本的 HTML 管理表:
<form action="post">
<?php while($rows=mysql_fetch_array($result)) : ?>
<tr>
<td>The editable field: <input class="listen" type="text" name="user-field" size="4" value="<?php echo $rows['Users'] ?>" />
<input type="hidden" name="ID" value="<?php echo $rows['ID']; ?>" /></td>
</tr>
<?php endwhile; ?>
<input type="submit" name="submit-button" value="Click to update only fields I changed" />
</form>
在我的页面底部是 php 脚本,它将在重新加载时触发:
if(isset($_POST['submit-button'])) {
foreach($_POST as $name => $value) {
if(isset($_POST['user-count-updated'])){
$ID = $_POST['ID'];
$sql = "UPDATE $tbl_name SET $name = $value WHERE id = '$ID'";
$q->execute($db->prepare($sql));
}
}
};
一个可能会被问到的问题是:在 PHP 中,我如何在将更新数据库中不同行的表单提交中“分组”相关值?如何让 PHP 知道我想使用字段输入更新哪一行。
基于jacouh创建的解决方案
jQuery 更改文本字段的输入名称属性并插入一个新的隐藏输入以触发下面的 isset 变量。
$(".trigger-changed").keyup(function() {
$(this).addClass("changed");
$(this).attr("name", $(this).data("name")).off("keyup");
$("#mainform").append('<input type="hidden" name="user-updated"></input>')
})
html
<td><input type="text" size="4" name="nochange" data-name="userfield@<?php echo $rows['ID'] ?>" value="<?php echo $rows['Users'] ?>" class="trigger-changed"></input></td>
php 检测输入已更改(只是一般的全局触发器,不特定于字段本身)。然后继续解析出名称值。如果成功重新加载。
if(isset($_POST['user-updated'])) {
foreach($_POST as $key => $value) {
if($name != 'nochange'){
$name = strtok($key, '@');
$ID = strtok("\n");
$sql = "UPDATE $tbl_name SET Users = $value WHERE ID = '$ID'";
$result = mysql_query($sql);
if($result){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=index.php\">";
}
}
}
}
我还咨询了一位朋友,他提出了从构建新数组到将隐藏的输入标签打印到 html 本身的各种方法。我认为这个解决方案对于简单的更改来说是最紧凑的。