2017-01-26 1 views
1

これは重複していないことを願います。PHPの条件に基づいてページの更新時にチェックボックスをチェックするように設定してください条件

私はデータベース内のブール値を0から1に設定する一連のチェックボックスを持つフォームを持っています。その後、Submitでそれらの値をとり、データベースを更新してからページを更新します。チェックボックスがチェックされていない場合、または値が1の場合、チェックボックスがオンになっています。すべてのものは動作しています - 私のコードのこの部分には何の問題もありません。

私の問題は、私のSUBMITボタンの上に、Select/Deselect Allボタンがあります。すべてが選択されている場合、ページが更新されてもチェックボックスはチェックされたままです。しかし、リフレッシュ時には、このボタンはチェックされていません。このチェックボックスを2回クリックすると、前述のチェックボックスの選択がすべて解除されます。

<form action="" method="post"> 
<?php 
    while($row = mysql_fetch_array($result)){ 
     $id = $row['id']; 
     $active = $row['active']; 
     $name = $row['name']; 
     $class = $row['class']; 

     if($active == '1'){ 
      **IF ANY OF THESE CHECKBOXES ARE ACTIVE, THEN THE SELECT/DESELECT ALL BUTTON SHOULD BE CHECKED -- WHAT IS THE PROPER SYNTAX???** 
     } 


     echo "<input type='hidden' name='activate_".$id."' value='0'>"; 
     echo "<label class='switch'><input type='checkbox' class='checkbox' name='activate_".$id."' value='1'"; 

     if($active == '1'){ 
      echo "checked='checked'"; 

     } 

     echo "/><div class='slider'></div><span>" . $name . "</span></label>"; 

    } 

mysql_close(); 
?> 
<label for="select_all" class="selectAllLabel"><input type="checkbox" id="select_all"/> Activate/Deactivate All</label> 
<input type="submit" class="submit" name="submit" value="Update Active Roster"> 
</form> 
<iframe src="index.html" width="376" height="260" style="border: 0;"></iframe> 

<?php 

    if(isset($_POST['submit'])){ 

     require "config.php"; 

     $conn = new mysqli($db_host, $db_user, $db_pass, $db_name); 
     if ($conn->connect_error) { 
      die("Connection failed: " . $conn->connect_error); 
     } 

     for ($i = 1; $i<count($_POST); $i++){ 
      $sql = "UPDATE roster SET active = ".$_POST["activate_$i"]." WHERE id = ".$i; 
      if ($conn->query($sql) === TRUE) { 
       echo ""; 
      } else { 
       echo $conn->error; 
      } 
     } 

     $conn->close(); 
     echo "<meta http-equiv='refresh' content='0'>"; 

    } 

?> 
<script> 
$(document).ready(function(){ 
    //select all checkboxes 
    $("#select_all").change(function(){ //"select all" change 
     var status = this.checked; // "select all" checked status 
     $('.checkbox').each(function(){ //iterate all listed checkbox items 
      this.checked = status; //change ".checkbox" checked status 
     }); 
    }); 

    $('.checkbox').change(function(){ //".checkbox" change 
     //uncheck "select all", if one of the listed checkbox item is unchecked 
     if(this.checked == false){ //if this item is unchecked 
      $("#select_all")[0].checked = false; //change "select all" checked status to false 
     } 

     //check "select all" if all checkbox items are checked 
     if ($('.checkbox:checked').length == $('.checkbox').length){ 
      $("#select_all")[0].checked = true; //change "select all" checked status to true 
     } 
    }); 
}); 
</script> 

あなたは私がすべての値を選択/選択解除をトリガーするロジックに変更することを希望する場所を正確に私のコードから見ることができます:

は、ここに私のコードです。私はちょうどそうする正しい構文を知らない。

ありがとうございます。

+1

これには3進演算子を使用します –

+0

フレッド、私には無知な色です...私は三元演算子が何であるか分かりません。 – Murphy1976

+0

php => http://php.net/manual/en/language.operators.comparison.php "Ternary ..." ;-)そこからの例です: '$ action =(empty($ _ POST ['action']))? 'default':$ _POST ['action']; ' - これを' isset'に置き換えることができます。 –

