Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这是测试已发布变量是否存在的正确方法吗?_Php - Fatal编程技术网

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

Php 这是测试已发布变量是否存在的正确方法吗?,php,Php,如果查询可以选择性地作为get()或post()运行,以便$id=$\u post['id']可以获得空值,那么这些都是测试可能发布的变量是否存在的好方法 if(!empty($\u POST['id']){$id=$\u POST['id'];}else{$id=FALSE;} if(isset($\u POST['id']){$id=$\u POST['id'];}else{$id=FALSE;} $id=isset($\u POST['id'])$_POST['id']:FALSE 还是有

如果查询可以选择性地作为
get()
post()
运行,以便
$id=$\u post['id']
可以获得空值,那么这些都是测试可能发布的变量是否存在的好方法

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

if(isset($\u POST['id']){$id=$\u POST['id'];}else{$id=FALSE;}

$id=isset($\u POST['id'])$_POST['id']:FALSE

还是有其他更喜欢的方法?他们都做了两次
$\u REQUEST()
,这让我觉得可能有更好的方法


谢谢

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

if (!empty($_POST['id'])){ $id = $_POST['id'];}else{$id = FALSE;}
考虑以下事项:

  • “”(空字符串)
  • 0(0作为整数)
  • 0.0(0作为浮点数)
  • “0”(0作为字符串)
  • 空的
  • 假的
  • array()(空数组)
  • $var;(声明了一个变量,但没有值)
只检查它是否为空。

我会选择:

$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;
 }
如果您使用$u POST作为一个简单的ID,只需使用(int)$u POST['ID']将其转换为int即可。这样你肯定有一个号码

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,
         )
   ));
我会用

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

  • 如果设置了一个值(以免触发通知),以及
  • 如果是空字符串
    '
empty()
的问题是它将0和0.0视为空,这可能会有问题,因为值有时可能是0

单独使用
isset()
的问题是,它将
'
(空字符串)视为已设置,因此,如果有人提交表单时没有填写特定字段,
isset()
将通过返回TRUE来传递它
strlen()
用于检查长度非零的值是否确实存在

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

如果它是用查询字符串发布的(因此
$\u GET
$\u POST
都包含
id
),该怎么办

您必须选择要使用的
id
(这完全取决于您自己)

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


使用
array\u key\u exists($\u POST,'variable')
。其中任何一个都可以,最后一个(三元)是最好的。
isset($\u POST)
isset($\u GET)
检查使用了哪个方法used@YoavKadosh不,最好使用
$\u服务器['REQUEST\u METHOD']='POST'
来测试所使用的方法。您会发现所有这些方法都在使用中。PHP没有很多非常好的语言结构,比如Ruby或JavaScript连词:
id=$\u POST['id']| | false
aha,是的,但是
id
可能是
0
。所以我想我会选择
isset()
。谢谢你应该在问题中提到这一点<代码>isset()
将是理想的选择。这看起来非常全面。我很清楚,
strlen($\u POST['id'])
$id=(int)$\u POST['id'])之间有分号吗?Thanks@thomas不,没有。这是一个简单的
if
语句,在一行中。很好的解决方案。谢谢你,约翰。
POST /yourscript.php?id=4
Host: yoursite.com

id=3
$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);