определить, установлен ли флажок php $ _GET - PullRequest
3 голосов
/ 15 августа 2010

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

Мой HTML-код

    <label>
    <input name="Language" type="checkbox" id="aa"  checked="checked"  />
    One</label>
    <label>
    <input name="Language" type="checkbox" id="bb" />Two</label>
    <label>
   <input type="checkbox" name="Language"  id="cc" />Three</label>

Я передаю значения php методом $ _GET

мой php код:

$aa=$_GET["aa"];
$bb=$_GET["bb"];
$cc=$_GET["cc"];


echo $aa."<br>";
echo $bb."<br>";
echo $cc."<br>";

вывод правда ложный ложь

Далее я хочу просто определить, установлен ли каждый флажок, и если да, сделать что-нибудь.

if ($aa == true) { $abc="checked";}
else { $abc="not checked"; }

if ($bb == true) { $cde="checked";}
else { $cde="not checked"; }


if ($fgh == true) { $fgh="checked";}
else { $fgh="not checked"; }

Но операторы if всегда возвращают true, даже если флажок не установлен. Я пробовал варианты "===" и "! =", Но, похоже, это не работает.

ТИА

Ответы [ 3 ]

4 голосов
/ 15 августа 2010
if (isset($_GET['checkbox_name'])) { ... }

Элементы управления формы (за исключением входных файлов и с некоторыми специальными правилами для входов изображений) всегда отправляют строки . В строке запроса или в теле POST, закодированном в форме, отсутствует понятие логического значения.

Идентификатор не имеет значения - важны только имя и значение (по крайней мере, для PHP).

Так как вы не дали им значения, они будут, IIRC, по умолчанию on, поэтому, если вы проводите сравнение, вы должны искать это. Хотя смотреть с isset проще. Хотя это несколько не относится к делу, поскольку ваш пример дает им одно и то же имя и значение, поэтому вы не можете различить их.

Кроме того, из-за странности синтаксического анализатора данных PHP, вы должны заканчивать его [], если вы хотите, чтобы несколько элементов имели одно и то же имя.

Вы, вероятно, хотите сделать что-то вроде этого:

<label>
<input name="Language[]" type="checkbox" id="aa"  checked="checked" value="One" />
One</label>
<label>
<input name="Language[]" type="checkbox" id="bb" value="Two" />Two</label>
<label>
<input type="checkbox" name="Language[]"  id="cc" value="Three" />Three</label>

Важно : обратите внимание на добавление значений и изменение имени.

Тогда в PHP $_GET['Language'] будет Массив значений отмеченных флажков, которые вы можете зациклить.

1 голос
/ 15 августа 2010

Попробуйте isset()

Я думаю, ваш HTML-код должен быть похож на

<label>
  <input name="Language[]" type="checkbox" id="aa" checked="checked" value ="1" />One    
</label>
<label>
  <input name="Language[]" type="checkbox" id="bb" value ="2" />Two
</label>
<label>
  <input name="Language[]" type="checkbox"  id="cc" value ="3" />Three
</label>

и затем используя что-то вроде

$count = count($_GET["Language"]); Вы можете подсчитать количество отмеченных флажков.

Или сделать

$arr = $_GET["Language"]; //$arr is an array that contains the values of the checked checkboxes

Тогда вы можете foreach над массивом

   foreach( $arr as $item)
   {
        echo $item . "</br>"; /* Will print 1,2 and 3 (mind newlines)*/
   }
0 голосов
/ 15 августа 2010

В моем PHP я получил его от $_POST['checkbox_name'] и обнаружил, что переменная имеет значение on, когда флажок установлен (то есть он существует, даже если флажок снят).

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