2017-04-05 34 views
0
<?php 
if(isset($_POST['chkStatus'])){ 
    for ($i=0;$i<count($_POST['chkStatus']);$i++) { 
     $count = count($_POST['chkStatus']); 
     list($txtClientId, $txStatusValue) = explode('-', $_POST['chkStatus'][$i], 2); 
     $stmtChkStatus=$con->query("SELECT id,status FROM users WHERE id=$txtClientId"); 
     $SRow = $stmtChkStatus->fetch(); 
     if($SRow['status']!=$txStatusValue) { 
      if($txStatusValue==0) $stmtStatus=$con->query("UPDATE users SET status='0' WHERE id=$txtClientId"); 
      else $stmtStatus=$con->query("UPDATE users SET status='1' WHERE id=$txtClientId"); 
     } 
    } 
} 
?> 

<html> 
    <body> 
     <dl> 
      <?php $stmtUsers=$con->query("SELECT id,status FROM users"); 
      while($UsersRow = $stmtUsers->fetch()){ 
       echo "<dt>$UsersRow[name]</dt> 
       <dd><input type='checkbox' name='chkStatus[]' value='$UsersRow[id]-$UsersRow[status]'"; 
       if($CRow['status']==0) echo " checked"; 
       echo " onchange='this.form.submit()'> 
       </dd>"; 
      ?> 
     </dl> 
    </body> 
</html> 

我的代码的问题是,它只执行选中的复选框。我需要一个代码来改变我单击的复选框(onchange)的SQL DB中的状态。提交表单onchange复选框并更新MySQL分贝

+0

对于未来的贴子请参阅https://meta.stackoverflow.com/questions/251361/how-do-i-format-my-code-blocks,不要对代码格式使用HTML。 – chris85

+1

您的代码容易受到SQL注入攻击。您应该使用[mysqli](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)或[PDO](http://php.net/manual/en/pdo.prepared- statement.php)按照[本文]中描述的准备语句(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)。 –

+0

最新问题? – Omi

回答

0

而不是循环通过$_POST['chkStatus']你可以获取所有可能的值与$con->query("SELECT id,status FROM users")并循环这些值。您可以检查,如果$_POST['chkStatus']设置为相应的值。

+0

我想避免查询运行通过所有的记录..我怎么能做到这一点运行的SQL在哪里id = onchange复选框? – GaLaTaS

0

此刻您将所有复选框值发送到服务器。你可能只发送感兴趣的值。快速而肮脏的解决方案:你复选框为单独的形式

  1. 分裂,只提交自己需要什么表格:

    while($UsersRow = $stmtUsers->fetch()){ 
         echo "<dt>$UsersRow[name]</dt> 
        <form .... > <!-- Here required attributes --> 
         <dd><input type='checkbox' name='chkStatus[]' value='$UsersRow[id]-$UsersRow[status]'"; 
         if($CRow['status']==0) echo " checked"; 
         echo " onchange='this.form.submit()'> 
        </form> 
         </dd>"; 
    
  2. inclick属性采取复选框的ID或名称,并添加请求。