复选框仅更新数据库

时间:2015-09-25 20:26:15

标签: php mysql checkbox

我似乎无法使用我的复选框来仅更新选中的复选框。现在,当我选中任何框并单击“提交”时,它会将最后一行标记为值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"/>

2 个答案:

答案 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复选框。