Formulaire

pontarose -  
ilan27 Messages postés 395 Statut Membre -
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

  • 1
  • 2
  • 3
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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. ilan27 Messages postés 395 Statut Membre 36
     
    C'est normal, vu que tu as enregistré les valeurs sur la page2! Mais les as-tu enregistrées après la page2 correctement? Si tu veux, tu peux montrer le code de la page 3 qui est apparement défectueux
    0
  2. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2
     
    page3.php
    <?php
    $prot=$_POST['prot'];

    ?>

    <?php
    for ($i=1;$i<=$nb; $i++)
    {
    $a=$_POST['a'];
    $a=$_POST['b'];

    if(!empty($a) && !empty($a))
    {

    // connexion a la DB

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

    $execution = mysql_query($requete) or die("erreur au niveau de la requête2");
    $ligne = mysql_fnum_rows($execution);
    if($ligne!=0)
    {
    print("la proteine existe dejà");
    }
    else
    {
    $requete2=
    "INSERT INTO protein (proteine_id, proteine_name)
    VALUES('','$proteine_name')";

    mysql_query($requete2) ;

    $proteine_id=mysql_insert_id();
    $requete3=
    "INSERT INTO sunite (sunite_id,protein_id, sunite_name,sunite_alias)
    VALUES('','protein_id','$a', '$b')";

    mysql_query($requete3) ;
    }
    mysql_close($connexion);

    }
    }

    ?>
    0
  3. ilan27 Messages postés 395 Statut Membre 36
     
    Ok, mais il y a un message d'erreur je suppose?
    0
  4. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2
     
    No je n'ai pas de message d'erreur
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ilan27 Messages postés 395 Statut Membre 36
     
    Ok, mais je comprends pas un truc (plusieurs)
    _pourquoi tu répètes !empty($a) dans le if
    _Pourquoi il y a 2 requetes
    _pourquoi tu ne mets pas la requete de modifications UPDATE, au lieu d'une insertion? puisque c'est une mise a jour...
    0
  7. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2
     
    _pourquoi tu répètes !empty($a) dans le if
    c'est une erreur :
    if(!empty($a) && !empty($b))

    _Pourquoi il y a 2 requetes
    car ma page 2 est de ce type

    PROTEINE:HREF
    NBRE SOUS-UNITE:3

    sous unité1:
    nom:
    alias:

    sous unité2:
    nom:
    alias:

    sous unité2:
    nom:
    alias:

    page 1 j'entre le nom de ma protéine et le nombre de sous unité qu'elle possède
    puis je click sur submit
    page 2
    je récupère via post ces deus varibles
    en fonction du nombre de sous unité que j'ai tapé j'obtiens une page de ce type (exemple içi le nombre de sous unité est de 3)

    _ il ne s'agit pas d'une mise a jour, j'entre les données
    0
  8. ilan27 Messages postés 395 Statut Membre 36
     
    Oui, mais tu m'as dit que la page 2 exposait les données entrées en proposant de les modifier (c'est une maj...); j'ai mal compris?
    Et je ne sais pas si tu as mis ton code entier, mais tu n'as pas initialisé la variable $nb
    0
  9. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2
     
    Bonjour,

    Voici le code en gros de mes différentes pages.

    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.

    Je pense que le problème vient du fait que j'ai récupéré les variables en champ caché dans la page 2 mais si je ne fais pas cela impossible de récupéré les valeurs entré dans la page3.

    page 1
    <?php

    //blabla
    <form name="formulaire" method="post" action="page2.php">

    for($i=1; $i<=$nb_sunite;$i++)
    {
    print("sunite:<input type='text' name='sunite_name$i' value=''><br>");
    print("sunite:<input type='text' name='sunite_alias$i' value=''><br>");
    }
    print('<input type="submit"value="save" Onclick="javascript : location="http://localhost/XXX/page2.php"">');
    ?>

    page2
    <?php

    //blabla
    ?>
    <form name="form" method="post" action="page3.php">

    <?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
    for($i=1; $i<=$nb_sunite;$i++)
    {

    $unite_name=$_POST['sunite_name'.$i];
    $unite_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:");
    print('<input type='text' name='sunite_name$i' value='"'.$sunite_name.'"><br>");
    print("sunite:");
    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
    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]."\"/>");

    //verif que les champs sont bien remplis

    // connexion a la DB

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

    $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à");
    }
    else
    {
    $requete2=
    "INSERT INTO protein (proteine_id, proteine_name)
    VALUES('','$proteine_name')";

    mysql_query($requete2) ;

    $proteine_id=mysql_insert_id();
    $requete3=
    "INSERT INTO sunite (sunite_id,protein_id, sunite_name,sunite_alias)
    VALUES('','protein_id','$a', '$b')";

    mysql_query($requete3) ;
    }
    mysql_close($connexion);

    }

    ?>
    0
  10. ilan27 Messages postés 395 Statut Membre 36
     
    Je te passe le code comme moi je le verrais (erreur de syntaxes...etc, et j'ai pas changé le insert into en update,mais j'aurais pu parce que vu que tu as déja rentré l'enregistrement de la protéine, ce n'est plus qu'une mise a jour, et je nesais pas laquelle est une ma j et laquelle est un enregistrement...)

    page 1
    <?php

    //blabla
    <form name="formulaire" method="post" action="page2.php">

    for($i=1; $i<=$nb_sunite;$i++)
    {
    echo "sunite:<input type='text' name='sunite_name".$."i' value=''><br>";
    echo "sunite:<input type='text' name='sunite_alias".$."i' value=''><br>";
    }
    echo "<input type=\"submit\ "value=\"save\" >";
    //J'ai enlevé la commande javascript, parce que c'est sans doute elle qui ne permet pas l'envoi des variables, elle n'est pas nécessaire je pense: Onclick=\"javascript : location=\"http://localhost/XXX/page2.php"">');
    ?>

    page2
    <?php

    //blabla
    ?>
    <form name="form" method="post" action="page3.php">

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

    <?php
    for($i=1; $i<=$nb_sunite;$i++)
    {

    $sunite_name=$_POST['sunite_name'.$i]; //tu as marqué unite au lieu de sunite
    $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()
    {
    echo "sunite:";
    echo "<input type='text' name='sunite_name".$i."' value='".$sunite_name."'><br>";
    echo "sunite:";
    echo "<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
    for($i=1; $i<=$nb_sunite;$i++)
    {
    echo "<input type=\"hidden\" name=\"sunite_name".$i."\" value=\"".$_POST['sunite_name'.$i]."\"/>";
    echo "<input type=\"hidden\" name=\"sunite_alias".$i."\" value=\"".$_POST['sunite_alias'.$i]."\"/>");

    //verif que les champs sont bien remplis

    // connexion a la DB

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

    $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à");
    }
    else
    {
    $requete2=
    "INSERT INTO protein (proteine_id, proteine_name)
    VALUES('','$proteine_name')";

    mysql_query($requete2) ;

    $proteine_id=mysql_insert_id();
    $requete3=
    "INSERT INTO sunite (sunite_id,protein_id, sunite_name,sunite_alias)
    VALUES('','protein_id','$a', '$b')";

    mysql_query($requete3) ;
    }
    mysql_close($connexion);

    }

    ?>
    0
  11. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2
     
    de la page 1 à 2 je récupère bien la valeur de mes variables. pas de souci.

    Voiçi un exemple de ce que j'obtiens en page2

    PROTEINE:HREF
    NBRE SOUS-UNITE:2

    sous unité1:
    nom:H1
    alias:HAUN3C

    sous unité2:
    nom:H2
    alias: HEWC6

    Le problème est de la page 2 à 3:
    si je modifie le nom par exemple de la sous-unité 2 en tapant HNR26
    Cette modification ne sera pas prise en compte dans ma page 3; j'aurais toujours

    PROTEINE:HREF
    NBRE SOUS-UNITE:2

    sous unité1:
    nom:H1
    alias:HAUN3C

    sous unité2:
    nom:H2
    alias: HEWC6

    Or je veux justement que cette page permettent de faire des modifications et quand je clique sur save ces modifications soient prise en compte et que j'obtienne en page 3

    PROTEINE:HREF
    NBRE SOUS-UNITE:2

    sous unité1:
    nom:H1
    alias:HAUN3C

    sous unité2:
    nom:HNR26 //la modifcation
    alias: HEWC6

    ensuite j'enregistre cela dans ma base de donnée.

    Or dans mon cas actuel les données, les modifications que je fais en page 2 ne sont pas prise en compte en page 3.
    je viens de faire un test et mes variables $unite_name et $unite_alias sont vides dans ma page3!!!

    Excuse moi je me suis trompé dans ma page 3 (je n'ai pas encore hidden) voiçi mon script:

    page3
    <?php
    for($i=1; $i<=$nb_sunite;$i++)
    {

    $unite_name=$_POST['sunite_name'.$i];
    $unite_alias=$_POST['sunite_alias'.$i];
    //verif que les champs sont bien remplis

    // connexion a la DB

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

    $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à");
    }
    else
    {
    $requete2=
    "INSERT INTO protein (proteine_id, proteine_name)
    VALUES('','$proteine_name')";

    mysql_query($requete2) ;

    $proteine_id=mysql_insert_id();
    $requete3=
    "INSERT INTO sunite (sunite_id,protein_id, sunite_name,sunite_alias)
    VALUES('','protein_id','$a', '$b')";

    mysql_query($requete3) ;
    }
    mysql_close($connexion);

    }

    ?>

    J'ai juste entré les données de la protéine mais pas des sous-unité correspondant a cette protéine d'ou le insert.
    0
  12. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    salut,

    <edit>
    oups, je me suis trompé, j'efface après relecture plus attentive de ton message.
    </edit>
    0
  13. ilan27 Messages postés 395 Statut Membre 36
     
    D'accord, mais si les noms des protéines et tout ce qui concerne une protéine sont sur un meme enregistrement, il s'agit d'un update.
    Par ailleurs, un moment tu as sunite_alias, et un autre unite_alias, donc je sais pas si c'est fait exprès.
    0
  14. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2
     
    Non, c'est une erreur de ma part
    0
  15. ilan27 Messages postés 395 Statut Membre 36
     
    Ca marche quand tu corriges?
    0
  16. ilan27 Messages postés 395 Statut Membre 36
     
    Quand tu passes de la page 2 à la page 3, est-ce que tu veux créer des enregistrements comme tu le laisses penser avec "J'ai juste entré les données de la protéine mais pas des sous-unité correspondant a cette protéine d'ou le insert.", ou tu veux mettre à jour les données que tu as déja transférées dans le passage page1-->page2, c'est à dire les modifier, comme tu le dis au début : si j'effectue des modifications sur les données entrés dans la page2
    Je ne comprends pas ton principe
    0
  17. pontarose
     
    Bonjour,
    Quand je passes de la page 2 à la page 3 je veux créer des enregistrements.(les données enregistré seront ceux de la page2)
    en fait ma page 2 est une page de confirmation; sur cette page on peut soit
    si on est d'accord avec les données tapés appuyer sur submit pour les enregistrer
    soit les rectifier et ensuite appuyer sur submit pour les enregistrer
    0
  18. ilan27 Messages postés 395 Statut Membre 36
     
    D'accord, donc refais voir le nouveau code avec les changements précédents, et j'essaye de le corriger
    0
  19. pontarose
     
    Je me permet de récapituler:
    de la page 1 à 2 je récupère bien la valeur de mes variables. pas de souci.

    Voiçi un exemple de ce que j'obtiens en page2

    PROTEINE:HREF
    NBRE SOUS-UNITE:2

    sous unité1:
    nom:H1
    alias:HAUN3C

    sous unité2:
    nom:H2
    alias: HEWC6

    Ma page 2 est une page de confirmation; sur cette page on peut soit:
    * si on est d'accord avec les données tapés appuyer sur submit pour les enregistrer dans ma base de donnée
    * soit les rectifier et ensuite appuyer sur submit pour les enregistrer dans ma base de donnée

    MON PROBLEME EST QUE:
    Dans mon cas actuel les données, les modifications que je fais en page 2 (si je décide de mettre HNR26 au lieu de H2) ne sont pas prise en compte. En effet ce sera H2 qui sera enregistré dans ma dans ma base de donnée.

    PROTEINE:HREF
    NBRE SOUS-UNITE:2

    sous unité1:
    nom:H1
    alias:HAUN3C

    sous unité2:
    nom:HNR26 //la modifcation
    alias: HEWC6

    je viens de faire un test et mes variables $unite_name et $unite_alias sont vides dans ma page3!!!

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

    <?php
    //blabla
    <form name="formulaire" method="post" action="page2.php">

    for($i=1; $i<=$nb_sunite;$i++)
    {
    print("sunite:<input type='text' name='sunite_name$i' value=''><br>");
    print("alias:<input type='text' name='sunite_alias$i' value=''><br>");
    }
    print('<input type="submit"value="save" Onclick="javascript : location="http://localhost/XXX/page2.php"">');
    ?>

    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".$i."\" value=\"".$_POST['proteine_name'.$i]."\"/>");
    print ("<input type=\'hidden\" name=\"nb_sunite".$i."\" value=\"".$_POST['nb_sunite'.$i]."\"/>");
    ?>

    <?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
    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:");
    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
    for($i=1; $i<=$nb_sunite;$i++)
    {

    //verif que les champs sont bien remplis
    if()
    {

    // integration dans la base de donnée

    }
    ?>
    0
  20. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    salut,

    et si tu faisais une pitite boucle sur tout le contenu du $_POST en 'page3' pour voir ce qu'il a dans le ventre ?
    foreach($_POST as $key => $value)
    {
           echo '<p>' . $key . ' -> ' . $value . '</p>';
    }
    0
  • 1
  • 2
  • 3