получение значения true / false, возвращаемого из флажка, ошибка при false

#php #checkbox

#php #флажок

Вопрос:

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

у меня есть флажок с именем «htemail», когда я отправляю его в скрипт, у меня есть этот код:

 if(!$_POST['htemail']){
  $usehtml = 0;
}else{
  $usehtml = 1;
}

echo($usehtml);
  

если флажок установлен, он возвращает 1, но если это не так, я получаю следующую ошибку:

Обратите внимание: Неопределенный индекс: htemail в C:wampwwwmailing listcreateUser.php в строке 7 Вызовите Stack #TimeMemoryFunctionLocation 10.0004673576{main}( )..CreateUser.php:0 0.

Первое, что я подумал сделать, это перевернуть код назад, чтобы он сначала проверил наличие проверки (я не уверен, почему я думал, что это поможет)

Заранее спасибо за любые ответы.

Ответ №1:

Браузер может не включить данные post, если они не отмечены. Используйте функцию isset , чтобы проверить это. Если значение не установлено, значит, оно не проверено, наоборот, неверно, если установлено, все равно может быть false.

 if(isset($_POST['htemail']) amp;amp; $_POST['htemail'] == "Value"){ //where "Value" is the
          //same string given in the HTML form, as value attribute the the checkbox input
  $usehtml = 1;
}else{
  $usehtml = 0;
}
  

В качестве альтернативы isset вы можете использовать array_key_exists

Ответ №2:

Что вы хотите, так это определить существование элемента массива, а затем проверить его содержимое:

 $usehtml = 0;

if (isset($_POST['htemail']) amp;amp; strtolower($_POST['htemail']) == 'yes'){
    $usehtml = 1;
}

echo($usehtml);
  

isset() проверяет, существует ли элемент массива, и в этом случае вы можете затем проверить, соответствует ли значение вашему требуемому значению.

Кроме того, выше я приказал вычислению по умолчанию принимать значение (0), затем изменить на другое значение, если присутствует другая переменная. На самом деле нет большой разницы между выполнением этого и инструкцией if / else, но я думаю, что это удобнее для чтения и понимания.