【问题标题】:php url parameters checkphp url参数检查
【发布时间】:2023-03-08 19:01:01
【问题描述】:

我正在创建一个依赖 $_GET 才能正常运行的网站。 它的工作原理是这样的:http://www.example.com/show?q=14&i=48 qi 是 MySQL 服务器上的 ID,必须使用 mysql_query() 等获取。参数总是整数。

如果有人在没有任何参数的情况下键入 url,PHP 和 MySQL 都会报错。 PHP 用于未定义的变量,MySQL 用于不正确的语法。

到目前为止我尝试过的方法不起作用我总是得到“错误”;

if (is_int($_GET['q']) AND is_int($_GET['i']))
{
 echo "All good.";
}
else
{
 echo "Error.";
}

我在这里做错了什么。

谢谢, 没有

【问题讨论】:

    标签: php validation url


    【解决方案1】:

    这是因为您检查的是变量的类型,而不是其内容。通过$_GET 来自查询字符串的任何内容都被视为字符串,因此您应该使用ctype_digit() 而不是is_int(),并检查值是否存在empty()

    【讨论】:

    • +1,我的想法完全正确。 ctype_digit() 甚至做$_GET['i'] = (int)$_GET['i'];
    • 铸造也有效,但我宁愿拒绝错误的输入也不愿修复它
    【解决方案2】:

    您应该使用 is_numeric 而不是 is_int
    is_int 为数字字符串返回 false

    缺点是is_numeric 函数对于"1.5" 之类的数字也返回true。 如果你不想这样,你可以检查函数here

    【讨论】:

      【解决方案3】:

      你应该试试isset($_GET[q])

      if(isset($_GET[q]) && isset($_GET[i])){
      
      }
      

      【讨论】:

      • isset() 不是解决它的正确函数,因为正如 kemp 所说,$_GET 中的所有内容都被视为字符串。所以example.com/show?q=&i= 返回“一切都好”。
      • 根据问题,您的示例中的情况不会发生。他说,“如果有人在没有任何参数的情况下键入 url,PHP 和 MySQL 都会大喊错误。”在您的示例中存在两个参数。我的部分解决方案只对 PHP 端有帮助,但对 MySQL 端没有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 2017-04-18
      • 1970-01-01
      • 2011-07-18
      • 2013-04-09
      相关资源
      最近更新 更多