通过复选框更新mysql中的选定行或所有行

时间:2015-08-02 14:35:51

标签: php mysql checkbox

我是PHP和MySQL的新手。所以我坚持一个简单的问题。 现在我已经阅读了2晚关于我的问题,我在这里找到了很多主题,谷歌在那里谈论这个,但没有真正帮助我。我希望有人可以帮助我。

我有一个复选框,为mysql字段“what”发送yes / no值。但问题是我没有得到所选复选框的ID。

MySQL看起来像 - >

id | first_name |second_name | age ?|what  
 1 | first      | second     | 30   | no  
 2 | first      | second     | 35   | no  
 3 | first      | second     | 40   | no  

我的代码看起来像 - >

选择零件:

$query = mysql_query("SELECT * FROM people") or sqlerr(__FILE__, __LINE__);

更新部分:

if (!empty($_GET['look'])) {                

$what = ($_GET['what'] == yes) ? "yes" : "no";
$sql = "UPDATE people SET what = '$what' WHERE id = " . mysql_real_escape_string($id) . "";   
mysql_query($sql) or die(mysql_error()); }

提交部分:

  <div>             
  <input type="submit" name="look" value="Select">                                  
  <br><br>
  <input type="button" onClick="select_all('what', '1');" value="All">
  <input type="button" onClick="select_all('what', '0');" value="None"> 
  </div>    

选择全部/无由Javascript控制。

复选框部分:

  <td align="center">
   <input type="checkbox" name="what" value="yes" <?php ($what["what"]=="yes"?" checked":"") ?> \>                               
  </td>

当我对$ sql发出回声时

$sql = "UPDATE people SET what = '$what' WHERE id = " . mysql_real_escape_string($id) . "";   
echo($sql);
exit();  

显示:
未选中时:

UPDATE people SET what = 'no' WHERE id = 

选择时:

UPDATE people SET what = 'yes' WHERE id = 

这是我的JS部分:

 var formblock;
 var forminputs;

 function prepare() {
          formblock= document.getElementById('form_id');
          forminputs = formblock.getElementsByTagName('input');
          }

 function select_all(name, value) {
      for (i = 0; i < forminputs.length; i++) 
      {
       var regex = new RegExp(name, "i");
       if (regex.test(forminputs[i].getAttribute('name'))) {
       if (value == '1') {
           forminputs[i].checked = true;
           } else {
           forminputs[i].checked = false;
          }
        }
      }
    }

 if (window.addEventListener) {
     window.addEventListener("load", prepare, false);
    } else 
 if (window.attachEvent) {
     window.attachEvent("onload", prepare)
    } else 
 if (document.getElementById) {
     window.onload = prepare;
    }

所以我认为Upate SET有效,但我没有从所选复选框中获取id,而在MySQL中也没有变化。

有人能告诉我我做错了吗?

THX为您的利益!

StefanW

1 个答案:

答案 0 :(得分:0)

首先你应该知道,如果实际检查了复选框,只能通过$ _POST / $ GET发送给PHP脚本。所以知道这一点你实际上不需要知道值是yesno,你可以假设它存在或不是$ _POST / $ _GET。

因此,如果您将与此复选框相关的表格行的id放入value="",那么当您查看$_GET['what']时,您将获得要更新的行的ID / p>

因此PHP更新代码可能变为:

if ( isset($_GET['what']) ) {
    $id = mysql_real_escape_string($_GET['what']);
    $sql = "UPDATE people 
              SET what = 'yes'
              WHERE id = $id";

    $res = mysql_query($sql);
    if ( !$res ) {
        // show error
    }
}

现在,如果你有更多的那个复选框要调用what,我想从javascript中假设你需要将这些复选框命名为像

这样的数组
<input type="checkbox" name="what[]" value="<?php echo $id;?>"> 

请参阅name="what[]",这将导致您在$ _GET / $ _ POST中收到what的数组,您可以像

一样处理
foreach ( $_GET['what'] as $idx => $what ) {
    if ( isset($what) ) {
        $id = mysql_real_escape_string($what);
        $sql = "UPDATE people 
                  SET what = 'yes'
                  WHERE id = $id";

        $res = mysql_query($sql);
        if ( !$res ) {
            // show error
        }
    }
}