2017-01-26 1 views
1

Надеюсь, это не дубликат, поэтому, пожалуйста, несите меня.Установите флажок в CHECKED на странице Refresh на основе PHP Условный

У меня есть форма, которая представляет собой ряд флажков, которые устанавливают логическое значение от 0 до 1 в базе данных, затем в Submit, он принимает эти значения, обновляет базу данных и обновляет страницу, так что если значение установлен в 0, флажок не установлен или если значение равно 1, тогда установлен флажок. ВСЕ ЭТО РАБОТАЮТ - НЕТ НИЧЕГО ПРОБЛЕМЫ С ЭТОЙ ЧАСТЬЮ МОИ КОДА.

Моя проблема заключается в том, что над моей кнопкой SUBMIT у меня есть кнопка «Выбрать/отменить все», если при выборе «ВСЕ» на странице «Обновить» флажок установлен. Но при обновлении кнопка не отмечена, и я должен дважды щелкнуть ее, чтобы флажок снял все ранее упомянутые флажки.

Вот мой код:

<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

Фред, цвет меня неосведомленный ... Я понятия не имею, что такое тройной оператор. – Murphy1976

+0

php => http://php.net/manual/en/language.operators.comparison.php в разделе «Тернар ...» ;-) I.e. пример из там: '$ action = (пустой ($ _ POST ['action']))? 'default': $ _POST ['action']; '- вы можете заменить это на' isset'. –

ответ

4

"спасибо @ Fred-II- вы можете отправить ответ, так что я могу дать вам кредит, пожалуйста. - Murphy1976"

По желанию ФП в.

PHP =>http://php.net/manual/en/language.operators.comparison.php под "ТРОЙНЫХ ..." ;-)

Т.е. Пример из там:

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

Вы можете заменить это isset(), которые должны быть использованы для флажков/радиоприемников.

В моем личном опыте, когда вы выбираете из базы данных и что-то проверяете/не проверяете, используя тройной оператор, я нашел лучший метод.

Это немного сложно, но творит чудеса.

Дополнительные ссылки:

+0

ok ... давайте посмотрим, получил ли я это .... в моем первоначальном PHP, я установил переменную $ checked = ""; то в WHILE Loop я делаю чек (если $ active == '1', тогда установите $ checked на "checked"), и, наконец, для фактического флажка я поставлю следующее () ищет переменную $ checked и задает ее ранее объявленному значению. Правильно ли я это понимаю? – Murphy1976

+0

@ Murphy1976 быстрый пример: '$ check = (isset ($ row ['col']))? "default": "{$ row ['col']}>"; 'Вам нужно будет это изменить. –

+0

ОК, я действительно нашел другое решение, которое может не быть лучшей практикой, НО я все еще считаю, что это лучшее решение. Я благодарю вас за вашу помощь. – Murphy1976

1

Это не лучшая практика, на сегодняшний день, но это работает. Я правильно поставил Фред-и-ответ, поэтому, пожалуйста, ответь мне. Если вам нужна быстрая и грязная версия, это то, что я придумал.

в моем первоначальном блоке PHP, я объявил переменную $ checked и установил ее в "" empty. В моей петле WHILE я проверяю ВСЕ строки, входящие в систему, и если ЛЮБОЙ из них активен, тогда я устанавливаю значение $ checked на «checked» В моем фактическом флажке у меня есть блок 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> 

Как я уже сказал в начале, это быстрый и грязный способ сделать это, и тройная оператор наилучшей практики.

 Смежные вопросы

  • Нет связанных вопросов^_^