8768 sujets

Développement web côté serveur, CMS

Bonjour,

Je veux stocker dans une valeurs mon nom (c'est un exemple pour illustrer mon problème). Cependant je souhaite que si le nom n'est pas indiqué, une alerte apparaisse.
Ce nom est envoyé sous forme de formulaire en méthode POST.

if (isset($_POST['name'])) {
    $name = $_POST['name'];
}
else {?>
    <div class="error2">Veuillez saisir un nom</div>
<?php }


Après quelques tests, j'ai l'impression que la fonction isset renvoie ici toujours "true".
En effet ma div n’apparaît jamais même si aucune valeurs n'est rentrée :
- J'ai vérifié avec l'inspecteur d'élément et la valeurs name est bien vide
- En faisant un var_dump($_POST['name']), cela m'affiche bien ""
- La fonction isset fonctionne pourtant bien, je l'ai testée avec une simple variable null et tout fonctionne.

Voici mon input :
<input id="default" class="name" type="text" name="name" placeholder="Nom" autocomplete="family-name" minlength="2" maxlenght="20">


J'ai l'impression de passer à coté d'une simple erreur. Et pourtant ça fait deux heures.
Merci d'avance pour vos réponses.

*******

Une autre question sans rapport avec mon problème. Lorsque l'utilisateur se connectera sur la page, la valeurs sera forcément null puisqu'il n'aura pas encore remplit le formulaire. Est-il possible d'afficher l'erreur uniquement si le formulaire a été soumis ? Merci.

cordialement,
Mattéo Goudin
Modifié par mattzeub (08 Apr 2019 - 02:31)
Bonjour,

essaie de compléter ton test de cette façon:

if (isset($_POST['name']) && $_POST['name'] != "" )


pour tester si ton formulaire a été soumis il y a plusieurs techniques, tu peux par exemple ajouter un champ input de type hidden et tester sa présence dans le tableau $_POST au chargement de la page

// dans ton formulaire
<input type="hidden" val="form-sent">


// au début de ta page
if (isset($_POST['form-sent'])) {
   // mon formulaire a été validé
} else {
   // je viens de charger la page
}

Modifié par lionel_css3 (08 Apr 2019 - 07:26)
Bonjour,

isset() vérifie qu'une variable existe et renvoie true même si sa valeur est vide.

Pour vérifier si elle contient quelque-chose, entre-autre, il faut alors utiliser empty()

Php.net a écrit :

Valeurs de retour

Retourne FALSE si var existe et est non-vide, et dont la valeur n'est pas zéro.

Les valeurs ci-dessous sont considérés comme étant vide :

"" (une chaîne vide)
0 (0 en tant qu'entier)
0.0 (0 en tant que nombre à virgule flottante)
"0" (0 en tant que chaîne de caractères)
NULL
FALSE
array() (un tableau vide)

Smiley biggrin

PS : empty cumule la fonctionnalité de isset dans la mesure où si la variable n'existe pas aucune alerte n'est levée (équivalent à return false)
Modifié par Greg_Lumiere (08 Apr 2019 - 11:29)
lionel_css3 a écrit :
empty() et $_POST['name'] != "" c'est un peu la même chose Smiley smile
Un peu mais pas tout à fait Smiley cligne
Et empty permet de s'affranchir de isset. Smiley langue
Il me semble,
que si tu fais
$_POST['name'] != ""

si "name" n'existe pas dans POST, tu as direct une fatal error.
empty te renvoi false si elle n'existe pas.
Modifié par JENCAL (08 Apr 2019 - 15:12)
Si tu veux aussi éviter les données en post qui ne contiennent que des espaces, tu peux aussi ajouter trim() :

	
if ( !empty(trim($_POST['name'])) ) // + sauf $_POST['name'] = '  ';
{
    // Go
}

Modifié par Depassage (08 Apr 2019 - 15:25)
Depassage a écrit :
@Jencal, tu auras des notices


Ah oui exact Smiley smile

c'est parce mes notices sont des ErrorException, du coup j'ai une page 500..
Modifié par JENCAL (08 Apr 2019 - 15:39)
Oui en ce cas tu es obligé d'appliqué le trim après le test de nullité.

Il me semble qu'ainsi ça passe
if (!empty($_POST['name']
&& !empty(trim($_POST['name]))) {

car si la première ligne est false alors le second test n'est pas évalué (je n'en suis pas sûr ne procédant pas ainsi dans mes process Smiley confused (j'applique le trim un poil plus bas dans mon code)
Modifié par Greg_Lumiere (08 Apr 2019 - 16:50)
D'ailleurs j'y pense, PHP n'applique-t-il pas systématiquement un trim aux données de formulaire ? Il me semble l'avoir lu quelque-part.
yes ducoup j'avais mal compris le concept du ISSET.
Merci pour vos réponses je marque le sujet en résolu. Bonne journée Smiley smile
Modifié par mattzeub (10 Apr 2019 - 23:47)