2017-01-26 37 views
1

但願這不是一個重複的,所以請大家多多包涵。設置複選框,檢查了頁面刷新基於PHP關閉條件的

我有一個表單,它是一系列在數據庫中設置布爾值從0到1的複選框,然後在提交時,它會接受這些值,更新數據庫,然後刷新頁面,這樣如果值被設置爲0時,該複選框未被選中或者如果該值爲1,則複選框被選中。所有這些工作 - 我的代碼的這一部分沒有問題。

我的問題是,在我的SUBMIT按鈕上方,我有一個Select/Deselect All按鈕,如果在頁面刷新時選擇了ALL,則複選框保持選中狀態。但在刷新時,該按鈕未被選中,我必須點擊兩次才能使複選框取消選中前面提到的所有複選框。

這裏是我的代碼:

<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

爲此使用三元運算符 –

+0

Fred,使我變得無知......我不知道三元運算符是什麼。 – 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

好的...讓我們看看我是否得到這個....在我最初的PHP中,我設置了一個變量$ checked =「」;然後在WHILE循環中,我做了一個檢查(如果$ active =='1',然後將$選中爲「checked」),最後對於實際的複選框,我放入以下內容(<?php $ checked = $ checked? :「」;?>)尋找$ checked變量並將其設置爲之前聲明的值。我是否正確? – Murphy1976

+0

@ Murphy1976 quick example:'$ check =(isset($ row ['col']))? 「default」:「{$ row ['col']}>」;'但你需要修改它。 –

+0

好的,我發現另一個解決方案可能不是最佳實踐,但我仍然認爲這是最佳實踐解決方案。感謝您的幫助,謝謝。 – Murphy1976

1

這是不是最好的做法,到目前爲止,但它的工作。我已經標記了Fred-ii-答案是正確的,所以請回答我的答案。如果你想要快速和骯髒的版本,這是我想出的。

在我最初的PHP代碼塊,我聲明的變量$檢查,並將其設置爲「」空。 在我while循環,我檢查所有進入的行,如果任何人都激活,那麼我設置$檢查「檢查」 在我的實際複選框,我有PHP,僅僅回聲變量塊。 下面是最後的代碼,我有:

<?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> 

就像我在開始時說,這是做它的快速和骯髒的方式,和三元運營商是最好的做法。