[RESOLU] Petite question de débutant.

Avatar du membre
Eléphanteau du PHP | 25 Messages

06 janv. 2015, 03:07

Bonjour, bonsoir.

Je voulais savoir pourquoi se code fonctionne :
<?php

if (!isset($_POST['nom']) OR empty($_POST['nom']))

{
    echo 'Aucun nom';
}

else

{
    echo htmlspecialchars($_POST['nom']);
}

?>
Et pas celui là :
<?php

if (isset($_POST['nom']) OR !empty($_POST['nom']))

{
    echo htmlspecialchars($_POST['nom']);
}

else

{
    echo 'Aucun nom'
}

?>
Juste une petite logique de PHP que j'ai encore du mal à comprendre .. Merci de votre aide :)

Nestecha
Invité n'ayant pas de compte PHPfrance

06 janv. 2015, 05:54

Pas une question de logique, les deux fonctionnent, c'est juste qu'il manque un ; après le deuxième echo dans le deuxième code.
{
    echo 'Aucun nom'
}
en
{
    echo 'Aucun nom';
}

ViPHP
ViPHP | 928 Messages

06 janv. 2015, 12:15

Le second ne fonctionnera pas car isset() se contente de vérifier s'il y a "nom" qui existe dans $_POST, peu importe que l'utilisateur ait renseigné un nom ou ait laissé un espace vide.

D'ailleurs sache que empty() fait aussi un test d'existence (isset) en interne. Donc le plus simple c'est de faire tout simplement ça :
if (!empty($_POST['nom']))
{
   // L'utilisateur a bien renseigné son nom
}
else
{
   // L'utilisateur n'a pas renseigné son nom
}
En dehors de ça, tu ne peux pas inverser les OU et garder un comportement. Regarde par exemple cette phrase en français :
1. S'il pleut OU qu'il fait froid, je mets mon manteau
1. S'il ne pleut pas OU qu'il ne fait pas froid, je ne mets pas mon manteau -> dans ces cas là ce n'est pas bon, car il peut très bien ne pas pleuvoir mais faire froid, et dans ce cas là tu as besoin de ton manteau. Il faut donc aussi remplacer le OU par un ET.

Avatar du membre
Eléphanteau du PHP | 25 Messages

06 janv. 2015, 16:23

D'accord, merci beaucoup pour vos explications. Je comprends mieux :)