У меня есть следующее, которое не работает должным образом, поскольку $_GET['category']
также может равняться 0.
if ( empty( $_GET['category'] ) ){ // do something } else { // do something else }
Как переписать этот оператор if, чтобы сделать 3 разных вещи
$_GET['category']
вообще не существует $_GET['category'] == 0
$_GET['category'] ==
что-то другое, кроме «не существует» и 0. Я пробовал разные комбинации empty()
!empty()
, isset()
!isset()
но я не получаю результаты, которые мне нужны. Возможно, я ошибаюсь …
Это не очень сложно сделать: isset
– это тот метод, который вам нужен.
if (!isset($_GET['category'])) { // category isn't set } elseif ($_GET['category'] === '0') { // category is set to 0 } else { // category is set to something other than 0 }
Обратите внимание, что я сравнил для точного равенства строку '0'
, потому что переменные GET
и POST
всегда являются строками (или иногда массивами) и никогда не зацикливаются, когда PHP впервые их получает.
if (!isset($_GET['category'])) { 1. Do something if $_GET['category'] does not exist at all } elseif ($_GET['category'] == 0) { 2. Do something if $_GET['category'] == 0 } elseif (isset($_GET['category']) && ($_GET['category'] != 0) { 3. Do something if $_GET['category'] == something other than "does not exist" and 0. }
Мои скобки могут быть немного где-то, но, надеюсь, это поможет вам.
Для таких случаев существует filter_input
.
<?php $bad_values = array(null, '', 'dirty word'); if(isset($_GET['xd'])) { if(in_array($_GET['xd'], $bad_values, true)) { // bad, it was null, empty or something else you think is not ok } else { // it's fine, now check whether you got the zero. do a string comparison if($_GET['xd'] == '0') { // you got the zero, yell at the user } else { // you got something else, it might be fine, it might be spoofed. use referential integrity to enforce data integrity in your db } } } else { // it wasn't even sent in the request, that falls under 1) }
Убедитесь, что атрибут имени элемента, который находится на предыдущей странице, задан, предпочтительно так же, как и его id
. Затем:
$category=''; if ( !isset( $_GET['category'] ) ){ //1 } else { $category=$_GET['category']; //3 if($category==0){ //2 } }
Попробуй это:
if (!isset($_GET['category'])) { // if variable not specified } elseif ($_GET['category'] == 0) { // variable is specified and zero } else { // variable is specified and not zero }