Проблема получения значений из флажков или переключателей в php - PullRequest
0 голосов
/ 11 января 2011

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

HTML-код для раздела флажков выглядит следующим образом:

<input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label>
<input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label>
<input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label>

Когда я отправляю форму, массив действий, кажется, не правильноопределены.

Когда я обрабатываю форму, предполагая, что первые два флажка отмечены, когда PHP выполняет

$activity = $_POST['activity'];
var_dump($activity);

, он печатает:

array(2) [0]=> string(0) "" [1]=> string(0) ""

Очевидно, что этообнаружение, что два из трех полей помечены галочкой, но они не проходят через значения.Если HTML-код начинается с атрибута флажка для всех флажков, он корректно отправляется через значение флажка.

Аналогично, с переключателями я не могу получить значение для просмотра, отличное от значения по умолчанию.Если пользователь изменяет значение по умолчанию, то параметр существует, но это пустая строка.

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

Ответы [ 3 ]

1 голос
/ 11 января 2011

Я не могу продублировать ваше поведение с помощью этого простого теста

<?php

if ( isset( $_POST['activity'] ) )
{
  $activity = $_POST['activity'];
  var_dump($activity);
}

?>

<form method="post">
  <input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label>
  <input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label>
  <input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label>
  <input type="submit" value="go" />
</form>

Я нажал «плавать» и «велосипед», и мой вывод выглядел следующим образом

array(2) { [0]=> string(4) "swim" [1]=> string(4) "bike" } 

Так что, возможно, что-то еще не так, что вы не включили в свой вопрос.

Даже когда я проверяю запрос с помощью Firebug, я вижу ожидаемый результат

Content-Type: application/x-www-form-urlencoded 
Content-Length: 39

activity%5B%5D=swim&activity%5B%5D=bike
0 голосов
/ 12 января 2011

К сожалению, проблема не имела ничего общего с тем, что я думал!Благодаря предложениям Питера и Рубина я смог определить, что некоторый JavaScript, который я написал (давным-давно) для проверки формы перед ее отправкой на сервер, ошибочно отбрасывал значения флажков и переключателей, когда онифокус.Простым тестом для подтверждения поля ввода была остановка текстовой области, чтобы это не произошло!

0 голосов
/ 11 января 2011

Это работает, как и ожидалось для меня, просто скопировать и скопировать.
Это действительно не работает для вас, если вы выделите этот бит так:

<form action="test.php" method="post">
<input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label>
<input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label>
<input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label>
<input type="submit">
</form>
<?php
$activity = $_POST['activity'];
var_dump($activity);
?>

Я подозреваю, что вы не изолировали эту проблему (как я сделал в этом фрагменте), и она лежит где-то еще. Может ли это быть правильно?

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