4

HTML/JavaScript は次のとおりです。

<form method = "post" style="display: inline;" name="thisform<?php echo $employee->id; ?>">
                     <input type="hidden" name="user" value="<?php echo $employee->id; ?>" />
                     <input type="hidden" name="auto" value="<?php echo $employee->stay_live; ?>" />
                    <h3><input type="checkbox" name="stay_live"  onclick="document.forms.thisform<?php echo $employee->id; ?>.submit();" <?php if ($employee->stay_live == '1') { echo "checked"; } ?> title="Click to Stay Live Every Day" />&nbsp;<?php echo $employee->name; ?> 
</form>

ここにあるPHP

<?php
    if(isset($_POST['stay_live'])) {
        $user=$_POST['user'];
        $auto=$_POST['auto'];


        if ($auto == 1) {
            $sql = "UPDATE users SET stay_live = 0 WHERE id = '{$user}';"; 
        }

        if ($auto != 1) {
            $sql = "UPDATE users SET stay_live = 1 WHERE id = '{$user}';";
        }

        mysqli_query($dbconnection, $sql);
    }
?>

フォームにコードが表示onclickされると、フォームが自動送信されて PHP が実行されますPOST。ただし、がチェックonclickされていない場合にのみ機能しcheckboxます。チェックされている場合、画面は更新されたかのように更新されますが、POST は送信されません。

要約すると、ボックスがチェックされておらず、設定する必要がある場合、すべてが期待どおりに機能します。しかし、それを UNSET するには、サーバー関数は決して呼び出されません。誰でも理由がわかりますか?

注: これはテスト コードであるため、SQL インジェクションについてはコメントしないでください。

4

2 に答える 2

1

チェックボックスの値は、チェックを外すと送信されないため、$_POST["stay_live"]設定されません。

<?php
if (isset($_POST["user"])) // type="hidden" will be sent regardless of checkbox
{
    if (isset($_POST["stay_alive"])) echo "Checkbox checked";
    else echo "Checkbox not checked";
}
?>
于 2013-07-15T17:26:31.110 に答える
1

Jquery を使用すると、次のようになります。実行する関数を含むファイルを作成する必要があります。このファイルは POST または GET 経由で受信されます

onclick 属性に、アクション変数の if を追加するだけです。 if(element checked) action = unchecked --- else action = check

--Jquery 関数

function cBoxSubmit($employId, $action){ // call it in your onclick attribute.
   $.post("submitFunction.php",{action: $action, employId: $employId, ...},function(data){ // Parameters: URL file, variables which will receive, call back function
      if(data){
        // On Success or in your case if checked
        // add some code if needed
      }
      else{
          // If unchecked
          // add some code if needed
      }
   }
}

注: echo == return in your php file ... これは、Jquery 関数のコールバック関数にデータを返す方法です。

于 2013-07-15T17:54:13.787 に答える