这是测试已发布变量存在的正确方法吗?

时间:2013-03-01 19:16:20

标签: php

如果某个查询可以选择作为get() post()运行,以便$id = $_POST['id']可能获得空值,那么这些中的任何一个都是测试可能发布的变量存在的良好实践方法。

if (!empty($_POST['id'])){ $id = $_POST['id'];}else{$id = FALSE;}

if (isset($_POST['id'])){ $id = $_POST['id'];}else{$id = FALSE;}

$id = isset($_POST['id']) ? $_POST['id'] : FALSE;

还是有其他一些首选方法?他们都做了$_REQUEST()两次,这让我觉得可能有更好的方法。

谢谢!

5 个答案:

答案 0 :(得分:1)

我会选择:

$id = isset($_POST['id']) && strlen($_POST['id']) > 0 ? (int)$_POST['id'] : FALSE;

首先检查是否设置了var,然后检查长度是否超过0.

在我看来,它是最好的可读性,因为如果你正确地缩进它就不需要5行代码,是什么让它更难以阅读并使你的文件更长:

 if (isset($_POST['id'])){ 
   $id = $_POST['id'];
 }else{
   $id = FALSE;
 }

如果你使用$ _POST作为一个简单的东西,只需使用(int)$ _ POST ['id']将其强制转换为int。这样你肯定会有一个号码。

答案 1 :(得分:1)

我会用

if (isset($_POST['id']) && strlen($_POST['id'])) $id = (int)$_POST['id'];

测试

  • 如果设置了值(以便不触发通知),则
  • 如果是空字符串''

empty()的问题在于它将0和0.0视为空,这可能会有问题,因为该值有时可能为0。

单独isset()的问题在于它将''(空字符串)视为已设置,因此,如果某人恰好在未填写特定字段的情况下提交表单,isset()会让它通过通过返回TRUE。 strlen()用于检查是否确实存在非零长度的值。

答案 2 :(得分:0)

尽管可以使用所有内容,但您的第一个选择是检查的最佳方式:

if (!empty($_POST['id'])){ $id = $_POST['id'];}else{$id = FALSE;}

以下内容被视为empty()

  • “”(空字符串)
  • 0(0为整数)
  • 0.0(0作为浮动)
  • “0”(0作为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • $变种; (声明的变量,但没有值)

isset()仅检查它是否为空。

答案 3 :(得分:0)

function getByKey($arr, $key, $default = false) {
   return isset($arr[$key]) ? $arr[$key] : $default;
}

$id = getByKey($_POST, 'id');

其他方式就像

   $id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT, array(
        'options' => array(
            'min_range' => 1, 
            'max_range' => 255,
            'default' => 1,
         )
   ));

答案 4 :(得分:0)

  

如果查询可以选择作为get()或post()

运行

如果它与查询字符串一起发布(因此$_GET$_POST都包含id)会怎样?

POST /yourscript.php?id=4
Host: yoursite.com

id=3

您必须选择使用哪个id(这完全取决于您)。

作为其他人建议的替代方案,您可以使用PHP的内置filter functions

$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);
相关问题