Всем привет. Делаю простой сайт, появилась необходимость создать динамическую форму, то есть по запросу выводить в таблицу записи и одно поле сделать динамическим. Я делаю так, Код (Text): <td><input type="checkbox" name="was<?php echo $row["std_id"]; ?>" value=""></td> Собственно вопросы 1. Вроде выводится, но может есть более правильный вариант. 2. И самое главное, как ее теперь обработать, в смысле работа с динамическими именами. Спасибо
Отправлять форму на сервер, теперь мне как-то нужно обработать чекбоксы. Думаю повторно выполнить запрос к базе данных (по которому формировал форму), затем для каждой строки сформировать такое же имя, как и для формы, а затем как-то найти в $_POST нужные значения.
тогда лучше вот так вот сделать Код (Text): <td><input type="checkbox" name="was[<?= $row["std_id"] ?>]" value="1"></td> после отправки на сервер получите в $_POST массив was у которого ключи будут Ваши std_id.. --- Добавлено --- Код (Text): foreach($_POST['was'] as $k => $v){ echo "Ключ {$k} => Значение {$v}<br />"; }
Спасибо, так гораздо лучше. Уже понятно, буду разбираться дальше. А можно ли в массиве хранить по два значения?
можно... значением массива может быть другой массив... Код (Text): $array = [ 'key' => ['first_val', 'second_val], ]
Я имел ввиду двумерный массив. Что-то типа Код (Text): <td><input type="checkbox" name="was[<?= $row["std_id"][1] ?>]" value="1"></td> <td><input type="text" name="was[<?= $row["std_id"][2] ?>]"></td>
это $row["std_id"][2] уже не двухмерный.. Код (Text): $row = [ 'std_id' => [ '2' => 'то значение которое Вы указали', ] ]; А Вы наверно вот это спрашивали... запустите этот код у себя и посмотрите что POST возвращает когда галочки чекбоксах стоят PHP: <?php if(isset($_POST)){ var_dump($_POST); } echo ' <form method="POST" action=""> <input name="arr[]" type="checkbox" /> <input name="arr[][]" type="checkbox" /> <input type="submit"> </form>';
Немного проясняется. На самом деле мне нужно вывести в форме таблицу студентов определенной группы, 4 колонки: 1. Имя 2. Фамилия 3. <input type="checkbox" name= для отметки о присутствии 4. <input type="text" name= для оценки за урок, может быть, а может не быть Собственно, какие выводы я сделал. В массиве $_POST будут только выбранные элементы type="checkbox", но все type="text". Теперь собственно изучаю, как лучше задать атрибут name для этих двух input, и как правильно обработать.
Из-за того, что type="checkbox" будут только отмеченные, неизвестно будет ли включен js у клиента, решил использовать два массива was для отметки о присутствии на уроке и mark для оценки. Вот часть формы Код (Text): <?php while($row = mysqli_fetch_assoc($result)) { ?> <tr> <td><?php echo $row["std_FName"]; ?></td> <td><?php echo $row["std_LName"]; ?></td> <td><input type="checkbox" name="was[<?= $row["std_id"] ?>]" value="1"></td> <td><input style="width: 250px; margin-left: 50px;" type="text" name="mark[<?= $row["std_id"] ?>]"></td> </tr> <?php } ?> А вот код обработки Код (Text): if(!empty($_POST["addlesson"])) { echo "Добавляем уроки по группе!!! <br />"; foreach($_POST['mark'] as $k => $v){ $www = 0; if (!empty($_POST['was'][$k])) { $www = $_POST['was'][$k]; } echo "Оценка для std_id = {$k} - {$v} Присутствовал - {$www} <br />"; // Формируем INSERT для записи урока для каждого студента } Необходимо ли что-нибудь улучшить или и так работать будет? Спасибо