Formulaire
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
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.
-
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 :)
-
bonjour j'aime créer une formulaire mais je sais pas c'est quoi le code je sais comment la traçer
-
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>"; -
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 -
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... -
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>"; -
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... -
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);
}
}
}
}
?> -
Bonjour,
Quelqu'un pourrait-il m'aider... -
(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);
}
}
}
}
?> -
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!!!
++ -
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 -
Contributeurnon 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>"; } } -
Ah, mais si tu mets hidden, ton nom de protéine ne peut etre changé!
-
Contributeuret ta variable $i n'est pas interprété.
sunite_name$i->H1 -
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. -
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']."\">"); -
Contributeur
-
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???????? -
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