2011-02-17 129 views
0

继续从previous post,我试图更新数据库字段与1或0,具体取决于是否复选框被选中或不。PHP/MySQL更新复选框选择到数据库2

它似乎工作时复选框被选中,但没有时为空。

任何想法如何解决这个问题?下面的代码。非常感谢,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)); 
    } 

回答

1

我不认为代码可以以这种方式工作你...的事情是,如果你不勾选页面上的复选框,其值不能与表单提交的数据,因此,你不能设置showPP到在你的数据库

我心里有两个可能的解决方案:

如果所有RECO RDS 以外勾选页面上的那些应被设置为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存储在隐藏字段(S)与HTML表单的页面并检查它们中你要在$ showPP_ids阵列 - 那些将被设置为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中的f ile(根本不需要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)); 
} 
+0

嗨,感谢您的回复。第一个选项效果很好,但会影响我所有的数据库条目,而任何时候只有一个选项可能在页面上。第二个选项我似乎无法正常工作... S – ss888 2011-02-17 12:08:41

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

是一个数组。它应该是

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

我猜

0

您正在测试是否数组$ _ POST [ 'showPP_ids']时,它总是会。

我觉得你的测试应该是:

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