Existe-t-il un format plus simple pour l'instruction if suivante ci-dessous?

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";
}

Désolé si c'est trop simple pour vous, mais appréciez vraiment toute suggestion de pro.

2
P. Lau 18 nov. 2017 à 13:33

4 réponses

Meilleure réponse

Étant donné que l'instruction conditionnelle "court-circuitera" lors du premier échec, la réécriture de votre processus à l'aide d'un itérateur sera moins performante.

Si vous souhaitez uniquement fournir des commentaires généralisés à l'utilisateur, utilisez votre méthode actuelle sans les parenthèses en surplus.

if(!empty($_SESSION['email']) &&
   !empty($_SESSION['serial']) &&
   !empty($_SESSION['name']) &&
   !empty($_SESSION['number']) &&
   !empty($_SESSION['institution']) &&
   !empty($_SESSION['address']) &&
   !empty($_SESSION['item2'])){
    // valid
}

Alternativement (idem):

if(empty($_SESSION['email']) ||
   empty($_SESSION['serial']) ||
   empty($_SESSION['name']) ||
   empty($_SESSION['number']) |
   empty($_SESSION['institution']) ||
   empty($_SESSION['address']) ||
   empty($_SESSION['item2'])){
    // invalid
}

Ce n'est que si vous souhaitez spécifier la cause de l'invalidation que vous devez prendre la peine de mettre en place un processus itératif. De plus, si vous comptez effectuer des itérations pour valider, vous pouvez en profiter pour supprimer tous les éléments indésirables du tableau $_SESSION que des malfaiteurs auraient pu injecter pour profiter des futures boucles sur le superglobal.

$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.

Cela dit, s'il y a la moindre chance que vos éléments $_SESSION puissent contenir des valeurs nulles / false-y / vides, alors isset () est le meilleur appel (seul NULL sera attrapé). Une autre bonne chose à propos de isset() est qu'il permet d'écrire plusieurs variables dans un seul appel et de maintenir les mêmes performances / prévues.

if(isset($_SESSION['email'],$_SESSION['serial'],$_SESSION['name'],$_SESSION['number'],$_SESSION['institution'],$_SESSION['address'],$_SESSION['item2'])){
    // valid
}

Ou

if(!isset($_SESSION['email'],$_SESSION['serial'],$_SESSION['name'],$_SESSION['number'],$_SESSION['institution'],$_SESSION['address'],$_SESSION['item2'])){
    // invalid
}
2
mickmackusa 18 nov. 2017 à 11:48

Ce n'est que mon avis, mais je pense que votre expression est bonne. Vous pourriez peut-être le formater d'une autre manière pour le rendre plus lisible:

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 */

}

Ou peut-être utiliser une fonction de validation personnalisée:

/* 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 */
}
0
Jordi Nebot 18 nov. 2017 à 11:17

Juste des "jeux d'esprit"

$arr = array_flip('email', 'serial', 'name','number'...);
if (count(array_filter(array_intersect_key($_SESSION, $arr))) == count($arr)) {
0
splash58 18 nov. 2017 à 10:48

Vous pouvez créer une fonction dans laquelle vous passez toutes les clés que vous souhaitez vérifier. J'ai changé $_SESSION en $SESSION pour tromper le tableau avec quelques valeurs ...

<?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;
}

PHP Fiddle

1
caramba 18 nov. 2017 à 11:56
47365047