Путайтесь с пустым, isset,! Empty,! Isset

У меня есть следующее, которое не работает должным образом, поскольку $_GET['category'] также может равняться 0.

 if ( empty( $_GET['category'] ) ){ // do something } else { // do something else } 

Как переписать этот оператор if, чтобы сделать 3 разных вещи

  1. Сделайте что-нибудь, если $_GET['category'] вообще не существует
  2. Сделайте что-нибудь, если $_GET['category'] == 0
  3. Сделайте что-нибудь, если $_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 }