我似乎无法让我的复选框只更新选中的框。现在,当我选中任何框并单击提交时,它会将最后一行标记为 1(即使未选中该行)。为了发布到同一页面并更新所有选中的框,我在这里缺少什么?
while($row = mysql_fetch_array( $result )) {
$addr = $row['address'];
$info = $row['info'];
$date = $row['date'];
$status = $row['status'];
$id = $row['id'];
?>
<tr>
<td><?php echo $id; ?></td>
<td><?php echo $addr; ?></td>
<td><?php echo $info; ?></td>
<td><?php echo $date; ?></td>
<td><?php echo $status; ?></td>
<td><input type="checkbox" name="handled" value="1"><br></td>
</tr>
<?php
}
?>
</table>
<?php
if (isset($_POST['checked'])) {
echo "Posted!";
$sql2 = "UPDATE requests SET status = 1 WHERE id = '".$id."'";
mysql_query($sql2) or die(mysql_error());
}
?>
<br>
<form action="" method="post">
<input name="checked" type="submit"/>
最佳答案
您的代码容易受到 sql 注入(inject)攻击。使用 mysqli 或 PDO
在 php 中更新代码的特定部分,并将复选框放入表单中。
<?php
if (isset($_POST)) {
echo "Posted!";
//uncomment print_r for debugging
//print_r($_POST);
if(isset($_POST['handled'])=='on')
{
echo "checkbox is checked for ".$id." so update the status for id";
$sql2 = "UPDATE requests SET status = 1 WHERE id = '".$id."'";
//do querying here
}
else
{
echo "checkbox is not checked for ".$id;
}
}
?>
像这样形成
<form action="" method="post">
<!-- put checkbox inside the form -->
<input type="checkbox" name="handled"/>
<input name="checked" type="submit"/>
[编辑]
关于复选框,您必须了解的一件事是未选中的复选框甚至都不会发布。假设您有一个没有值的文本框,提交时将发布空文本框,但是如果复选框未标记复选框,则帖子甚至会忽略/避免空值,在这种情况下被视为非现有元素。不会发布任何内容,甚至不会发布空值。要克服此问题,请使用带复选框的隐藏字段自动提交值,其中的复选框值通过选中或未选中复选框的 javascript onchange 进行操作。
关于php - 复选框仅更新数据库中的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32790142/