Устанавливайте флажки при отправке формы


У меня есть следующая форма с флажками.

<?php
   include 'connection.php';
   $sql="SELECT * FROM `tbl`";
   $query=mysqli_query($connect,$sql);
   echo "<table border='2px'>
             <thead>
                 <th>ID</th>
                 <th>Title</th>
                 <th>Name</th>
                 <th>Doing</th>
                 <th>Done</th>
             </thead>
             <tbody>
                 <form method='POST'>";
                      while($res=mysqli_fetch_assoc($query)){
                          $id=$res['id'];
                          echo"<tr>
                                  <td>{$res['id']}</td>
                                  <td>{$res['title']}</td>
                                  <td>{$res['name']}</td>
                                  <td><input type='checkbox' name='doing[]' value='".$res['id'].$res['title'].$res['name']."'></td>
                                  <td><input type='checkbox' name='done[]' value='".$res['id'].$res['title'].$res['name']."'></td>
                               </tr>";
                      }
                      echo "<input type='submit' value='OK' name='btn'>
                 </form>
             </tbody>
         </table>";
?>

Как сделать так, чтобы флажки сохраняли свое состояние checked при отправке формы?

Author: Tiny Giant, 2015-06-17

2 answers

Я предполагаю, что вы не хотите, чтобы doing и done проверялись одновременно, поэтому я заменил флажки переключателями, потому что это их предполагаемое поведение.

Я изменил имена и значения переключателей, чтобы к ним можно было легко получить доступ на PHP, и из предоставленного вами кода не похоже, что вы используете имена и значения впоследствии в любом случае.

Я очистил разметку и макет скрипта, чтобы сделать его более читаемый.

Пожалуйста, дайте мне знать, если я слишком сильно отклонился от цели вашего исходного кода.

Примечание: Это отобразит опубликованные значения, но не сохранит эти значения в базе данных.

( Демо-версия)

<?php
    include('connection.php');
    $sql = "SELECT * FROM `tbl`";
    $query = mysqli_query($connect,$sql);

    function get_checked ( $id ) {
        if ( isset($_POST) && isset($_POST['checked'][$id]) ) {
            return $_POST['checked'][$id];
        }
        return false;
    }
?>
<form method="post">
    <table border="2px">
        <thead>
            <tr>
                <th>ID</th>
                <th>Title</th>
                <th>Name</th>
                <th>Doing</th>
                <th>Done</th>
            </tr>
        </thead>
        <tbody>
            <?php while ( $res = mysqli_fetch_assoc ( $query ) ): ?>
                <?php $checked = get_checked ( $res['id'] ) ?>
                <tr>
                    <td><?= $res['id'] ?></td>
                    <td><?= $res['title'] ?></td>
                    <td><?= $res['name'] ?></td>
                    <td><input type="radio" name="checked[<?= $res['id'] ?>]" value="doing" <?= $checked === "doing" ? 'checked' : '' ?>></td>
                    <td><input type="radio" name="checked[<?= $res['id'] ?>]" value="done" <?= $checked === "done" ? 'checked' : '' ?>></td>
                </tr>
            <?php endwhile; ?>
        </tbody>
    </table>
    <input type='submit' value='OK' name='btn'>
</form>
 1
Author: Tiny Giant, 2015-06-18 15:34:47

Вы можете попробовать использовать этот код.Надеюсь, это сработает (также попробуйте использовать mysqli или PDO):

<?php
         include 'connection.php';
         $sql="SELECT * FROM `tbl`";
         $query=mysqli_query($connect,$sql);

            echo "<table border='2px'>
      <thead>
      <th>ID</th>
      <th>Title</th>
      <th>Name</th>
      <th>Doing</th>
      <th>Done</th>
       </thead>";
         echo "<form method='POST'>";
        echo "<tr>";
        $s=0;
        while($res=mysqli_fetch_assoc($query)){
        $id=$res['id'];
        $doing_v="";
        $done_v="";
        $c_doing="";
        $c_done="";

        if(isset($_POST['doing'][$s])){
        $doing_v=$_POST['doing'][$s];
        }

        if(isset($_POST['done'][$s])){
        $done_v=$_POST['done'][$s];
        }

        if($doing_v=='".$res['id'].$res['title'].$res['name']."'){
        $c_doing="checked";
        }

        if($done_v=='".$res['id'].$res['title'].$res['name']."'){
        $c_done="checked";
        }

              echo" <td>{$res['id']}</td>
               <td>{$res['title']}</td>
               <td>{$res['name']}</td>
        <td><input type='checkbox' name='doing[]'
        value='".$res['id'].$res['title'].$res['name']."' ".$c_doing." ></td>

               <td><input type='checkbox' name='done[]'  
         value='".$res['id'].$res['title'].$res['name']."' ".$c_done." ></td>
               </tr>";
               $s++;
               }

               echo "</table>";
               echo "<input type='submit' value='OK' name='btn'>";
               echo "</form>";
          ?>
 0
Author: Vikas Umrao, 2015-06-17 06:34:44