在$_REQUEST[]
或$_POST[]
收到很多变量的php文件上,如果值为null
且功能为isset()
,则必须检查它们,这相当麻烦。有更好的解决方案吗?是否有更好的解决方案来检查许多变量,看看它们中的一个在PHP中是否为null?
回答
如何使用in_array
和array_map
,的组合,例如:
// array of possible parameters that can be passed by the client
$keys = array('username','password');
// this will store the names of the ones that are not present
$missing = array();
foreach($keys as $key) {
if(!in_array($key, $_POST)) {
$missing[] = $key;
}
}
$nullOffsets = array_map("is_null", $_POST);
echo 'Printing missing params:<br />';
print_r($missing);
echo 'Printing null existing params:<br />';
print_r($nullOffsets);
如果你有一个数组变量(不只是使用请求或交阵列),你可以遍历他们调用isset()
功能。根据你当前的代码是什么,这可能是'更好'。
用户输入检查很麻烦,但它是一个必要的罪恶。
我个人更喜欢不使用$_GET
或$_POST
,而不是将需要的内容复制到我自己的变量中进行处理。
在我的PHP文件的顶部,我一直与我想从$_GET
或$_POST
复制值的名称的数组,这就增加了:
// the following array needs to be modified when you change your input specs
$inputAllowed = array("name", "title", "company");
$input = array();
foreach($inputAllowed as $key)
if(array_key_exists($key, $_POST))
$input[$key] = $_POST[$key];
else
$input[$key] = "";
它很容易增加一个“is_null”检查在那里与处理,以防万一不应该为空。或者你可以先让循环完成,然后遍历$输入
如果任何指定的参数未发布,将生成通知 – 2009-11-16 15:19:08
为真。对不起,干编了。固定array_key_exists – nash 2009-11-16 15:29:31
我会使用unset而不是将其设置为'“”' – 2012-05-26 18:16:49
你可以尝试将数组包装在一个对象中。
class ArrayWrapper {
private $data;
public function __get($var) {
if (!isset($this->data[$var])) {
return false;
}
else {
return $this->data[$var];
}
}
public function __construct($a) {
$this->data = $a;
}
}
$a = array('test' => 1);
$aw = new ArrayWrapper($a);
if ($aw->test != false) {
echo "test: ".$aw->test;
}
if ($aw->foo != false) {
echo "foo: ".$aw->foo;
}
您应该使用!==。如果其他人返回“”,该怎么办? PHP评估(“”== false)为true – 2012-05-26 18:16:28
- 1. 看变量,看它是否更改值
- 2. Laravel多个get()请求 - 是否有更好的解决方案?
- 3. 我应该使用null来查看PHP中的变量是否为空?
- 4. 一个解决方案检查每个表格是否为空
- 5. 是否真的没有解决方案来更新MySQL中的多个记录?
- 6. 这是一个很好的测试,看看是否设置了一个变量
- 7. 是否有一个很好的简单方法来检查Javascript中的变量是否有值?
- 8. PHP - 查看数据库中是否存在多个文件的好方法?
- 9. 这是很好的解决方案吗?隐藏/查看标签
- 10. PHP检查文件大小以查看它是否改变
- 11. 如何检查Python中的许多变量是否为空?
- 12. 检查输入,看它是否在Java中是双精度的
- 13. 比较两个文件,看它们在PHP中是否相同
- 14. 是否有一个本地php函数来查看一个值的数组是否在另一个数组中?
- 15. 有没有办法看多个文本框来查看文本是否改变?
- 16. 作为我整个解决方案的变量是否有这样的事情?
- 17. php检查两个变量是否为空并将它们合并到一起
- 18. 是否有一个更好的(轻量级)解决方案用php和codeigniter自动完成没有jQuery UI?
- 19. 检查用户是否被允许在asp.net中查看网页
- 20. 最好的方法来检查一个URL是否有效
- 21. 问题检查,看看是否存在一个值Swift 2
- 22. 检查登录凭据以查看它们在Active Directory中是否有效并检查它们是否与AD中的特定组相区别
- 23. 检查,看看是否通过FTP
- 24. 是否可以通过查看HTTP流量来查看是否使用了AJAX?
- 25. PHP:检查一个变量是否是某个类的实例
- 26. 在Zend中,有没有更好的方法来检查用户是否有Identity()?
- 27. 查看密码是否等于变量
- 28. 检查它是否是安全的迭代一个JavaScript变量
- 29. 将阵列拆分为二维阵列:是否有更好的解决方案?
- 30. 检查所有表单值以查看它们是否为空的最简单方法是什么C#?
这并不检查应该是有,但不存在摆在首位,这大概就是为什么OP使用'isset()函数数组项',而不是'空()' – Lukman 2009-11-16 10:42:19
@Lukman - 感谢您的评论,我编辑了解决该问题的答案。 – karim79 2009-11-16 10:56:50
这不起作用,因为您正在循环$ _POST而不是$键。你只是得到了一个意外的密钥列表 – 2009-11-16 10:59:30