以下if
声明是否有更简单的格式?
if((!empty($_SESSION['email'])) && (!empty($_SESSION['serial'])) && (!empty($_SESSION['name'])) && (!empty($_SESSION['number'])) && (!empty($_SESSION['institution'])) && (!empty($_SESSION['address'])) && (!empty($_SESSION['item2']))){
echo "OK u can proceed";
} else {
echo "U didn't complete the requested info";
}
很抱歉,如果这对你来说太简单了,但非常感谢任何亲建议。
答案 0 :(得分:2)
因为条件语句在第一次失败时会“短路”,所以使用迭代器重写你的进程的效率会降低。
如果您只想向用户提供广义反馈,请使用当前的方法,不要使用剩余的括号。
if(!empty($_SESSION['email']) &&
!empty($_SESSION['serial']) &&
!empty($_SESSION['name']) &&
!empty($_SESSION['number']) &&
!empty($_SESSION['institution']) &&
!empty($_SESSION['address']) &&
!empty($_SESSION['item2'])){
// valid
}
或者(同样):
if(empty($_SESSION['email']) ||
empty($_SESSION['serial']) ||
empty($_SESSION['name']) ||
empty($_SESSION['number']) |
empty($_SESSION['institution']) ||
empty($_SESSION['address']) ||
empty($_SESSION['item2'])){
// invalid
}
如果您希望指定失效的原因,那么您是否需要设置迭代过程。此外,如果您要执行迭代验证,您可以借此机会从邪恶行动者注入的$_SESSION
数组中删除任何不需要的元素,以利用超全局上的任何未来循环。
$valid_keys=['email','serial','name','number','institution','address','item2'];
$validated=true; // default value
foreach($valid_keys as $key){
if(!empty($_SESSION[$key])){
$session_data[$key]=$_SESSION[$key];
}else{
echo "Oops, there was missing data on $key";
$validated=false;
break;
}
}
if($validated){...
// from this point, you can confidently run loops on `$session_data` or slap it directly into a pdo call knowing that it has been validated and ordered.
所有这一切,如果你的$_SESSION
元素有可能保持零 - 是/假y /空值,那么isset()是更好的调用(仅{{1}会被抓住)。关于NULL
的另一个好处是它允许将多个变量写入单个调用并保持相同/预期的性能。
isset()
或
if(isset($_SESSION['email'],$_SESSION['serial'],$_SESSION['name'],$_SESSION['number'],$_SESSION['institution'],$_SESSION['address'],$_SESSION['item2'])){
// valid
}
答案 1 :(得分:1)
您可以构建一个函数,在其中传递要检查的所有键。
我已将$_SESSION
更改为$SESSION
以使用某些值来欺骗数组...
<?php
$SESSION = [
'email' => 'xx',
'serial' => 'xx',
'name' => 'xx',
'number' => 'xx',
'institution' => 'xx',
'address' => 'xx',
'item2' => 'xx'
];
$keys = [
'email',
'serial',
'name',
'number',
'institution',
'address',
'item2'
];
if(isNotEmpty($SESSION, $keys)) {
echo "OK u can proceed";
} else {
echo "U didn't complete the requested info";
}
function isNotEmpty($array, $keys) {
foreach($keys as $key) {
if(empty($array[$key])) {
return false;
}
}
return true;
}
答案 2 :(得分:0)
只是&#34;介意游戏&#34;
$arr = array_flip('email', 'serial', 'name','number'...);
if (count(array_filter(array_intersect_key($_SESSION, $arr))) == count($arr)) {
答案 3 :(得分:0)
这只是我的意见,但我认为你的表达很好。也许你可以用另一种方式对其进行格式化以使其更具可读性:
if ( !empty($_SESSION['email']) &&
!empty($_SESSION['serial']) &&
!empty($_SESSION['name']) &&
!empty($_SESSION['number']) &&
!empty($_SESSION['institution']) &&
!empty($_SESSION['address']) &&
!empty($_SESSION['item2']) ) {
/* Proceed */
} else {
/* Don't proceed */
}
或者可以使用自定义验证功能:
/* My original version */
function filled_required_fields($fields, $array) {
$valid = true;
foreach ($fields as $field) {
$valid = $valid && !empty($array[$field]);
if (!$valid) return false;
}
return $valid;
}
/* Cleaner solution based on @caramba's answer */
function filled_required_fields($fields, $array) {
foreach ($fields as $field) {
if (empty($array[$field])) return false;
}
return true;
}
if (filled_required_fields(['email', 'serial', 'name', 'number', 'institution', 'address', 'item2'], $_SESSION) {
/* Proceed */
} else {
/* Don't proceed */
}