Обеспечение информации после?целое число - PullRequest
2 голосов
/ 28 августа 2011

Я перешел с HTML на PHP кодирование, поэтому, когда я хотел создать ссылку для своей страницы новостей, я использовал HREF, чтобы взять идентификатор строки в качестве ссылки и сделать заголовок фрагмента видимой / кликабельной ссылкой :

echo "<a href=news.php?id=".$row{'id'};
echo ">";
echo ucwords(strtolower($row{'newstitle'}));
echo "</a>";

Поэтому, когда кто-то нажимает на заголовок, он перенаправляет на статью, и адресная строка становится (очевидно, это пример): http://site.com/news.php?id=1

Как я могу проверить эту информацию после? это id = int (это всегда будет число), а не какой-то код пользователя или другой ввод, который может повредить сайт? Я рассмотрел способы дезинфекции / проверки кода, но все примеры, которые я нашел, были связаны с вводом информации в формы, которые затем используются в адресе, а не просто с гарантией того, что адрес действителен, поэтому обратимся к этому для оказания помощи. Спасибо

Ответы [ 3 ]

3 голосов
/ 28 августа 2011

Вы должны использовать модуль фильтра :

$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($id === false) {
     // not an integer
}

Или вы можете использовать ctype_digit(), чтобы проверить, состоит ли переменная только из десятичных цифр:

if (ctype_digit($_GET['id'])) {
    // it's an integer
} else {
    // not an integer
}

Или короче:

ctype_digit($_GET['id']) or die("oops that's not an integer!");

Но die или exit сделает ваш код менее проверяемым.


is_numeric тоже будет работать, но вернет true для любого строкового представления числа, а не только для целых чисел.

1 голос
/ 28 августа 2011

Попробуйте это

<?php
if (is_int($_GET["id"])) {
echo "is integer\n";
} else {
echo "is not an integer\n";
}
?>
0 голосов
/ 28 августа 2011

Если вы исключили 0 в качестве действительного числа для своего целочисленного идентификатора, вы можете просто сделать следующее:

$id = (int) $_GET['id'];
if (!$id) {
    # no number -or- 0 given
} else {
   # regardless what have been given, it has been converted at least to some integer.
}

Это путем приведения.Теперь $id всегда является целым числом, поэтому его безопаснее использовать.

Однако чаще всего вам также необходимо проверить, что число неотрицательно:

$id = max(0, $_GET['id']);

max функция выполняет преобразование $_GET['id'] в целое число.Это гарантирует, что идентификатор равен 0 или выше в случае, если предоставленное значение было больше 0. Если оно было 0 или ниже, максимальное значение равно 0.

Если вам необходимо действительно более строго проверить ввод,Вы можете превратить его обратно в строку для сравнения:

if ("$id" === $_GET['id'])
{
   # Input was done as a string representation of the integer value.
}
...