Formulaire

Bonjour,
j'ai un formulaire a trois pages:
page 1 je remplis mon formulaire

page 2
(je récupère les valeurs entré via post)
je réaffiche le formulaire avec les valeurs que j'ai entrés
cette page permet en fait de revoir les données que j'ai entrés et de pouvoir les modifier

page 3
les données de la page 2 sont entré dans la base de donnée.

Le problème est que si j'effectue des modifications sur les données entrés dans la page2 celle-ci ne sont pas prise en compte; en effet ce seront les données de la page 1 qui seront entrés dans la base de donnée.

Comment faire alors pour que si j'effectue des modifications (dans la page 2) que ce soit cell-ci qui soit prise dans la base de donnée
Configuration: Windows XP
Firefox 2.0.0.7

45 réponses

Résumé de la discussion

Un formulaire en trois pages en PHP présente un problème lorsque les modifications saisies sur la page 2 ne sont pas utilisées à l’enregistrement en page 3, les données de la page 1 étant réinsérées. Des réponses proposent de transmettre les valeurs modifiées de la page 2 vers la page 3 via des champs cachés, afin que la sauvegarde exploite les données actualisées et non celles d’origine. D’autres évoquent l’emploi d’une requête UPDATE ou d’une logique conditionnelle qui met à jour les enregistrements existants plutôt que d’effectuer une insertion avec les données issues de la page 1. En cas de besoin, des précisions portent sur la gestion des noms de champs et la vérification des données avant leur transmission.

