mise à jour de champs par passage de paramètre

cams
Invité n'ayant pas de compte PHPfrance

02 déc. 2005, 11:59

Mon problème je pense est simple mais j'ai besoin de vous :wink:
donc mon but final c'est de mettre à jour un champ...
donc j'ai une liste déroulante où l'utilisateur doit choisir quelle donnée il souhaite mettre à jour
voici son code:
<html>
<body>

<form method="POST" action= "supprime.php">
<select name='bonjour'>
<?
include("connection.php"); //connection à la base
$sql = "SELECT * FROM donnee order by id_donnee";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());  

while($row = mysql_fetch_array($req))
	{ 
	$bonjour = $row['id_donnee'];
	echo "<option value=$bonjour>$bonjour</option>";
	}
echo "</select>";
?>

<center>
<input type="submit" value="Envoyerg" name="envgoyer">
</center>
</form>

</body>
</html>
une fois qu'il a choisi la donnée (j'ai choisi la donnee 217 pour exemple) : il arrive sur ce formulaire où il doit mettre le nouveau titre de la donnée choisie:
<?
include("connection.php"); //connection à la base
$salut= $_POST['bonjour'];

$sql = "select titre_donnee from donnee where id_donnee= '$salut' ";
$req= mysql_query($sql);
echo ($sql);
$row=mysql_fetch_array($req);
$titre_donnee=$row["titre_donnee"];
?>

<form method="POST" action="supprime2.php">
<label>Titre de la donnée : <input type="text" name="titre_donnee" size="100" value="<?echo stripslashes($titre_donnee); ?>" maxlength="100"></label> 
<input type="submit" value="Envofgfggdsyer" name="envoyfdgder">
</form>
là j'ai bien le formulaire et ma requête qui s'affiche est :
select titre_donnee from donnee where id_donnee= '217'

Il doit valider pour que la mise à jour (l'UPDATE) se fasse:
<?
include("connection.php"); //connection à la base
$test=$_POST['titre_donnee'];
$sql2 = "update donnee set  titre_donnee='$test' where id_donnee= '$salut' ";
$req2= mysql_query($sql2);
echo ($sql2);
?>
ça me renvoie cette erreur:
Notice: Undefined variable: salut in c:\documents and settings\stainf3\bureau\cams\site\supprime2.php on line 4
update donnee set titre_donnee='kkk' where id_donnee= ''

en gros il arrive pas a reprendre la valeur de la liste déroulante ... :oops: :oops:
Merci d'avance

Eléphant du PHP | 153 Messages

02 déc. 2005, 12:41

en la variable salut est envoyée de la premiere a la deuxieme page mais pas de la 2eme a la troisieme il faut que tu rajoutes
<? 
include("connection.php"); //connection à la base 
$salut= $_POST['bonjour']; 

$sql = "select titre_donnee from donnee where id_donnee= '$salut' "; 
$req= mysql_query($sql); 
echo ($sql); 
$row=mysql_fetch_array($req); 
$titre_donnee=$row["titre_donnee"]; 
?> 

<form method="POST" action="supprime2.php"> 
<input type="hidden" name="salut" value=$salut>
<label>Titre de la donnée : <input type="text" name="titre_donnee" size="100" value="<?echo stripslashes($titre_donnee); ?>" maxlength="100"></label> 
<input type="submit" value="Envofgfggdsyer" name="envoyfdgder"> 
</form> 

puis
<? 
include("connection.php"); //connection à la base 
$test=$_POST['titre_donnee']; 
$salut=$_POST['salut'];
$sql2 = "update donnee set  titre_donnee='$test' where id_donnee= '$salut' "; 
$req2= mysql_query($sql2); 
?>

Invité
Invité n'ayant pas de compte PHPfrance

02 déc. 2005, 14:52

en fait oui je viens de tenter avec l'hidden et ça marche ...
mais j'avais simplifié le script que j'ai donné pour faire simple...
et en fait avec mon veritable script ca marche pas:

bon j'ai créé que 2 pages au final
la première qui donne le choix de la donnée à modifier via la liste deroulante :
<html> 
<body> 

<form method="POST" action= "up.php"> 
<select name='bonjour'> 
<? 
include("connection.php"); //connection à la base 
$sql = "SELECT * FROM donnee order by id_donnee"; 
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());  

while($row = mysql_fetch_array($req)) 
   { 
      // parcours des resultats  et affichage des organisme 
      $bonjour = $row['id_donnee']; 
      echo "<option value=$bonjour >$bonjour</option>"; 
   } 
echo "</select>"; 
?> 
<center> 
<input type="submit" value="Envoyer2" name="envoyer2"> 
</center> 
</form> 

</body> 
</html> 
la deuxième up.php qui ait sencé m'enregistrer les modifications de la donnée
<? 
include("connection.php"); //connection à la base 

/* On commence par vérifier si le bouton "envoyer1"  soumettant le formulaire a été 
cliqué,  */ 
if(isset($_POST['envoyer1'])) 
{ 
   $titre_donnee = $_POST['titre_donnee']; 
   $titre_donnee=addslashes($titre_donnee) ; 

   if ($titre_donnee == '') // Si le champ "titre" est vide, 
   { 
                    print "<li>Vous n'avez pas précisé le titre</li>\n";    
   ?> 
   <form method="POST" > 
      <label>Titre de la donnée : <input type="text" name="titre_donnee" size="100" value="<?echo ($titre_donnee); ?>" maxlength="100"></label> 
      <input type="submit" value="Envoyer" name="envoyer"> 
   </form> 
   <? 
                 } 
                else 
                { 
   include("connection.php"); //connection à la base 
   $sql2 = "update donnee set  titre_donnee='$titre_donnee' where id_donnee= '$salut' "; 
   $req2= mysql_query($sql2); 
   echo ($sql2); 
   mysql_close($db); 
                 } 
 } 
