Как управлять переключателями? данные отражены из базы данных, 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
<input type='radio' name='attend' value='absent' /> Absent
<input type='radio' name='attend' value='late' /> Late
<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
<input type='radio' name='attend".$row['name']."' value='absent' /> Absent
<input type='radio' name='attend".$row['name']."' value='late' /> Late
<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; ?>
<?php } ?>
<input class='attendanceSubmitBtn' type='submit' name='btnSubmit' value='Submit'>
</form>
</td>
</tr>
<?php } ?>
</table>
<br/>