Вот 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» … Я решил ее, проверив все возможные условия.