答えて

4

"私はあなたの信用を与えることができるようにあなたが答えを投稿することができフレッド-II- @あなたにしてくださいありがとう - 。Murphy1976" OPの要求ごととして

。下

PHP =>http://php.net/manual/en/language.operators.comparison.php "三元..." ;-)

すなわち、そこでの例:

$action = (empty($_POST['action'])) ? 'default' : $_POST['action']; 

あなたがチェックボックス/ラジオのために使用すべきであるisset()とそれを置き換えることができます。

私の個人的な経験では、データベースからフェッチして何かをチェック/チェックしないようにするために、三項演算子を使って私は最良の方法であることがわかりました。

これは少し面倒ですが、不思議に思っています。

その他の参照:

+0

ok ...私がこれを持っているかどうかを見てみましょう。私の最初のPHPでは、変数$ checked = ""を設定しました。 ($ active == '1'ならば$ checkedを "checked"に設定します)、そして最後に実際のチェックボックスのために次のようにします(<?php $ checked = $ checked? : "";?>)$ checked変数を探し、それを以前から宣言された値に設定します。私はこれで訂正しますか? – Murphy1976

+0

@ Murphy1976簡単な例: '$ check =(isset($ row ['col']))? "default": "{$ row ['col']}>"; "あなたはそれを変更する必要があります。 –

+0

OK、実際にはベストプラクティスではない可能性がある別のソリューションが見つかりましたが、これがベストプラクティスソリューションだと感じています。私はあなたの助けに感謝します、ありがとう。 – Murphy1976

1

これは、はるかに、ベストプラクティスではありませんが、それが働いています。私はFred -ii-の答えを正しかったとフラグを立てていたので、彼の答えに行ってください。あなたが迅速かつ汚れたバージョンを望むなら、これは私が思いついたものです。

私の最初のPHPブロックでは、変数$を宣言してチェックし、空にしました。 私のWHILEループでは、入って来るすべての行をチェックし、どれかがアクティブであれば、$チェックを「チェック済」に設定します 実際のチェックボックスには、その変数を単にエコーするブロックがあります。 は、ここで私が持っている最終的なコードです:

<?php 
    $checked = ""; 

    while($row = mysql_fetch_array($result)){ 
     $id = $row['id']; 
     $active = $row['active']; 
     $name = $row['name']; 
     $class = $row['class']; 

     if($active == '1'){ 
      $checked = "checked"; 
     } 


     echo "<input type='hidden' name='activate_".$id."' value='0'>"; 
     echo "<label class='switch'><input type='checkbox' class='checkbox' name='activate_".$id."' value='1'"; 

     if($active == '1'){ 
      echo "checked='checked'"; 
     } 

     echo "/><div class='slider'></div><span>" . $name . "</span></label>"; 

    } 

mysql_close(); 

?> 
<label for="select_all" class="selectAllLabel"><input type="checkbox" id="select_all" <?php echo $checked; ?>/> Activate/Deactivate All</label> 
<input type="submit" class="submit" name="submit" value="Update Active Roster"> 
</form> 
<iframe src="index.html" width="376" height="260" style="border: 0;"></iframe> 

<?php 

    if(isset($_POST['submit'])){ 

     require "config.php"; 

     $conn = new mysqli($db_host, $db_user, $db_pass, $db_name); 
     if ($conn->connect_error) { 
      die("Connection failed: " . $conn->connect_error); 
     } 

     for ($i = 1; $i<count($_POST); $i++){ 
      $sql = "UPDATE roster SET active = ".$_POST["activate_$i"]." WHERE id = ".$i; 
      if ($conn->query($sql) === TRUE) { 
       echo ""; 
      } else { 
       echo $conn->error; 
      } 
     } 

     $conn->close(); 
     echo "<meta http-equiv='refresh' content='0'>"; 

    } 

?> 
<script> 

私が最初に言ったように、これはそれを行うための迅速かつ汚い方法であり、三項演算子がベストプラクティスです。

関連する問題