Как проверить, установлен ли $_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"... Я решил ее, проверив все возможные условия.