我有许多确认检查:
if (isset($_POST['name']) && isset($_POST['day']) && isset($_POST['month']) && isset($_POST['year']) && isset($_POST['email']) && isset($_POST['email2'])&& isset($_POST['pass']) && isset($_POST['pass2']))
{
有没有办法缩短它?
$isset = array
(
'name', 'day', 'month', 'year',
'email', 'email2', 'pass', 'pass2'
);
foreach ($isset As $set)
{
if (!isset($_POST[$set]) || empty($_POST[$set]))
{
echo 'error';
break;
}
}
这是对的吗?
答案 0 :(得分:4)
您只能使用循环和empty
:
$keys = array('name', 'day', 'month'); // ...
foreach ($keys as $key) {
if (empty($_POST[$key])) {
// fail
break;
}
}
或者您可以使用array_diff_key()
:
if (array_diff_key(array_flip($keys), $_POST)) {
// fail (some keys not present in $_POST)
}
答案 1 :(得分:3)
isset()
可以使用多个参数,因此您可以像这样缩短它。
if (isset($_POST['name'], $_POST['day'], $_POST['month'], $_POST['year'], $_POST['email'], $_POST['email2'], $_POST['pass'], $_POST['pass2']))
答案 2 :(得分:3)
定义一个这样的函数:
function getPost($key, $default = null) {
if (isset($_POST[$key])) {
return $_POST[$key];
}
return $default;
}
然后您可以跳过isset验证。如果没有这样的值,默认情况下,该函数将返回null
。
答案 3 :(得分:2)
如果您从输入表单发送这些内容并且您的默认值属性为value =“”,那么它仍将在$ _POST中设置。
例如,如果上一页有:
<input type="text/css" id="email" name="email" value="" />
然后,如果用户将其留空,则isset($ _ POST ['email'])将返回true,$ _POST ['email']将具有值“”。那没用,对吧?
试试这个。
$c = 0;
foreach($_POST as $key => $value)
{
$value = trim($value);//Makes sure there's no leading, or ending spaces. Safe to guard against a string that is " " instead of "".
if(strlen($value) > 0)
{
$c++;
}
else
{
echo "$_POST['" . $key . "'] has a problem.";
}
break;
}
然后,对于您所考虑的任何条件,您的新if语句可以是:
if($c == 8)//8 being the number of keys you're expecting to not be "" or null.
{
//Your conditions.
}
记住这一点很好。你只测试8个数组键,但如果你有800个怎么办?这样的事情是必要的。
答案 4 :(得分:1)
取决于你在做什么,如果要设置一个值,三元运算符会产生奇迹:
isset($_POST['day'])?$day=_POST['day'] :$day='';
在该行之后,$ day始终设置,您只能使用if($ day)进行测试。
如果有许多值,您始终可以循环运行此分配:
foreach(array('day','month','name') as $var)
{
isset($_POST[$var])?$$var=$_POST['$var']:$$var='';
}