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);