Как проверить, установлен ли $_GET ['id'], и он не пуст, используя 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 - это целое число и оно не пустое, а затем выполнить определенное действие....

Edited

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

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, то script выполняется отлично. (index.php? id = 1)

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

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

ОШИБКА: Ошибка базы данных: у вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с "LIMIT 1" в строке 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');

Ответ 2

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

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

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

is_numeric @php.net

Или зайдите ctype_digit

Ответ 3

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

или

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

 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
  }

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

Ответ 7

Кажется, что у вас просто проблема с идентификатором? 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'); 
}

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

Ответ 8

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

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