Bobot (l’IA à votre service)
  1. Il faut dans ce cas créer une discussion propre à ce problème, et on pourra t'aider. Ou alors apprends le php et sql (c'est pas très dur). Bon courage :)
    1. bonjour j'aime créer une formulaire mais je sais pas c'est quoi le code je sais comment la traçer
      1. Essaye:

        print("sunite:");
        echo "<input type='text' name='sunite_name".$i."' value='".$sunite_name.$i"'><br>";
        print("alias:");
        echo "<input type='text' name='sunite_alias".$i."' value='".$sunite_alias.$i"'><br>";
        1. Erreur en fait j'abtiens
          proteine_name->HREF
          nb_sunite->1

          sunite_name1i->H1
          sunite_alias1->HEWC6

          sunite_name->H1

          sunite_alias->HEWC6
          $i n'apparaît plus alors que je devrais avoir
          sunite_name1->H1

          sunite_alias1->HEWC6
          1. Bonjour,

            J'ai bien pris en compte les changements et desormais $i est interprété

            Reste toujours le problème de pourquoi les modifications de la page 2 ne sont pas pris en compte en page 3...
            1. Mais oui, mais là encore, ce sont des erreurs que je te corrige mais dont tu ne tiens pas compte (tu les ecris pas):
              il faut

              print("sunite:");
              echo "<input type='text' name='sunite_name".$i."' value='".$sunite_name."'><br>";
              print("alias:");
              echo "<input type='text' name='sunite_alias".$i."' value='".$sunite_alias."'><br>";
              1. Bonjour,
                si j'ai bien suivi tu as changé la ligne
                print('<input type="submit"value="save" Onclick="javascript : location=http://localhost/XXX/page3.php">');
                en
                print('<input type="submit"value="save" >');

                Cela ne change rien.

                J'ai plusieurs remarques:
                1/
                Si je fais une boucle pour voir le contenu de $_POST en page 3
                foreach($_POST as $key => $value)
                {

                echo '<p>' . $key . ' -> ' . $value . '</p>';
                }

                j'obtiens en page 3, le résultat suivant:
                proteine_name->HREF
                nb_sunite->1

                sunite_name1i->H1
                sunite_alias1->HEWC6

                sunite_name$i->H1

                sunite_alias$i->HEWC6

                Il s'avère que la variable $i n'est pas interprété.(cf.sunite_name$i->H1). Alors que en page 1 j'ai entré:
                PROTEINE:HREF
                NBRE SOUS-UNITE:1

                sous unité1:
                nom:H1
                alias: HEWC6

                et qu'en page 2, j'obtiens:
                PROTEINE:HREF
                NBRE SOUS-UNITE:1

                sous unité1:
                nom:H1
                alias: HEWC6

                2/

                Je pense que ca vient du fait que j'ai, en page 2, à la fois :
                <?php
                for($i=1; $i<=$nb_sunite;$i++)
                {
                print ("<input type=\"hidden\" name=\"sunite_name$i\" value=\"".$_POST['sunite_name'.$i]."\"/>");
                print ( "<input type=\"hidden\" name=\"sunite_alias$i\" value=\"".$_POST['sunite_alias'.$i]."\"/>");
                ?>

                et
                print("sunite:");
                echo "<input type='text' name='sunite_name$i."' value='".$sunite_name."'><br>";
                print("alias:");
                echo "<input type='text' name='sunite_alias$i." value='".$sunite_alias."'><br>";

                dans le meme formulaire.

                Mes champs cachés et mes champs visibles ont les mêmes noms.

                J'ai donc changé leur nom par sunite_nameHidden$i et sunite_aliasHidden$i pour qu'ils soient bien considéré comme différent des champs du formulaire de modification.

                print ("<input type=\"hidden\" name=\"sunite_nameHidden$i\" value=\"".$_POST['sunite_name'.$i]."\"/>");
                print ( "<input type=\"hidden\" name=\"sunite_aliasHidden$i\" value=\"".$_POST['sunite_alias'.$i]."\"/>");

                Je n'ai changé que cela dans mon script et j'obtiens en page3, le résultat suivant:
                proteine_name->HREF
                nb_sunite->1

                sunite_name1i->H1
                sunite_alias1->HEWC6

                sunite_name$i->H1

                sunite_alias$i->HEWC6

                LE SOUCI AUSSI VIENT JE PENSE DU FAIT QUE $i (de la page2) N'EST PAS INTERPRETE EN PAGE 3...
                1. Essaye ainsi:

                  (page2)
                  <?php
                  //recupération des valeurs posté
                  $proteine_name=$_POST[' proteine_name '];
                  $nb_sunite=$_POST[' nb_sunite '];
                  ?>

                  <form name="form" method="post" action="page3.php">
                  <?php
                  print( "<input type=\"hidden\" name=\"proteine_name\" value=\"".$_POST['proteine_name']."\">");
                  print ("<input type=\"hidden\" name=\"nb_sunite\" value=\"".$_POST['nb_sunite']."\">");
                  ?>

                  <?php
                  for($i=1; $i<=$nb_sunite;$i++)
                  {
                  print ("<input type=\"hidden\" name=\"sunite_name$i\" value=\"".$_POST['sunite_name'.$i]."\"/>");
                  print ( "<input type=\"hidden\" name=\"sunite_alias$i\" value=\"".$_POST['sunite_alias'.$i]."\"/>");
                  ?>

                  <?php
                  $tab_name=array();
                  $tab_alias=array();

                  for($i=1; $i<=$nb_sunite;$i++)
                  {
                  //recupération des valeurs posté
                  $sunite_name=$_POST['sunite_name'.$i];
                  $sunite_alias=$_POST['sunite_alias'.$i];

                  //test pour verifier que les champs sont bien remplis et on reaffiche le formulaire avec les données antré par l'utilisateur

                  if(!empty($sunite_name) && !empty($sunite_alias))
                  {
                  if(!in_array("$sunite_name",$tab_name) && !in_array("$sunite_alias",$tab_alias)
                  {

                  $tab_name[]="$sunite_name";
                  $tab_alias[]="$tab_alias";

                  //affichage du formulaire
                  print("sunite:");
                  echo "<input type='text' name='sunite_name".$i."' value='".$sunite_name.$i."'><br>";
                  print("alias:");
                  echo "<input type='text' name='sunite_alias".$i."' value='".$sunite_alias.$i."'><br>";
                  }
                  else
                  {
                  print("vous avez déjà entré cela");
                  //affichage du formulaire
                  print("sunite:");
                  echo "<input type='text' name='sunite_name".$i."' value='".$sunite_name.$i."'><br>";
                  print("alias:");
                  echo "<input type='text' name='sunite_alias".$i."' value='".$sunite_alias.$i."'><br>";
                  }
                  }

                  }
                  print('<input type="submit"value="save" >');
                  ?>

                  page3

                  <?php
                  //recupération des valeurs posté
                  $proteine_name=$_POST[' proteine_name '];
                  $nb_sunite=$_POST[' nb_sunite '];
                  ?>

                  <?php

                  $tab_name[]="$sunite_name";
                  $tab_alias[]="$tab_alias";

                  for($i=1; $i<=$nb_sunite;$i++)
                  {
                  //recupération des valeurs posté
                  $sunite_name=$_POST['sunite_name'.$i];
                  $sunite_alias=$_POST['sunite_alias'.$i];

                  foreach($_POST as $key => $value)
                  {
                  echo '<p>' . $key . ' -> ' . $value . '</p>';
                  }

                  //verif que les champs sont bien remplis
                  if(!empty($sunite_name) && !empty($sunite_alias))
                  {
                  if(!in_array("$sunite_name",$tab_name) && !in_array("$sunite_alias",$tab_alias)
                  {

                  //connexion a la base de donnée

                  $requete=
                  "SELECT proteine_id
                  FROM proteine
                  WHERE proteine_name='".$proteine_name."'";

                  $execution = mysql_query($requete) or die("erreur au niveau de la requête2");
                  $ligne = mysql_num_rows($execution);
                  if($ligne!=0)
                  {
                  print("la proteine existe dejà");
                  $requeteA=
                  "SELECT sunite_id
                  FROM sunite
                  WHERE sunite_alias='".$sunite_alias."'";

                  $executionA = mysql_query($requeteA) or die("erreur au niveau de la requête2");
                  $resultat = mysql_num_rows($executionA);

                  $requeteB=
                  "SELECT proteine_id
                  FROM proteine,sunite
                  WHERE proteine. proteine_id ='sunite.proteine_id"'";

                  $requete3=
                  "INSERT INTO sunite (sunite_id,protein_id, sunite_name,sunite_alias)
                  VALUES('','".$protein_id."','".$sunite_name."', '".$sunite_alias."')";
                  mysql_query($requete3) ;

                  }
                  else
                  {
                  $requete4=
                  "INSERT INTO proteine (proteine_id, proteine_name, nb_sunite)
                  VALUES('','".$proteine_name."','".$nb_sunite."')";

                  mysql_query($requete4) ;

                  $protein_id=mysql_id();

                  $requete5=
                  "INSERT INTO sunite (sunite_id,protein_id, sunite_name,sunite_alias)
                  VALUES('','".$protein_id."','".$sunite_name."', ".'$sunite_alias."')";

                  mysql_query($requete5) ;
                  }
                  mysql_close($connexion);
                  }
                  }
                  }
                  }
                  ?>
                  1. (page2)
                    <?php
                    //recupération des valeurs posté
                    $proteine_name=$_POST[' proteine_name '];
                    $nb_sunite=$_POST[' nb_sunite '];
                    ?>

                    <form name="form" method="post" action="page3.php">
                    <?php
                    print( "<input type=\'hidden\" name=\"proteine_name"\" value=\"".$_POST['proteine_name']."\"/>");
                    print ("<input type=\'hidden\" name=\"nb_sunite"\" value=\"".$_POST['nb_sunite']."\"/>");
                    ?>

                    <?php
                    for($i=1; $i<=$nb_sunite;$i++)
                    {
                    print ("<input type=\"hidden\" name=\"sunite_name$i\" value=\"".$_POST['sunite_name'.$i]."\"/>");
                    print ( "<input type=\"hidden\" name=\"sunite_alias$i\" value=\"".$_POST['sunite_alias'.$i]."\"/>");
                    ?>

                    <?php
                    $tab_name=array();
                    $tab_alias=array();

                    for($i=1; $i<=$nb_sunite;$i++)
                    {
                    //recupération des valeurs posté
                    $sunite_name=$_POST['sunite_name'.$i];
                    $sunite_alias=$_POST['sunite_alias'.$i];

                    //test pour verifier que les champs sont bien remplis et on reaffiche le formulaire avec les données antré par l'utilisateur

                    if(!empty($sunite_name) && !empty($sunite_alias))
                    {
                    if(!in_array("$sunite_name",$tab_name) && !in_array("$sunite_alias",$tab_alias)
                    {

                    $tab_name[]="$sunite_name";
                    $tab_alias[]="$tab_alias";

                    //affichage du formulaire
                    print("sunite:");
                    echo "<input type='text' name='sunite_name$i."' value='".$sunite_name."'><br>";
                    print("alias:");
                    echo "<input type='text' name='sunite_alias$i." value='".$sunite_alias."'><br>";
                    }
                    else
                    {
                    print("vous avez déjà entré cela");
                    //affichage du formulaire
                    print("sunite:");
                    print('<input type='text' name='sunite_name$i."' value='".$sunite_name."'><br>');
                    print("alias:");
                    print('<input type='text' name='sunite_alias$i." value='".$sunite_alias."'><br>');
                    }
                    }

                    }
                    print('<input type="submit"value="save" Onclick="javascript : location=http://localhost/XXX/page3.php">');
                    ?>

                    page3

                    <?php
                    //recupération des valeurs posté
                    $proteine_name=$_POST[' proteine_name '];
                    $nb_sunite=$_POST[' nb_sunite '];
                    ?>

                    <?php

                    $tab_name[]="$sunite_name";
                    $tab_alias[]="$tab_alias";

                    for($i=1; $i<=$nb_sunite;$i++)
                    {
                    //recupération des valeurs posté
                    $sunite_name=$_POST['sunite_name'.$i];
                    $sunite_alias=$_POST['sunite_alias'.$i];

                    foreach($_POST as $key => $value)
                    {
                    echo '<p>' . $key . ' -> ' . $value . '</p>';
                    }

                    //verif que les champs sont bien remplis
                    if(!empty($sunite_name) && !empty($sunite_alias))
                    {
                    if(!in_array("$sunite_name",$tab_name) && !in_array("$sunite_alias",$tab_alias)
                    {

                    //connexion a la base de donnée

                    $requete=
                    "SELECT proteine_id
                    FROM proteine
                    WHERE proteine_name='"proteine_name"'";

                    $execution = mysql_query($requete) or die("erreur au niveau de la requête2");
                    $ligne = mysql_num_rows($execution);
                    if($ligne!=0)
                    {
                    print("la proteine existe dejà");
                    $requeteA=
                    "SELECT sunite_id
                    FROM sunite
                    WHERE sunite_alias='"sunite_alias"'";

                    $executionA = mysql_query($requeteA) or die("erreur au niveau de la requête2");
                    $resultat = mysql_num_rows($executionA);

                    $requeteB=
                    "SELECT proteine_id
                    FROM proteine,sunite
                    WHERE proteine. proteine_id =sunite.proeteine_id"'";

                    $requete3=
                    "INSERT INTO sunite (sunite_id,protein_id, sunite_name,sunite_alias)
                    VALUES('','$protein_id','$sunite_name', '$sunite_alias')";
                    mysql_query($requete3) ;

                    }
                    else
                    {
                    $requete4=
                    "INSERT INTO protein (proteine_id, proteine_name, nb_sunite)
                    VALUES('','$proteine_name',)";

                    mysql_query($requete4) ;

                    $protein_id=mysql_id();

                    $requete5=
                    "INSERT INTO sunite (sunite_id,protein_id, sunite_name,sunite_alias)
                    VALUES('','protein_id','$sunite_name', '$sunite_alias')";

                    mysql_query($requete5) ;
                    }
                    mysql_close($connexion);
                    }
                    }
                    }
                    }
                    ?>
                    1. Il nous manque encore le code des 3 pages, en integral :) sauf la page 1 à la limite (fais attention à ne pas divulguer tes codes)

                      Moi je ne serais pas sur le forum pendant trois jours, mais ne vous inquietéz pas: je n'abandonne pas!!!
                      ++
                      1. Olala je fatigue un peu:

                        Elle est interprété mais pas la deuxième fois pour la sous-unité H2

                        proteine_name->HREF

                        nb_sunite->2

                        sunite_name1->H1

                        sunite_alias1->HNR111

                        subunit_name2->H2

                        sunite_alias2->HNR222

                        subunit_name$i->H2

                        subunit_systematic_name$i->HNR222
                        1. Contributeur
                          non mais en dessous il y a les normaux !?
                          non ?
                          for($i=1; $i<=$nb_sunite;$i++) 
                          { 
                          //recupération des valeurs posté 
                          $sunite_name=$_POST['sunite_name'.$i]; 
                          $sunite_alias=$_POST['sunite_alias'.$i]; 
                          
                          //test pour verifier que les champs sont bien remplis et on reaffiche le formulaire avec les données antré par l'utilisateur 
                          
                          if() 
                          { 
                          print("sunite:"); 
                          echo "<input type='text' name='sunite_name$i."' value='".$sunite_name."'><br>"; 
                          print("alias:"); 
                          echo "<input type='text' name='sunite_alias$i." value='".$sunite_alias."'><br>"; 
                          } 
                          } 
                          1. Excuse moi je parlai du hiddende la sous unité; celui-ci

                            print ("<input type=\"hidden\" name=\"sunite_name$i\" value=\"".$_POST['sunite_name'.$i]."\"/>");
                            print ( "<input type=\"hidden\" name=\"sunite_alias$i\" value=\"".$_POST['sunite_alias'.$i]."\"/>");

                            En fesant
                            foreach($_POST as $key => $value)
                            {
                            echo '<p>' . $key . ' -> ' . $value . '</p>';
                            }

                            j'obtiens en page 3:
                            proteine_name->HREF

                            nb_sunite->2

                            sunite_name$i->H1

                            sunite_alias$i->HNR111

                            subunit_name2->H2

                            sunite_alias$i->HNR222

                            subunit_name$i->H2

                            subunit_systematic_name$i->HNR222

                            C'est bizarre j'obtiens deux fois le résultat pour la sous unité H2.
                            1. Je ne pense pas qu'il faille enlever ces deux lignes, car elles permettent de recuperer le nom de la protéine.
                              Essaye de les ecrire comme ça, la aussi tu garde tes erreurs de syntaxe:
                              print( "<input type=\"hidden\" name=\"proteine_name"\" value=\"".$_POST['proteine_name']."\">");
                              print ("<input type=\"hidden\" name=\"nb_sunite"\" value=\"".$_POST['nb_sunite']."\">");
                              1. en fait quand je met value="" , cela ne change rien. En effet, si je tape quelque chose dans ma page 2 cela n'est pas pris en compte. Seul ce que j'ai tapé en page 1 est pris en compte.

                                Je pense que cela vient du hidden que je met en page 2, car a travers ce hidden je récupère , en champ caché, les données entrées en page 1.

                                Quand je met value="" ou value='".$sunite_name." et que j'enlève
                                <?php

                                print( "<input type=\'hidden\" name=\"proteine_name"\" value=\"".$_POST['proteine_name']."\"/>");
                                print ("<input type=\'hidden\" name=\"nb_sunite"\" value=\"".$_POST['nb_sunite']."\"/>");
                                ?>
                                en page 3 j'obtiens un message me disant que met champ sont vide alors que j'ai écris des choses en page2.

                                Quand je met value="" ou value='".$sunite_name." et que je n'enlève pas le hidden (la partie indiqué ci-dessus), ce sont les données de la page 1 qui sont enregistré.

                                Mais je ne vois pas comment faire alors????????
                                1. Essaye de les enlever. Vois si en modifiant la page2 ça prend bien en compte tes modif de la page2. On pourra voir si c'est à ce niveau là
                                  • 1
                                  • 2
                                  • 3