Установка флажка для распознавания его предполагаемых данных - PullRequest
2 голосов
/ 31 января 2010

Уровень: PHP Learner

Я застрял с проблемой флажка. У меня есть БД, которая содержит имена и уникальные номера идентификаторов.

Используя запрос, я выбираю студентов и показываю их пользователю в ультра-простой HTML-таблице на форме. Каждый ряд начинается с флажка. Метод POST. Все идет нормально. Моя таблица выглядит так:

+-----------+----------+----------+
|   SELECT  |    NAME  |    ID    |
+-----------+----------+----------+
|   []      |    John  |    2233  |
+-----------+----------+----------+
|   []      |    Susie |    5577  |
+-----------+----------+----------+

[-SUBMIT-]

Моя проблема в том, что я не могу связать флажок с уникальным идентификатором каждой записи. После того, как пользователь выбрал строки и нажал «Отправить», массив $_POST остается пустым.

Ни одна из моих книг для начинающих не ссылается на эту конкретную проблему. Они проходят «обычные» процедуры флажков, которые не предполагают взаимодействия со строками из БД. Я также не смог найти проблему в Stackoverflow, которая решает эту проблему. Также попробовал Google: много вещей на флажках, но я не смог найти ничего, что помогло бы мне в этой проблеме.

Ответы [ 2 ]

7 голосов
/ 31 января 2010

Просто сделайте что-то вроде этого:

<input type="checkbox" name="ids[]" value="2233" /> ... rest of row
<input type="checkbox" name="ids[]" value="5577" /> ... rest of row

Теперь в PHP вы можете получить выбранное ids следующим образом:

$ids = $_POST['ids'];
if( empty($ids) ) $ids = array();

Устанавливает $ids в пустой массив, если форма была отправлена ​​без каких-либо флажков.

1 голос
/ 31 января 2010

Редактировать: Если ваша форма не становится более сложной, как вы описываете, используйте подход Дуга Нейнера, поскольку он намного проще. Этот подход верен, если в таблице может быть несколько столбцов.

Мне нравится делать это так:

Пронумеруйте флажки последовательно (от 1 до 100) и добавьте скрытое поле, связывающее номер строки с реальным идентификатором базы данных:

<input type="checkbox" name="row_1" value="checked">`
<input type='hidden' name='row_1_id' value='2233'>`

Сохранить общее количество строк в другом скрытом поле

<input type='hidden' name='row_total' value='99'>

Затем в получающем скрипте итерируйте от 1 до общего количества строк, используя for, проверьте, была ли выбрана эта строка, и получите соответствующий идентификатор базы данных:

for ($i = 1; $i <= $number_of_rows; $i++)
{
  if ($_POST["row_$i"] == "checked")
   {
     $database_id_unsafe = $_POST["row_{$i}_id"];
 ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...