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 :

Réafficher un formulaire lors d'une erreur


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Points : 25
    Points
    25
    Par défaut Réafficher un formulaire lors d'une erreur
    Bonjour.
    J'ai un formulaire qui envoie des informations dans ma base de donnée.
    Comment faire pour réafficher mon formulaire en cas d'erreur ?

    Voici mon code qui fait des tests pour savoir si les champs sont bien remplis.
    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
    <?php session_start(); 
     
    if (isset($_POST['nomAn']) AND isset($_POST['prenom']) AND isset($_POST['datenaissance'])) // Si les variables existent
    {
    	if ($_POST['nomAn'] != NULL AND $_POST['prenom'] != NULL and $_POST['datenaissance'] != NULL ) // Si on a quelque chose à enregistrer
    	{
            include ("ConnexionBaseDonnée.php");
            $nomAn=$_POST['nomAn'];
            $prenom=$_POST['prenom'];  //On récupère la valeur du champ concernant le libelle
            $age=$_POST['datenaissance'];
            $telephone1=$_POST['telephone1'];
            $telephone2=$_POST['telephone2'];
            $newanimateur = new animateur();
            $newanimateur->nomAn =$nomAn;
            $newanimateur->prenom =$prenom;
            $newanimateur->age =$age;
            $newanimateur->telephone1 =$telephone1;
            $newanimateur->telephone2 =$telephone2;
            $newanimateur->insert_animateur();
        }
        	else
    	{
    		echo" Attention, remplir tous les champs";
    		exit;
        }
     
     
    }
     
    ?>
    Le code concernant la création de mon formulaire est:
    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
    <html>
    <head>
    <title>Fiche d'un animateur</title>
    </head>
    <body>
    <form method="POST"  name="Animateur" action="CreerAnimateur.php"  >
    Nom de l'association  
    <?
    include ("ConnexionBaseDonnée.php");
    $req="select nom from association";
    $resultat=mysql_query($req);
    ?>
    <select name="nom">
    <?
    while ( $ligne=mysql_fetch_array($resultat))  //recherche toutes les infos concernant le nom de l'association
    {
      $val = $ligne['nom'];
      print "<option value='$val'>$val</option>";
    }
    ?>
    </select> <br><br> <br>
    Type d'activité  <input type="text" name="type" /> <br> <br>
    Libellé de l'activité  <input type="text" name="libelle" /> <br> <br>
    Nom de l'animateur <input type="text"  name="nomAn"/><br> <br>
    Prénom de l'animateur <input type="text"  name="prenom"/><br> <br>
    Date de naissance <input type="text" name="datenaissance"/><br> <br>
    Téléphone1 <input type="text" name="telephone1"/><br> <br>
    Téléphone2 <input type="text" name="telephone2"/><br> <br>
    <?
     
    $req="select libelle from diplome";
    $resultat=mysql_query($req);
    ?>
    <b>Diplôme</b>
    <?
    while ( $ligne=mysql_fetch_array($resultat))  //recherche toutes les infos concernant le libelle des diplômes
    {
      $val = $ligne['libelle'];
      print "<input type='checkbox' name='choix[]' value='$val'>$val
     </option>";
    }
     
     
    ?>
    <br> <br>
    <input type="submit" name="Valider" value="Valider" />
    <input type="reset" name="Annuler" value="Annuler" /> <br> <br> 
     
     
    </body>
    </form>
    </html>

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Mon problème est que si certains champs ne sont pas remplis alors cela me met mon message d'erreur " Attention, remplir tous les champs", ce qui est normal. Mais je suis bloqué car pour revenir à mon formulaire, je suis obligé d'utiliser le bouton Précedent de mon navigateur.

    Merci.

  3. #3
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    à mon avis le plus simple est que le fichier du formulaire contiennent au début, le script permettant d'enregistrer dans la BDD et tu exécutes ce script sous condition en plaçant une variable hidden qui sera envoyée à l'enregistrement.

    Ensuite dans les champs de ton formulaire tu fais :

    <input type=text name=bonjour value="<?php echo $bonjour;?>">

    comme ça si ton formulaire est affiché pour la première fois, tu n'auras rien dans value, mais si il est affiché suite à une erreur, tu retrouveras dans le champs la valeur saisie.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    La variable $bonjour, comment tu la définis. Je suis novice en PHP, excuse-moi.

  5. #5
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    bonjour est un exemple...

    utilise tes variables...

  6. #6
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    j'aurais du mettre

    <input type=text name=type value="<?php echo $POST['type'];?>">

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    je te conseille alors d'utiliser javascript pour controller les element s de ton formulaire. la fonction javascript q tu aura creer renvoie true ou false si tous les champs sont rempli ou non. et cette fonction tu le place avec l'evenement onsubmit de ton formulaire. si tous les champs ne sont pas rempli alors le formulaire n'est pas envoyer
    Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    à mon avis le plus simple est que le fichier du formulaire contiennent au début, le script permettant d'enregistrer dans la BDD et tu exécutes ce script sous condition en plaçant une variable hidden qui sera envoyée à l'enregistrement.
    A quoi sert la variable Hidden ? Et comment la mettre en place .

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Sinon en entrant dans mon formulaire la première fois, il y a dans la valeur du champ ceci : "<br /><b>Notice</b>: Undefined index: nomAn in <b>c:\program files\easyphp1-8\www\stage chatellerault\animateur\ajouteranimateur.php</b> on line <b>56</b><br />". Pourtant j'ai fait comme grinder59 m'a dit.

    La ligne 56 correspond à celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom de l'animateur <input type="text"  name="nomAn"  value="<?php echo $_POST['nomAn'];?>"/><br> <br>

  10. #10
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    oui car au premier appel il n'y pas de valeur pour $_POST fait cela sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?
    $nomAn = "";
    if (isset($_POST['nomAn'])
    {
        $nomAn = $_POST['nomAn'];
    }
    ?>
    Nom de l'animateur <input type="text"  name="nomAn"  value="<?php echo $nomAn;?>"/><br> <br>
    Tout énigme a une solution ! Tout est question de discipline !

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Points : 54
    Points
    54
    Par défaut
    Met tout dans la même page en changeant la page d'arrivée de ton POST

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    <?php session_start(); 
     
    if ((isset($_POST['nomAn']) AND isset($_POST['prenom']) AND isset($_POST['datenaissance'])) or ($_POST['nomAn'] != NULL AND $_POST['prenom'] != NULL and $_POST['datenaissance'] != NULL ))  
       { 
            include ("ConnexionBaseDonnée.php"); 
            $nomAn=$_POST['nomAn']; 
            $prenom=$_POST['prenom'];  //On récupère la valeur du champ concernant le libelle 
            $age=$_POST['datenaissance']; 
            $telephone1=$_POST['telephone1']; 
            $telephone2=$_POST['telephone2']; 
            $newanimateur = new animateur(); 
            $newanimateur->nomAn =$nomAn; 
            $newanimateur->prenom =$prenom; 
            $newanimateur->age =$age; 
            $newanimateur->telephone1 =$telephone1; 
            $newanimateur->telephone2 =$telephone2; 
            $newanimateur->insert_animateur(); 
        } 
     
     
     
     
    }else{
    ?>
     
    <html> 
       <head> 
         <title>Fiche d'un animateur</title> 
       </head> 
    <body>
    <? 
    echo" Attention,  veuillez remplir tous les champs"; 
    ?>
    <form method="POST"  name="Animateur" action="CreerAnimateur.php"  > 
    Nom de l'association  
    <? 
    include ("ConnexionBaseDonnée.php"); 
    $req="select nom from association"; 
    $resultat=mysql_query($req); 
    ?> 
    <select name="nom"> 
    <? 
    while ( $ligne=mysql_fetch_array($resultat))  //recherche toutes les infos concernant le nom de l'association 
    { 
      $val = $ligne['nom']; 
      print "<option value='$val'>$val</option>"; 
    } 
    ?> 
    </select> <br><br> <br> 
    Type d'activité  <input type="text" name="type" /> <br> <br> 
    Libellé de l'activité  <input type="text" name="libelle" /> <br> <br> 
    Nom de l'animateur <input type="text"  name="nomAn"/><br> <br> 
    Prénom de l'animateur <input type="text"  name="prenom"/><br> <br> 
    Date de naissance <input type="text" name="datenaissance"/><br> <br> 
    Téléphone1 <input type="text" name="telephone1"/><br> <br> 
    Téléphone2 <input type="text" name="telephone2"/><br> <br> 
    <? 
     
    $req="select libelle from diplome"; 
    $resultat=mysql_query($req); 
    ?> 
    <b>Diplôme</b> 
    <? 
    while ( $ligne=mysql_fetch_array($resultat))  //recherche toutes les infos concernant le libelle des diplômes 
    { 
      $val = $ligne['libelle']; 
      print "<input type='checkbox' name='choix[]' value='$val'>$val 
     </option>"; 
    } 
     
     
    ?> 
    <br> <br> 
    <input type="submit" name="Valider" value="Valider" /> 
    <input type="reset" name="Annuler" value="Annuler" /> <br> <br> 
     
     
    </body> 
    </form> 
    </html> 
    <?
    }
    ?>

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Points : 54
    Points
    54
    Par défaut
    Je me suis tromper c'est pas un Or au début dans la condition mais un AND

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Points : 54
    Points
    54
    Par défaut
    Voila la bonne version

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    <?php session_start(); 
     
    if ((isset($_POST['nomAn']) AND isset($_POST['prenom']) AND isset($_POST['datenaissance'])) AND ($_POST['nomAn'] != NULL AND $_POST['prenom'] != NULL and $_POST['datenaissance'] != NULL ))  
       { 
            include ("ConnexionBaseDonnée.php"); 
            $nomAn=$_POST['nomAn']; 
            $prenom=$_POST['prenom'];  //On récupère la valeur du champ concernant le libelle 
            $age=$_POST['datenaissance']; 
            $telephone1=$_POST['telephone1']; 
            $telephone2=$_POST['telephone2']; 
            $newanimateur = new animateur(); 
            $newanimateur->nomAn =$nomAn; 
            $newanimateur->prenom =$prenom; 
            $newanimateur->age =$age; 
            $newanimateur->telephone1 =$telephone1; 
            $newanimateur->telephone2 =$telephone2; 
            $newanimateur->insert_animateur(); 
     
    }else{ 
    ?> 
     
    <html> 
       <head> 
         <title>Fiche d'un animateur</title> 
       </head> 
    <body> 
    <? 
    echo" Attention,  veuillez remplir tous les champs"; 
    ?> 
    <form method="POST"  name="Animateur" action="CreerAnimateur.php"  > 
    Nom de l'association  
    <? 
    include ("ConnexionBaseDonnée.php"); 
    $req="select nom from association"; 
    $resultat=mysql_query($req); 
    ?> 
    <select name="nom"> 
    <? 
    while ( $ligne=mysql_fetch_array($resultat))  //recherche toutes les infos concernant le nom de l'association 
    { 
      $val = $ligne['nom']; 
      print "<option value='$val'>$val</option>"; 
    } 
    ?> 
    </select> <br><br> <br> 
    Type d'activité  <input type="text" name="type" /> <br> <br> 
    Libellé de l'activité  <input type="text" name="libelle" /> <br> <br> 
    Nom de l'animateur <input type="text"  name="nomAn"/><br> <br> 
    Prénom de l'animateur <input type="text"  name="prenom"/><br> <br> 
    Date de naissance <input type="text" name="datenaissance"/><br> <br> 
    Téléphone1 <input type="text" name="telephone1"/><br> <br> 
    Téléphone2 <input type="text" name="telephone2"/><br> <br> 
    <? 
     
    $req="select libelle from diplome"; 
    $resultat=mysql_query($req); 
    ?> 
    <b>Diplôme</b> 
    <? 
    while ( $ligne=mysql_fetch_array($resultat))  //recherche toutes les infos concernant le libelle des diplômes 
    { 
      $val = $ligne['libelle']; 
      print "<input type='checkbox' name='choix[]' value='$val'>$val 
     </option>"; 
    } 
     
     
    ?> 
    <br> <br> 
    <input type="submit" name="Valider" value="Valider" /> 
    <input type="reset" name="Annuler" value="Annuler" /> <br> <br> 
     
     
    </body> 
    </form> 
    </html> 
    <? 
    } 
    ?>

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Merci. Par contre, je ne toujours suis pas arrivé à ré-afficher le formulaire. Cela me met mon message d'erreur mais ne réaffiche rien.
    Une fois que j'ai appuyé sur mon bouton Valider, cela me met "Attention, remplir tous les champs".

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Excuse moi Jofire, je n'avais pas vu ton POST. Je regarde tout de suite. Merci.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Bon Jofire et tous les autres, je n'ai qu'une chose à dire: merci. Il ne me reste plus que à récupérer les informations concernant les champs bien remplis pour les réafficher dans le formulaire comme vous me l'avez expliqué et je cliquerais sur Résolu.
    Encore merci.

  17. #17
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Ce que j'utilise pour faire cela est un système de templates (dans mon cas, celui de phpBB) : cela me permet de définir du HTML dans un bloc. Je peux alors reproduire ce bloc autant de fois que je veux. Si je mets des value="" dans tous les input, alors je peux les laisser vides ou les remplir.
    Cela me permet d'utiliser le même bloc HTML à la fois pour l'enregistrement, la gestion d'erreurs et la modification.

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Ah OK. Tu as de la documentation sur les templates ?
    Sinon je ne sais pas ou mettre le code de Bebel pour récupérer mes informations si tous les champs obligatoires ne sont pas saisis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <? 
    $nomAn = ""; 
    if (isset($_POST['nomAn']) 
    { 
        $nomAn = $_POST['nomAn']; 
    } 
    ?> 
    Nom de l'animateur <input type="text"  name="nomAn"  value="<?php echo $nomAn;?>"/><br> <br>

  19. #19
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Voici le lien à partir duquel j'ai appris à me servir de ces templates (en anglais) : phpBB Template Tutorial

    Je pense que Bebel ne t'a pas vraiment donné la réponse toute faite, il t'a plutôt orienté vers la solution.


    [Edit] PHPEdit, dont la version 2 vient de sortir, supporte maintenant la syntaxe des templates comme celle utilisée par le moteur de templates de phpBB. Avec colorisation syntaxique pour les fainéants comme moi...

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Points : 25
    Points
    25
    Par défaut
    Sinon pour ré-afficher les valeurs, j'ai lu qu'il fallait utiliser session_start. Mais qu'est-ce qu'une session ? Est-ce quand on se connecte à sa BDD par le biais du nom de la base, son identifiant et son mot de passe ?

Discussions similaires

  1. [Wamp] 500 Internal Server Error lors d'une erreur PHP
    Par savageman86 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 17/10/2008, 14h13
  2. Réponses: 3
    Dernier message: 28/03/2008, 11h48
  3. Réponses: 6
    Dernier message: 25/06/2007, 13h41
  4. [Formulaire] Affichage d'une erreur
    Par nunurs83 dans le forum IHM
    Réponses: 4
    Dernier message: 05/04/2007, 09h39
  5. Réponses: 2
    Dernier message: 21/12/2005, 13h08

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