/* Si cette page s'ouvre pour la première fois sans que le bouton  envoyer1 ait été cliqué */ 
 else 
  { 
   $salut= $_POST['bonjour']; //correspond a la valeur prise dans la liste deroulante 
   $sql = "select titre_donnee from donnee where id_donnee= '$salut' "; 
   $req= mysql_query($sql); 
   echo ($sql); 
   $row=mysql_fetch_array($req); 
   $titre_donnee=$row["titre_donnee"]; 
?> 
   <form method="POST"> 
      <label>Titre de la donnée : <input type="text" name="titre_donnee" size="100" value="<?echo ($titre_donnee); ?>" maxlength="100"></label> 
      <input type="submit" value="Envoyer1" name="envoyer1"> 
   </form> 
<?}?> 
j'ai viré le "hidden" car je travaille maintenant uniquement sur 2 pages (la premiere avec a liste deroulante et la deuxieme qui fait le traitement de mise à jour)


donc les resultats donnent:
je choisi dans la 1re page dans la liste deroulante la valeur 217:
j'arrive sur la 2eme page:
ca m'affiche:
select titre_donnee from donnee where id_donnee= '217'
là il prend bien l'id_donnee de ma liste deroulante
je rentre dans ma zone de texte: "ppp"
je valide et ca me met
Notice: Undefined variable: salut in c:\documents and settings\stainf3\bureau\cams\site\supprime.php on line 24
update donnee set titre_donnee='ppp' where id_donnee= '' [\b]
'ppp' c'est la valeur que j'ai rentré dans la zone de texte
je n'arrive donc toujours pas a reprendre l'id_donnee de la liste deroulante pour faire la mise à jour (l'UPDATE)

j'ai tenté avec le hidden et là:
comme avant...
- 1er cas si je modifie directement la valeur de la zone de texte et que je valide il enregistre bien ma donnée
- 2eme cas si l'utilisateur ne tape rien dans la zone de texte, je fais afficher un avertissement comme quoi il doit obligatoirement saisir quelque chose et, là quand il a bien ecrit quelque chose dans la zone de texte puis qu'il valide, ca ne reconnait toujours pas la valeur qui était contenu dans la liste déroulante... et la mise à jour n'a donc pas lieu
jsuis a court d'idée... :cry:

cams
Invité n'ayant pas de compte PHPfrance

02 déc. 2005, 14:55

bien sur l'erreur c'est a la page up.php et non
supprime.php
Notice: Undefined variable: salut in c:\documents and settings\stainf3\bureau\cams\site\up.php on line 24
update donnee set titre_donnee='ppp' where id_donnee= ''

Eléphant du PHP | 153 Messages

02 déc. 2005, 15:57

Le problème ne vient pas du nombre de page que tu utilises.

Du premier formulaire de la premiere page tu envoies une variable qui est bonjour.

Dans ta deuxieme page tu selectionne le titre de cette donnée tu proposes de le changer dans un champ de texte et un bouton envoyer te renvoie sur la meme page mais la tu ne renvoies pas la donnée en question on connait donc le nouveau titre mais pas la donnée a modifier



<? 
include("connection.php"); //connection à la base 

/* On commence par vérifier si le bouton "envoyer1"  soumettant le formulaire a été 
cliqué,  */ 
if(isset($_POST['envoyer1'])) 
{ $salut=$_POST['salut'];
   $titre_donnee = $_POST['titre_donnee']; 
   $titre_donnee=addslashes($titre_donnee) ; 

   if ($titre_donnee == '') // Si le champ "titre" est vide, 
   { 
                    print "<li>Vous n'avez pas précisé le titre</li>\n";     
   ?> 
   <form method="POST" > 
      <input type=hidden name="salut" value=$salut>
      <label>Titre de la donnée : <input type="text" name="titre_donnee" size="100" value="<?echo ($titre_donnee); ?>" maxlength="100"></label> 
      <input type="submit" value="Envoyer" name="envoyer"> 
   </form> 
   <? 
                 } 
                else 
                { 
   include("connection.php"); //connection à la base 
   $sql2 = "update donnee set  titre_donnee='$titre_donnee' where id_donnee= '$salut' "; 
   $req2= mysql_query($sql2); 
   echo ($sql2); 
   mysql_close($db); 
                 } 
} 
/* Si cette page s'ouvre pour la première fois sans que le bouton  envoyer1 ait été cliqué */ 
else 
  { 
   $salut= $_POST['bonjour']; //correspond a la valeur prise dans la liste deroulante 
   $sql = "select titre_donnee from donnee where id_donnee= '$salut' "; 
   $req= mysql_query($sql); 
   echo ($sql); 
   $row=mysql_fetch_array($req); 
   $titre_donnee=$row["titre_donnee"]; 
?> 
   <form method="POST"> 
     <input type="hidden" name="salut" value=$salut>
      <label>Titre de la donnée : <input type="text" name="titre_donnee" size="100" value="<?echo ($titre_donnee); ?>" maxlength="100"></label> 
      <input type="submit" value="Envoyer1" name="envoyer1"> 
   </form> 
<?}?> 

As tu compris ou pas?