PHP / MySQL Update复选框选择到数据库2

时间:2011-02-17 10:45:06

标签: php mysql

previous post开始,我正在尝试使用1或0更新数据库字段,具体取决于是否选中了复选框。

选中复选框时似乎有效,但空时则无效。

任何想法如何解决这个问题?代码如下。非常感谢,S。

以下是我表单中的代码:

$query  = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'";
    $result = mysql_query($query);              
    while($row = mysql_fetch_array($result, MYSQL_ASSOC))
        {                                           
        echo '<li>                          
                <label for="changePP'.$row['id'].'"><input id="changePP'.$row['id'].'" type="checkbox" name="showPP_ids[]" value="'.$row['id'].'"'.($row['showPP']=='1' ? ' checked="checked"':NULL).' /> Display</label>
                </li>'. PHP_EOL;                                        
        } 

php进程代码(更新):

$newQuery=mysql_query("select * from istable where assocProp = '".$_POST['id']."'");
    $newResult=mysql_fetch_array($newQuery);    

    foreach ($newResult as $showPP_ids) {
      $val = (int) isset($_POST['showPP_ids']); 
        mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($showPP_ids));
    }

4 个答案:

答案 0 :(得分:3)

$val = (int) isset($_POST['showPP_ids']);  

是一个数组。它应该是

foreach ($newResult as $showPP_ids) {  
$val = (int) isset($_POST['showPP_ids'][$showPP_ids]);  

我想

答案 1 :(得分:1)

我认为代码不能以这种方式为您工作...问题是,如果您没有勾选页面上的复选框,则其值不会与表单数据一起提交,因此您无法在数据库中将 showPP 设置为 0

我有两种可能的解决方案:

如果页面上打勾的之外的所有记录都应设置为0,则可以这样做:

$values = mysql_real_escape_string(implode(',', $showPP_ids));
mysql_query("UPDATE istable SET showPP = 1 WHERE id IN('$values')");
mysql_query("UPDATE istable SET showPP = 0 WHERE id NOT IN('$values')");

另一个解决方案是将所有ID存储在HTML页面上的隐藏字段中,并检查您在$ showPP_ids数组中获取哪些ID - 这些将设置为1 - 并且该变量中缺少哪些 - 将设置为0

$query  = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'";
$result = mysql_query($query);              
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo '<li>                          
            <label for="changePP'.$row['id'].'">
                <input id="changePP'.$row['id'].'" type="checkbox" name="showPP_ids[]" value="'.$row['id'].'"'.($row['showPP']=='1' ? ' checked="checked"':NULL).' /> Display
            </label>
            <input type="hidden" name="original_ids[]" value="'.$row['id'].'" />
          </li>'. PHP_EOL;
}

...在PHP文件中(根本不需要MySQL SELECT):

foreach ($_POST['original_ids'] as $id) {
    if (isset($_POST['showPP_ids']) && in_array($id, $_POST['showPP_ids'])) {
        $val = 1;
    } else {
        $val = 0;
    }
    mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($id));
}

答案 2 :(得分:0)

如果未选中复选框,则不会将该值提交给server.Pls

请使用isset($_POST['id'])检查值是否存在。

http://php.net/manual/en/function.isset.php

答案 3 :(得分:0)

您正在测试是否设置了数组$ _POST ['showPP_ids'],它始终是。

我认为您的测试应该是:

$val = (int) isset($_POST['showPP_ids'][$showPP_ids]);