Quand utiliser empty ou isset en PHP ?

Réponses rédigées par Antoine
Dernière mise à jour : 2022-05-19 10:44:07
Thèmes : php - if - elseif - isset - empty
Question

Bonjour, Je comprendrai tout à fait si vous pensez que j'abuse de votre patience et savoir. Je n'arrive toujours pas à faire plusieurs conditions avec les balises vides ou pleines.

Dans ce code, cela ne passe jamais dans le 3ième elseIf.

<?php
// Conditions de traitement des balises reçues
// Si la variable new-asset est pleine et si la variable old-asset est vide.
if (!empty($_POST["new-asset"])&& !!!empty($_POST['old-asset'])) 
{// Set session variables
      
            echo 'IF new-asset seul';
}
// Si la variable old-asset est pleine et si la variable new-asset est vide.
        elseIF(!empty($_POST['old-asset']))
        {// Set session variables
            
            echo 'ElseIF old-asset seul';
        }
        // Si les deux variables new-asset et old-asset sont pleines.
        elseIF(!empty($_POST['new-asset']) && !empty($_POST['old-asset']))
        {// Set session variables
            
            echo 'ElseIF old-asset and new-asset';
        }
        // Function suite clique sur le bouton précédent.
elseif(isset($_SESSION['Balises2'])){
        $page='5';
        precedent();
    }
?>

Quelle est mon erreur?

Merci.

Réponse

Bonjour, dans votre code PHP vous avez donc deux éléments qui sont passés au serveur PHP via un formulaire :

  • $_POST["new-asset"]
  • $_POST["old-asset"]

Dans un premier temps, peu importe de savoir si ces éléments sont vides ou contiennent une valeur ; vous devez vous assurer qu'ils sont correctement définis, c'est à dire qu'ils ont bien été transmis par le formulaire.

Remarque : Pourquoi vérifier cela ? Pour des raisons de sécurité ; parce qu'un logiciel (un bot) pourrait soumettre le formulaire de manière automatisé, et omettre volontairement l'un des éléments.

Pour vérifier que tous les éléments ont bel et bien été transmis vous devez utiliser la fonction isset() qui, en cas d'erreur, génère une erreur du type warning.

Une fois cette vérification effectuée vous pouvez utiliser la fonction empty() ; elle permet de vérifier si une variable est nulle, mais aussi comme isset(), de vérifier qu'elle existe, à la différence qu'elle ne génère pas d'erreur warning ; ce qui est moins pratique pour un debug.

Concernant votre code, vous aviez des problèmes de parenthèses, voici le code fonctionnel avec l'ajout de la fonction isset() :

<?php
// Si les éléments ont bien été reçu et ne valent pas NULL
if (isset($_POST["new-asset"]) && isset($_POST["old-asset"]))
{
  // Si la variable new-asset est pleine et si la variable old-asset est vide.
  if (!empty($_POST["new-asset"]) && empty($_POST['old-asset']))
  {// Set session variables
    echo 'IF new-asset seul';
  }
  // Si la variable old-asset est pleine et si la variable new-asset est vide.
  else if (!empty($_POST['old-asset']) && empty($_POST["new-asset"]))
  {// Set session variables
    echo 'ElseIF old-asset seul';
  }
  // Si les deux variables new-asset et old-asset sont pleines.
  else if (!empty($_POST['new-asset']) && !empty($_POST['old-asset']))
  {// Set session variables
    echo 'ElseIF old-asset and new-asset';
  }
}
?>

Remarque : Utiliser la fonction empty() c'est bien, mais rien ne vous empêche de la shunter, et à la place de faire :

  // Si la variable new-asset est pleine et si la variable old-asset est vide.
  if (($_POST["new-asset"] != "") && ($_POST['old-asset'] == ""))
    echo 'IF new-asset seul';
  }