我似乎无法使用我的复选框来仅更新选中的复选框。现在,当我选中任何框并单击“提交”时,它会将最后一行标记为值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"/>
答案 0 :(得分:0)
您需要将行的ID放在复选框中,以便php在检查框并提交表单时知道要更新哪些行。另外,将名称从handled[]
更改为handled
,以便php知道它是一个id的数组。
<input type="checkbox" name="handled[]" value="<?= $id ?>">
然后在你的帖子中
<?php
if (isset($_POST['checked'])) {
$ids = implode(',',$_POST['handled']);
$sql2 = "UPDATE requests SET status = 1 WHERE id IN ($ids)";
// if you also want to update when boxes are unchecked,
// then run the following query instead
// UPDATE requests SET status = id IN ($ids)
// id in ($ids) will evaluate to either a 0 or 1 in mysql
mysql_query($sql2) or die(mysql_error());
}
?>
注意:上面的代码容易受到SQL注入攻击,在运行查询之前,您应确保$ids
实际上由数字组成。另外,mysql_
函数已被弃用,您不应再使用它们(切换到mysqli_
或PDO
)。
答案 1 :(得分:0)
您的代码容易受到sql注入攻击。使用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 of复选框。