2

我已经从 HTML 转向 PHP 编码,所以当我想为我的新闻页面创建链接时,我使用 HREF 将行的 id 作为链接,并将文章的标题设为可查看/可点击的链接:

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(它总是一个数字)而不是一些用户代码或其他可能损坏网站的输入?我已经研究过清理/验证代码的方法,但我发现的所有示例都与将信息输入表单有关,然后在地址中使用,而不是简单地确保地址有效,因此转向这里寻求帮助。谢谢

4

3 回答 3

3

您应该使用过滤器模块

$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,而不仅仅是整数。

于 2011-08-28T12:16:25.747 回答
1

试试这个

<?php
if (is_int($_GET["id"])) {
echo "is integer\n";
} else {
echo "is not an integer\n";
}
?>
于 2011-08-28T12:16:18.413 回答
0

如果您已将0整数 id 排除为有效数字,则只需执行以下操作:

$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.
}

那是通过铸造。Now$id总是一个整数,所以使用起来更安全。

但是,通常您还需要检查该数字是否为非负数:

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

max函数确实负责转换$_GET['id']为整数。如果提供的值大于 0,它确保 id 为 0 或更高。如果为 0 或更低,则 0 是最大数字。

如果您随后需要更严格地实际验证输入,则可以将其转回字符串以进行比较:

if ("$id" === $_GET['id'])
{
   # Input was done as a string representation of the integer value.
}
于 2011-08-28T12:43:35.843 回答