2017-04-05 40 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或名稱,並添加請求。