PHP/MySQL更新数据库复选框选择

PHP/MySQL更新数据库复选框选择,php,mysql,Php,Mysql,我正在尝试使用1或0更新数据库字段,具体取决于是否选中复选框 当复选框被选中时,它似乎起作用,但当复选框为空时则不起作用 有什么办法解决这个问题吗?代码如下。非常感谢,S 以下是我表格中的代码: $query = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'"; $result = mysql_query($query); while($row = mysql_fetch_ar

我正在尝试使用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;                                        
        } 

这里没有将值设置为零的内容。未选中的框将从$\u POST数组中消失

您需要单独列出所有复选框的名称,并循环这些复选框,将它们与$\u POST数组进行比较

编辑:不打算编写任何代码,但是:

$allids = array('id1','id2','id3');

foreach ($allids as $oneid) {
  $val = (int) isset($_POST[$oneid]);  // will be 0 or 1
  mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($oneid));
}
请注意,这里并不真正需要mysql\u real\u escape\u字符串,因为我们知道所有id值都是安全的,但这是一种很好的做法,以防稍后有人出现并不小心更改了$allids数组

再次编辑:假设我们不知道要查找什么ID

mysql_query("UPDATE istable SET showPP = 0");
foreach ($_POST as $oneid=>$nothing) {
  mysql_query("UPDATE istable SET showPP = 1 WHERE id = ".mysql_real_escape_string($oneid));
}

这里没有将值设置为零的内容。未选中的框将从$\u POST数组中消失

您需要单独列出所有复选框的名称,并循环这些复选框,将它们与$\u POST数组进行比较

编辑:不打算编写任何代码,但是:

$allids = array('id1','id2','id3');

foreach ($allids as $oneid) {
  $val = (int) isset($_POST[$oneid]);  // will be 0 or 1
  mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($oneid));
}
请注意,这里并不真正需要mysql\u real\u escape\u字符串,因为我们知道所有id值都是安全的,但这是一种很好的做法,以防稍后有人出现并不小心更改了$allids数组

再次编辑:假设我们不知道要查找什么ID

mysql_query("UPDATE istable SET showPP = 0");
foreach ($_POST as $oneid=>$nothing) {
  mysql_query("UPDATE istable SET showPP = 1 WHERE id = ".mysql_real_escape_string($oneid));
}
  • 可能您的复选框值在未选中时不会被发送。通过在php代码中打印($\u POST)来确认这一点。
    因此,你的状况

    if (isset($_POST['showPP_ids'])) {  
        foreach ($_POST['showPP_ids'] as $showPPId) {   
    
    将永远找不到未选中的复选框

  • 正如awm正确地说的(+1),您没有将字段
    showPP
    设置为
    0
    。这样做:

    $ppsql=mysql_query("UPDATE istable SET showPP = '0' WHERE id = ".mysql_real_escape_string($showPPId));
    
    当您要将sql字段设置为0时

  • 由于您的复选框未选中时不会被发送,因此您需要了解更多有关哪些复选框的信息

    • 您可以这样做(重用查询代码)

    • 另一种选择是JavaScript:提供两个复选框,如果另一个复选框未选中,则将“not”-复选框设置为true,或者使用
      并在复选框更改时更改其值。如果你对这个方法有疑问,请留下评论-我以前用过很多次

  • 另一种方法
    继续使用代码,您可以使用这种简单的方法(但请不要…):

  • 可能您的复选框值在未选中时不会被发送。通过在php代码中打印($\u POST)来确认这一点。
    因此,你的状况

    if (isset($_POST['showPP_ids'])) {  
        foreach ($_POST['showPP_ids'] as $showPPId) {   
    
    将永远找不到未选中的复选框

  • 正如awm正确地说的(+1),您没有将字段
    showPP
    设置为
    0
    。这样做:

    $ppsql=mysql_query("UPDATE istable SET showPP = '0' WHERE id = ".mysql_real_escape_string($showPPId));
    
    当您要将sql字段设置为0时

  • 由于您的复选框未选中时不会被发送,因此您需要了解更多有关哪些复选框的信息

    • 您可以这样做(重用查询代码)

    • 另一种选择是JavaScript:提供两个复选框,如果另一个复选框未选中,则将“not”-复选框设置为true,或者使用
      并在复选框更改时更改其值。如果你对这个方法有疑问,请留下评论-我以前用过很多次

  • 另一种方法
    继续使用代码,您可以使用这种简单的方法(但请不要…):


    干杯,但不是很<代码>isset($\u POST['showPP\u ids'])将始终计算为true。“另一种方法”的前六行执行此操作:
    更新istable set showPP=0
    。不需要循环。非常感谢您的回复,非常感谢。对您提供的代码进行了尝试,但无法使任何代码正常工作:(有点让awm正常工作,(请参见编辑)。SCheers,但不完全…
    isset($\u POST['showPP\u ids'))
    将始终计算为真。“另一种方法”的前六行执行此操作:
    更新istable set showPP=0
    。无需循环。非常感谢您的回复,非常感谢。对您提供的代码进行了尝试,但无法使任何代码正常工作:(有点了解awm的工作情况,(请参阅编辑).s如果您事先知道字段名,则此方法有效。将此方法与SQL查询结合起来,可以动态创建字段名列表。是的!另一方面,如果您事先不知道字段名,则必须更新整个表……在这种情况下,您可以先将它们全部设置为零,然后通过$\u POST数组循环。您好,非常感谢您的回复:使用您的代码可以让它正常工作,但它只更新第一个结果,而不更新其他结果。下面的代码:
    $newQuery=mysql\u query(“从ispdfs中选择*,其中assocProp=”。$\u POST['id'].“”);$newResult=mysql\u fetch\u数组($newQuery);foreach($newResult作为$showPP\u id){$val=(int)isset($\u POST['showPP_id'];mysql_查询(“更新ispdfs集showPP=$val WHERE id=“.mysql_real_escape_string($showPP_id));}
    是,因为awm的解决方案不经过
    $\u POST['showPP_id']的字段
    @awm:如果
    $nothing
    是一个数组,则可以通过测试来完善代码示例->如果是,则循环它。@all:这仍然不理想。我会收集必要的更新(例如,在查询字符串中使用concat)并在循环中执行mysql_查询,但之后=只执行一次。不确定我是否在跟踪…你是说我需要将我的上述代码包装在
    if(isset($_POST['linkTitle_ID']){
    if($_POST['linkTitle_ID']){
    中吗?如果你事先知道字段名,那么这种方法很有效。将此方法与你的