Как управлять переключателями? данные отражены из базы данных, PHP, MYSQL

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

Существует таблица из четырех столбцов, где столбцы разделены на имена, присутствующие, отсутствующие и поздние. Список имен выводится на веб-странице путем извлечения базы данных MYSQL, что означает, что если новый студент добавляется в список, то он будет отображаться на веб-странице вместе с опцией отсутствия, присутствия и опоздания автоматически. Пожалуйста, взгляните на код ниже, который я использовал для вывода списка имен и других опций по отдельности.

          while($row = mysqli_fetch_array($result))
           {

   echo "<tr>
   <td><img......../></td> 
   <td>" .$row['name']. $row['surname']."</td>  
   <td><input type='radio' name='attend' value='present' /> Present &nbsp;
   <input type='radio' name='attend' value='absent' /> Absent &nbsp;
   <input type='radio' name='attend' value='late' /> Late &nbsp; 
   <td>
    </tr>";
    }

   echo "<input class='attendanceSubmitBtn' type='submit' name='btnSubmit' value='Submit'>"; 
   echo "</table>"; 
   echo "</form> <br/>"; 
   ?>

Работать функция

 foreach ($_POST['attend'] as $attendance => $value) {

 if($value == 'present') {

  $query = "INSERT INTO Test (date, status) VALUES (NOW(), '1')";  
   $close = mysqli_query($con, $query); 
  echo "present done properly"; 

2 ответа

Вы отображаете это неправильно. Вы должны предоставить разные имена для каждого посещения.

Сделай это так:

 while($row = mysqli_fetch_array($result))
           {

   echo "<tr>
   <td><img......../></td> 
   <td>" .$row['name']. $row['surname']."</td>  
   <td><input type='radio' name='attend".$row['name']."' value='present' /> Present &nbsp;
   <input type='radio' name='attend".$row['name']."' value='absent' /> Absent &nbsp;
   <input type='radio' name='attend".$row['name']."' value='late' /> Late &nbsp; 
   <td>
    </tr>";
    }

   echo "<input class='attendanceSubmitBtn' type='submit' name='btnSubmit' value='Submit'>"; 
   echo "</table>"; 
   echo "</form> <br/>"; 
   ?>

Как видите, я заменил name='attend' с name='attend".$row['name']."' но чтобы сделать его еще лучше, вы должны заменить $row['name'] там с уникальным идентификатором, как первичный ключ.

Когда вам нужно перебрать все значения посещений, вам нужно перебрать все имена.

    foreach ($names as $name)
    {
    $value=$_POST['attend'.$name]; //this value could be absent , present or late
echo $name.' '.$value.'<br>'; //You have the name as well as value. Now you can insert or Update them in the database within this loop itself.
    }

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

Я думаю, что мы упускаем довольно много информации, чтобы должным образом помочь вам, но я надеюсь, что вы можете использовать этот кусок кода, который я собрал для вас. Предполагая, что "статус" в базе данных на данный момент равен 1 (как видно из вашего примера), для отсутствующих - 2, а для поздних - 3. Также я предполагаю, что ваш запрос в верхней части вашего результата как-то содержит этот статус. Кроме того, я создал форму для каждой строки таблицы, потому что я не видел ни одного идентификатора учителя, чтобы назначить массив тегам имен флажков.

Ваш PHP-код для обработки формы:

<?php
if ($isset($_POST['attend']) {
  switch ($_POST['attend']) {
    case 'present':
      $status = 1;
      break;
    case 'absent':
      $status = 2;
      break;
    case 'late':
      $status = 3;
      break;
    default:
      $status = 0;
      break;
  }
  if ($status != 0) {
    $query = "INSERT INTO Test (date, status) VALUES (NOW(), " . $status . ")";
    $close = mysqli_query($con, $query);
    echo $_POST['attend'] . " done properly";
  }
}
?>

Ваша форма (я думаю, у вас есть открытие <table> тег и заголовок таблицы где-то до этого):

<?php
$result = mysqli_query(" WHATEVER YOUR QUERY IS ");

$statuses = array(1 => 'Present', 2 => 'Absent', 3 => 'Late');

while ($row = mysqli_fetch_array($result)) { ?>
  <tr>
    <td><img......../></td> 
    <td><?php echo $row['name'] . " " . $row['surname']; ?></td>  
    <td>
    <form action="" method="post">
      <?php foreach ($statuses as $status) { ?>
        <input type="radio" name="attend" value="<?php echo strtolower($status); ?>"<?php echo ($row['status'] == $status) ? ' checked' : ''; ?> /> <?php echo $status; ?> &nbsp;
      <?php } ?>
      <input class='attendanceSubmitBtn' type='submit' name='btnSubmit' value='Submit'> 
    </form>
    </td>
  </tr>
<?php } ?>
</table>
<br/>
Другие вопросы по тегам