0

如果查询可以可选地作为 aget() a运行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()两次,这使我倾向于认为可能有更好的方法。

谢谢!

4

5 回答 5

1

我会用

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

去测试

  • 如果设置了一个值(以免触发通知),以及
  • 如果它是一个空字符串''

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

单独的问题isset()在于它将''(空字符串)视为已设置,因此如果有人碰巧提交了表单而没有填写特定字段,isset()则会通过返回 TRUE 让它通过。strlen()是否可以检查是否确实存在非零长度的值。

于 2013-03-01T19:38:52.510 回答
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 用作一个简单的 ID,只需使用 (int)$_POST['id'] 将其转换为 int。这样你肯定有一个号码。

于 2013-03-01T19:32:47.280 回答
0

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

如果它与查询字符串一起发布(所以两者都$_GET包含$_POSTid怎么办?

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

id=3

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

作为其他人建议的替代方法,您可以使用 PHP 的内置过滤器函数

$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);
于 2013-03-01T19:50:28.280 回答
0

虽然都可以使用,但您的第一个选项是检查的最佳方法:

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

考虑以下事项empty()

  • ""(一个空字符串)
  • 0(0 为整数)
  • 0.0(0 作为浮点数)
  • "0" (0 作为字符串)
  • 无效的
  • 错误的
  • array() (一个空数组)
  • $var; (声明的变量,但没有值)

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

于 2013-03-01T19:19:18.510 回答
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,
         )
   ));
于 2013-03-01T19:36:07.753 回答