Получать строку запроса только при наличии целого числа

#php

#php

Вопрос:

Пытаюсь получить строку запроса в переменную, но только если это целое число.

Код, вероятно, немного сложнее, чем должен быть, но это то, к чему я стремлюсь-

   //get page number. default is 1. check is not empty and is a number      
     if (empty($_GET['pag'])) {$page = 1;}
     else if (is_int($_GET['pag'])){$page = $_GET['pag'];}
     else {$page = 1;}
  

Где я ошибаюсь?

Комментарии:

1. попробуйте is_numeric, потому что $_GET имеет строковый тип

Ответ №1:

Вы, вероятно, хотите is_numeric() вместо этого — is_int() не проверяет, является ли строка числовой строкой.

 if (empty($_GET['pag'])) {$page = 1;}
else if (is_numeric($_GET['pag'])){$page = (int) $_GET['pag'];}
else {$page = 1;}
  

Комментарии:

1. Я все прогуглил и даже наткнулся на это, и по какой-то причине это не зарегистрировалось у меня… Спасибо!

2. is_numeric вернет true для значений с десятичной дробью, таких как 9.1, что может быть не тем, что вам нужно, если вы используете эти переменные для поиска значений идентификаторов из таблицы базы данных. если это ваша ситуация, попробуйте типизацию как int(), как показано ниже

Ответ №2:

Я бы посоветовал, введите приведение значения к целому числу:

 $page = empty($_GET['pag']) ? 1 : (int) $_GET['pag'];
  

Хотя, если я хорошо помню, приведение к типу чего-либо, что не является целым числом, сделает его равным 0, но вы все равно должны проверить, находится ли $page между границами, прежде чем что-либо с ним делать, потому что пользователь может также ввести ?pag0 в вашем URL.

Ответ №3:

 $page = ((isset($_GET['pag']) amp;amp; is_numeric($_GET['pag'])) ? (int)$_GET['pag'] : 1;