Как проверить, установлен ли $ _GET , и он не пуст, используя php

Вот PHP-код

if(isset($_GET['id'])) { //do something } else { redirect('index.php'); //redirect is a function } 

Теперь, если id установлен (ex: index.php? Id = 12), тогда действие выполняется, но если id не установлен (ex: index.php? Id =), это показывает ошибку, как преодолеть это …? ?

Как определить id является целым числом, и он не пуст, а затем выполняет конкретное действие ….

отредактированный

Спасибо всем за ваши ответы, но я все еще получаю эту ошибку …

 if(isset($_GET['id'])) { // I implemented all these codes but still.... $user= User::find_by_id($_GET['id']); // Database Classes Fetches user info from database } else { redirect('index.php'); //redirect function } 

Если идентификатор равен 1 или больше 1, сценарий выполняется отлично. (index.php? id = 1)

Но id i устанавливает id как замечающий, я получаю ошибку i..e index.php? Id =

Код должен автоматически перенаправлять пользователя на страницу index.php, а не показывать ошибку …..

ОШИБКА: Ошибка базы данных: у вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «LIMIT 1» в строке 1

Вы должны проверить как статус набора, так и контент:

 if ( isset( $_GET['id'] ) && !empty( $_GET['id'] ) ) // .... 

Обратите внимание, что вы не должны использовать значение просто так, как есть, и работать с ним. Вы должны убедиться, что он содержит только ожидаемые значения. Чтобы проверить целое число и даже лучше работать с целым рядом с этим, сделайте что-то вроде этого:

 $id = ( isset( $_GET['id'] ) && is_numeric( $_GET['id'] ) ) ? intval( $_GET['id'] ) : 0; if ( $id != 0 ) // id is an int != 0 else redirect('index.php'); 

Что говорит вам об ошибке?

Но это будет проверять, установлено ли оно, и если это целое число

 if(isset($_GET['id']) && ctype_digit($_GET['id']) && intval($_GET['id']) > 0) 

is_numeric @ php.net

Или проверьте ctype_digit

 if (!empty($_GET['id']) && filter_var($_GET['id'], FILTER_VALIDATE_INT)) 

или

 if (!empty($_GET['id']) && ctype_digit($_GET['id'])) 

Ну … Если вы настроите его как переменную типа целочисленного типа, вы также можете сделать это:

 if($_GET['id'] && gettype($_GET['id']) == 'integer'){ #do something }else{ #do something else } 

Как определить id является целым числом, и он не пуст, а затем выполняет конкретное действие ….

 if (!empty($_GET['id']) && (intval($_GET['id']) == $_GET['id'])) { //do something } else { redirect('index.php'); //redirect is a function } 

Вышеупомянутое не может быть лучшим решением, но оно должно работать для вас. Он не позволит id быть 0 и потребует от него целого числа.

  if(isset($_GET['id']) && ctype_digit($_GET['id']) && is_numeric($_GET['id']) && $_GET['id']>0) { $user= User::find_by_id($_GET['id']); } else { redirect('index.php'); //redirect function } 

Попробуйте это, и этот код полностью соответствует вашим требованиям.

Кажется, что у вас просто проблема с идентификатором? Id, бросающим true, когда вы хотите проверить, установлен ли его набор. То потому что оно установлено, но не установлено к значению которое вы хотел были бы использовать.

Я предполагаю, что идентификаторы пользователя должны быть> 0, поэтому просто сделайте это

 if (isset($_GET['id']) && $_GET['id'] > 0) { $user= User::find_by_id($_GET['id']); } else { redirect('index.php'); } 

Также вы очень хорошо очищаете идентификатор перед его обработкой

 $userID = isset($_GET['id']) && $_GET['id'] > 0 ? (int) $_GET['id'] : 0; if ($userID) { $user= User::find_by_id($userID); } else { redirect('index.php'); } 

Есть много способов сделать это, лично я предпочитаю это. Это делает ваш код немного чище.

Вам нужно будет проверять несколько раз для каждого возможного случая: что, если id не установлен или пуст? что, если id установлен, но это не цифра? что, если ключ «id» вообще не существует в запросе GET?

У меня была схожая ситуация. Я отправлял два vars с GET, одна цифра: «id», а другая была строкой, которая называлась «state» … Я решил ее, проверив все возможные условия.