2013-09-04 2 views
4

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

Это используется локальный хост IIS, проверяющий вещи.

В Интернете опубликованные идентичные сценарии работают независимо от того, что. Ну, практически идентичный. Я локально добавил переменную «test» POST-ed в php и сравнивал с жестко закодированным значением. Это все.

Вот HTML для флажка:

<tr> 
<td>Publish Comment?</td> 
<td><input name="publishok" value="NO" type="checkbox"> Check Box For Do spanstyle="font-weight: bold;">Not</span> Publish</td> 
</tr> 
<tr> 

и вот PHP для переменного, 'publishok':

$IP = $_SERVER["REMOTE_ADDR"]; 
$publishok = $_POST['publishok']; 
$test = $_POST['test']; 
if ($test != 'park') die ("Wrong input. Sorry. Go back, try again"); 

Я подозревал, что мой редактор PSPad добавлял паразитный (и невидимый) символ коды или что-то, поэтому я обновился до последней версии. Нет разницы.

Не может думать, что может вызвать это.

Может ли кто-нибудь помочь?

+1

Но да, это причуда в стандарте HTML/HTTP, когда люди заботились о том, как долго длились HTTP-запросы. Кто-то подумал: «Эй, все равно пусто, нам не нужно говорить им об этом, мы можем сохранить целые * 3 байта *, не отправляя им эту информацию!» Но вы далеки от первого или последнего человека, чтобы справиться с этой причудой. – Retsam

ответ

9

checkbox не отправляет данные на сервер, если вы его не проверяли.

Вы должны использовать isset($_POST['publishok']), чтобы проверить его, будет ли он проверен на стороне сервера.

0

Я верю, что флажки и переключатели не отправляют данные о получении/отправке, если не выбраны/отмечены (вы можете проверить это, выполнив var_dump/print_r на $ _GET/$ _ POST), поэтому вы должны сделать что-то вроде:

if(isset($_POST['publishok'])){ 
    $publishok = $_POST['publishok']; 
}else{ 
    $publishok = "";#default value 
} 
+0

Isset не говорит мне, что это за значение. Только это есть. Это в самом сердце? Я должен протестировать, как булевский? Ожидать нуль как «отрицательное» и (любое) значение как «положительное»? Но это порождает ошибку, которую я имел, и исправил ее с помощью «скрытого» var. Очень неряшливо, не так ли? Как установить значение поля в html и как я должен тестировать php? Или я должен использовать какой-то другой метод? – user577111

5

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

<input name="publishok" value="0" type="hidden"> 
<input name="publishok" value="NO" type="checkbox"> 
+1

Да, это был ответ, над которым я работал; но я не знал, что вы можете просто дублировать имя. Я думал, что вам нужно установить скрытое значение с помощью функции onSubmit или что-то в этом роде ... – Retsam

+0

Ну, спасибо за это. Это заработало. Но меня не интересуют флажки. Я даю ему значение в форме в html - используется как «NO», но теперь значение будет равным нулю скрытого var, если оно не проверено. Правильно? Так что это будет «ноль». – user577111

+0

@ user577111 Да, это будет '0', но вы можете изменить его на все, что хотите. Это может быть «НЕТ», если вы этого хотите. – totymedli

Смежные вопросы