【问题标题】:Check if a variable is an integer in PHP [duplicate]检查变量是否是PHP中的整数[重复]
【发布时间】:2015-06-01 05:44:29
【问题描述】:

我正在编写一个分页脚本,我想让用户能够控制一页中显示多少结果。我通过使用 GET 变量来做到这一点,例如:example.org/articles.php?count=10。唯一的问题是 GET 变量必须是整数,否则代码会出现随机错误,其中一些包含用户不应该看到的信息。

这是我的代码:

// Checks if there is a GET variable (this part works fine)
if (isset($_GET["count"])) {
    if (!empty($_GET["count"])) {
        $page_rows = $_GET["count"];
    } else { 
        $page_rows = $page_rows_default;
    }
} else { 
$page_rows = $page_rows_default;
}

// checks if the GET variable is an interger
// if not, the offending value is replaced with 0 
// (it doesn't work)
if(is_int($page_rows) == false) {
    $page_rows = 0;
}

根据我的实验,我的代码可以容忍零和负整数,但在给出?count=asdf 之类的内容时会失败。我主要不希望用户能够通过将随机文本注入 GET 变量来使脚本崩溃。如何让脚本自动检测非整数值以便处理它们而不是简单地停止代码?

【问题讨论】:

  • 尝试使用 is_numeric() 。 php.net/manual/en/function.is-numeric.php
  • 脚本是否检查值是否为数字无关紧要,因为您使用的 GET 请求只能在页面请求中进行操作。因此,如果我也愿意,我可以进入浏览器的地址栏并输入example.org/articles.php?count=asdf 并获取您试图阻止用户看到的信息。您应该使用 POST 方法,该方法将在 HTTP 标头中发送请求。关于分页,您应该使用带有10, 20, 50, 100, ALL(或类似内容)的下拉框作为选项。

标签: php variables numbers


【解决方案1】:

您可以使用is_numeric()。 供参考http://php.net/manual/en/function.is-numeric.php

【讨论】:

  • 答案是正确的。 Downvoters 提到了原因。!!
  • 这必须是评论。不是答案。谢谢。
  • is_numeric 仅检查变量是否为任何数字数据类型(double、int、..)并且 1.23 不是整数,而是双精度数。 is_numeric(1.23) 是真的。
  • 这里的问题指定“自动检测非整数值”,如 ?count=asdf 。所以 is_numeric 有效
  • ?count=1.23 不适用于is_numeric(),正如“take”所提到的,它只检查数字类型,而不是整数。
【解决方案2】:

is_numeric() 可以帮你搞定

if(is_numeric($page_rows))
{
   //your condition 
}
else
{
 //another condition
}

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 2013-10-14
    • 2011-01-12
    • 1970-01-01
    • 2011-09-18
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多