【发布时间】:2013-10-28 15:27:31
【问题描述】:
创建一个我无法在 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 本身的各种方法。我认为这个解决方案对于简单的更改来说是最紧凑的。
【问题讨论】:
-
你的 PHP 部分,sql 查询中的 $name 变量是什么?它总是“用户字段”吗?
-
一方面,您需要将
id = $ID"更改为id = '$ID'" -
我认为我没有正确提出或提出这个问题。但无论如何,我的 JS 将用户字段更改为用户字段更新。这是一种让 PHP 知道该变量是否已设置的方法。我想知道我是否应该让 PHP 创建一个新数组,然后在 SQL 更新中循环遍历它。
-
每行总是有一个字段,还是每行有多个字段可以更改?如果每行仅更改一个字段,则答案会有所不同,而对于多个字段,您的输入需要某种数组语法。
-
没有详细查看 PHP 部分,但我注意到您的表单
action为POST,相反,method应该是POST,action应该是服务器端脚本的 url。