Посмотрите на Django Poor Man's Cron, который является приложением Django, которое использует спам-роботы, роботы с индексированием поисковых систем и аналогичные для регулярного выполнения запланированных заданий
Почему is_int всегда возвращает false?
Потому что $ _ GET ["id"]
- это строка, даже если она содержит число.
Ваши варианты:
Используйте фильтр расширение. filter_input (INPUT_GET, "id", FILTER_VALIDATE_INT)
вернет целочисленную переменную, если переменная существует, не является массивом, представляет собой целое число и это целое число находится в допустимых пределах. В противном случае он вернет false
.
Принудительно преобразовать его в целое число (int) $ _ GET ["id"]
- вероятно, это не то, что вы хотите, потому что вы не можете должным образом обрабатывать ошибки (например, "id" не является числом)
Используйте ctype_digit ()
, чтобы убедиться, что строка состоит только из чисел и, следовательно, является целым числом - технически это возвращает true
также с очень большими числами, выходящими за рамки int
, но я сомневаюсь, что это будет проблемой. Однако обратите внимание, что этот метод не распознает отрицательные числа.
Не используйте:
is_numeric ()
, потому что он также распознает значения с плавающей запятой (1.23132) Потому что переменные HTTP всегда либо строки, либо массивы. А элементами массивов всегда являются строки или массивы.
Вам нужна функция is_numeric
, которая вернет истину для «4»
. Либо так, либо преобразование переменной в int $ foo = (int) $ _GET ['id']
...
Потому что $ _GET - это массив строк.
Чтобы проверить, содержит ли параметр get целое число, вы должны использовать is_numeric ()
Потому что $ _ GET ['id']
- это строка , как и другие части строки запроса. Вы нигде не конвертируете его в целое число, поэтому is_int
вернет false.
Вероятно, он хранится в виде строки в $ _GET, приведите его к типу int.