2011-10-02 124 views
2

这里是我的表:更新MySQL表用PHP复选框

id | name | check 
------------------ 
1 | Paul | no 
2 | Bob | no 
3 | Tom | no 

ID是INT,名称,然后选中文本。

这里的脚本:

<?php 
include("database.php"); 

$dbc= new dbClass(); 
$query = $dbc->dbRunSql("select * from names order by name"); 

while ($result = mysql_fetch_array($query)){ ?> 
    <form method="POST" action=""> 
    <input type="checkbox" name="names[]" value="yes"/><?php echo $result['name']; 
} ?> 

<br> 
<input name="submit" type="submit" /> 
</form> <?php 

if(isset($_POST["submit"])){ 
    foreach ($_POST['names'] as $entry){ 
    $dbc= new dbClass(); 
    $query = $dbc->dbRunSql("update `names` set `check`='$entry';"); 
    } 
} 
?> 

这个脚本工作,但更新所有的行,而不是那些我检查。

我有2个问题:

1)我应该改变什么才能使它正常工作? (更新我检查的那些)
2)那些我不检查,如何在“检查”列更新它们为“否”

我希望你能理解我的意思。

在此先感谢。

+1

作为一个侧面说明,存储'检查'作为二进制数字:0'未检查'和1'检查'。为您节省一点DB空间。 – Phillip

回答

3

您应该在查询中执行WHERE子句。你目前每行都有更新,因为MySQL不知道要更新什么。这是该问题的解决办法:

$query = $dbc->dbRunSql("update `names` set `check`='$entry' WHERE id='$id';"); 
需要由你正确定义

$id,像这样的东西:

<input type="checkbox" name="names[<?php echo $result['id']; ?>" value="yes"/> 

,然后在你的foreach循环:

foreach ($_POST['names'] as $id => $entry){ 
+0

非常感谢!那就是诀窍。只是为未来的读者编辑一次,你错过了“名称[<?php echo $ result ['id'];?>”中的括号。再次感谢! –