IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Vérification données saisie dans formulaire


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Points : 35
    Points
    35
    Par défaut Vérification données saisie dans formulaire
    Bonjour,

    J'ai créé un formulaire pour stocker des infos dans une table.

    Pour commencer, j'ai juste saisi ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?php 
    if (($_POST["nom"])&&($_POST["prenom"])&&($_POST["mail"]))
     
    { 
    $vnom = $_POST["nom"]; 
    $vprenom = $_POST["prenom"]; 
    $vmail = $_POST["mail"]; 
    }
     
    else
     
    { 
     
    } 
    ?>
     
     
    <HTML>
    <H2>M'inscrire</H2>
    <HR>
    <FORM action="ajouter.php" method="POST">
    <TABLE align=center>
    <TR>
    <TD>Votre nom</TD>
    <TD><input type="text" name="nom" size=25></TD>
    </TR>
     
    <TR>
    <TD>Votre prénom</TD>
    <TD><input type="text" name="prenom" size=25></TD>
    </TR>
    <TR>
    <TD>Votre adresse mail</TR>
    <TD><input type="text" name="mail" size=25></TD>
    </TR>
    <TR>
    <TD>Pseudo</TR>
    <TD><input type="text" name="pseudo" size=25></TD>
    </TR>
    <TR>
    <TD>Mot de passe</TD>
    <TD><input type="password" name="pass" size=25></TD>
    </TR>
    <TR>
    <TD></TD>
    <TD><input type="submit" value="m'inscrire"></TD>
    </TR>
    </TABLE>
    </FORM>
    </HTML>
    Quand je lance, j'ai ce message d'erreur...

    Undefined index: nom in C:\wamp\www\cours\ajouter.php on line 2

    Avez vous svp une idée ?

    Merci par avance.

  2. #2
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

    En regardant ton code, ligne 2, tu as ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (($_POST["nom"])&&($_POST["prenom"])&&($_POST["mail"]))
    (petite note au passage : utilise la balise [ code ] si tu veux voir les numéros de ligne et même avoir la coloration syntaxique ).
    Le message d'erreur t'indique un problème d'index. En effet, la première fois que tu affiches ta page, $_POST n'est pas rempli et donc ne contient ni $_POST["nom"], ni $_POST["prenom"], ni même $_POST["mail"]. Il faut donc que tu imbriques tes instructions PHP dans une clause qui vérifie l'existence de tes paramètres. La fonction isset est faite pour cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["mail"])) {
        $vnom = $_POST["nom"];
        $vprenom = $_POST["prenom"];
        $vmail = $_POST["mail"];
    }
    Pour faire encore plus propre et t'assurer d'avoir des variables initialisées, je te conseille cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $vnom = isset($_POST["nom"]) ? $_POST["nom"] : "";
    $vprenom = isset($_POST["prenom"]) ? $_POST["prenom"] : "";
    $vmail = isset($_POST["mail"]) ? $_POST["mail"] : "";
    Ainsi, tu es sûr que tes variables sont bien initialisées.

    En espérant répondre à ton problème.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Points : 35
    Points
    35
    Par défaut
    Merci pour ta rapide réponse.

    J'ai écrit ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php 
    if (isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["mail"]))
     
    {
     
     
    $vnom = isset($_POST["nom"]) ? $_POST["nom"] : "";
    $vprenom = isset($_POST["prenom"]) ? $_POST["prenom"] : "";
    $vmail = isset($_POST["mail"]) ? $_POST["mail"] : "";
     
    }
     
    else 
     
    {
     
    	echo "Veuillez remplir tous les champs !";
    }
    ?>
    Finalement, je n'ai plus de message d'erreur mais il ne m'affiche pas le message "Veuillez remplir tous les champs" et il me vide tous les champs.

    Si tu as une idée. Un grand merci.

  4. #4
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Si je décompose ton code actuel :

    1. le programme regarde si $_POST["nom"], $_POST["prenom"] et $_POST["mail"] sont initialisés -> non
    2. il passe donc dans la condition else d'où ton message "Veuillez remplir tous les champs"


    Si tu souhaites valider ton formulaire, il faut commencer par récupérer toutes les variables éventuelles initialisées en mettant ce code à part (et surtout pas dans ton if) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $vnom = isset($_POST["nom"]) ? $_POST["nom"] : "";
    $vprenom = isset($_POST["prenom"]) ? $_POST["prenom"] : "";
    $vmail = isset($_POST["mail"]) ? $_POST["mail"] : "";
    Ensuite, si l'un des champs est vide, là tu affiches ton message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($vnom == "" || $vprenom == "" || $vmail == "") {
        echo "Veuillez remplir tous les champs !";
    }
    Enfin dernière étape : dans ta page, tu remets dans chaque input toutes les valeurs que tu as éventuellement saisies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <TD>Votre nom</TD>
    <TD><input type="text" name="nom" size=25 value="<?php echo $vnom;?>"></TD>
    ...
    <TD>Votre nom</TD>
    <TD><input type="text" name="prenom" size=25 value="<?php echo $vprenom;?>"></TD>
    ...
    <TD>Votre nom</TD>
    <TD><input type="text" name="mail" size=25 value="<?php echo $vmail;?>"></TD>

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Points : 35
    Points
    35
    Par défaut
    Un grand merci. Je galère depuis un bon moment et ca marche !
    La seule chose c'est que lorsque je lance pour la première fois le formulaire, j'ai déjà le message qui affiche "Veuillez remplir tous les champs" mais le reste fonctionne... Merci.

  6. #6
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Pour résoudre ce dernier souci, tu peux utiliser une variable cachée qui te permettra de savoir s'il s'agit de la première fois que tu lances ou non ton formulaire.
    Dans ton code HTML, tu rajoutes une variable cachée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="premierChargement" value="<?php echo premierChargement; ?>" />
    Et dans ton code PHP, tu rajoutes un test sur cette variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $premierChargement = (isset($_POST["premierChargement"]) ? $_POST["premierChargement"] : "");
     
    ...
     
    if (!$premierChargement && ($vnom == "" || $vprenom == "" || $vmail == "")) {
        echo "Veuillez remplir tous les champs !";
    }
    $premierChargement = "une_valeur_bidon_tant_quelle_est_non_nulle";
    (note : ligne 6 ci-dessus = la condition if que je t'avais déjà donnée avant, mais avec une vérification supplémentaire sur $premierChargement)

    N'oublie pas le bouton Résolu une fois ton problème réglé

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Points : 35
    Points
    35
    Par défaut
    Merci pour l'info.

    J'ai testé mais lorsque je lance la première fois le formulaire il me marque toujours le message et si je saisie par exemple que le nom le message "Tout les champs sont obligatoire" disparait...

    En gros cela fait l'inverse de ce que je veux...

    Je dois avoir une coquille quelque part...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php 
     
    $premierChargement = (isset($_POST["premierChargement"]) ? $_POST["premierChargement"] : "");
     
    $vnom = isset($_POST["nom"]) ? $_POST["nom"] : "";
    $vprenom = isset($_POST["prenom"]) ? $_POST["prenom"] : "";
    $vmail = isset($_POST["mail"]) ? $_POST["mail"] : ""; 
     
     
    if  (!$premierChargement && ($vnom == "" || $vprenom == "" || $vmail == "")) {
        echo "Veuillez remplir tous les champs !";
    }
     
     
    $premierChargement = "test"; 
     
     
    ?>
     
     
    <HTML>
    <H2>M'inscrire</H2>
    <HR>
    <FORM action="ajouter.php" method="POST">
    <TABLE align=center>
    <TR>
    <TD>Votre nom</TD>
    <TD><input type="text" name="nom" size=25 value="<?php echo $vnom;?>"></TD>
    </TR>
     
    <TR>
    <TD>Votre prénom</TD>
    <TD><input type="text" name="prenom" size=25 value="<?php echo $vprenom;?>"></TD>
    </TR>
    <TR>
    <TD>Votre adresse mail</TR>
    <TD><input type="text" name="mail" size=25  value="<?php echo $vmail;?>"></TD>
    </TR>
    <TR>
    <TD>Pseudo</TR>
    <TD><input type="text" name="pseudo" size=25></TD>
    </TR>
    <TR>
    <TD>Mot de passe</TD>
    <TD><input type="password" name="pass" size=25></TD>
    </TR>
    <TR>
    <input type="hidden" name="premierChargement" value="<?php echo $premierChargement; ?>" />
    <TD></TD>
    <TD><input type="submit" value="m'inscrire"></TD>
     
     
    </TR>
    </TABLE>
    </FORM>
    </HTML>

  8. #8
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Oups, au temps pour moi, il s'agit d'une erreur sur le test de la variable $premierChargement. La bonne condition est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($premierChargement != "" && ($vnom == "" || $vprenom == "" || $vmail == "")) {
        echo "Veuillez remplir tous les champs !";
    }
    Cette fois, ça devrait être bon.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Points : 35
    Points
    35
    Par défaut
    Un grand merci. Tout fonctionne parfaitement bien.

    Merci pour toutes tes explications précises et pro.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/09/2008, 07h41
  2. données saisies dans un formulaire
    Par sellig42 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/03/2008, 13h29
  3. Réponses: 25
    Dernier message: 12/04/2007, 11h32
  4. Recuperer les données saisie dans un formulaire
    Par hunzi dans le forum XMLRAD
    Réponses: 3
    Dernier message: 29/08/2006, 15h22
  5. Réponses: 8
    Dernier message: 19/05/2005, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo