2015-09-25 47 views
1

我似乎无法让我的复选框只更新复选框。现在,当我检查任何方框并单击“提交”时,它将标记值为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"/> 
+1

[您的脚本存在SQL注入攻击风险。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+2

如果可以的话,你应该[停止使用'mysql_ *'函数](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。 [这些扩展](http://php.net/manual/en/migration70.removed-exts-sapis.php)已在PHP 7中删除。了解[编写]​​(http://en.wikipedia.org/ wiki/Prepared_statement)语句[PDO](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http://php.net/manual/en/mysqli.quickstart .prepared-statements.php)并考虑使用PDO,[它确实不难](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+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)。

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"/> 

[编辑]你必须了解复选框

一件事是选中复选框,甚至没有公布。可以说,如果你有一个没有值的文本框,在提交null文本框将被张贴,但在复选框的情况下,如果复选框未标记的帖子忽略/避免甚至空值,在这种情况下,它被视为非现有元素。什么都不会发布,甚至没有空值。为了克服这个问题,使用一个带有复选框的隐藏字段来自动提交值,并且复选框的值将与javascript的onchange复选框匹配或者不被选中。

+0

Posted!Array([checked] => Submit [address] => [info] =>)复选框未选中12 12是行中的最后一个id,虽然我没有检查该框 –

+0

我不是清除..你的意思是,如果行['status']等于1,这意味着复选框应该在加载时检查? – aimme

+0

@TaylorReed改进了我的答案,阅读EDITED部分。我认为这可能会帮助你:) – aimme