[PHP] Problème update

Problème update [PHP] - PHP - Programmation

Marsh Posté le 12-02-2004 à 14:13:06    

Bonjour,
 
J'ai un formulaire de modification de mes factures :
 
dans ce formulaire, je peux modifier plusieurs lignes de matériel.
Ensuite je fais un update de ma table marchandise, en lui disant de remplacer les données ou mon id est égal à celui de la table.
 
Mon problème, c'est que quand je lance l'update, il ne me modifie que la dernière des lignes de matériel et pas les autres.
 
Voici le code de mon update :

Code :
  1. $query = "update  marchandises
  2. set  marchnum='$marchnum', marchtype='$marchtype',
  3. marchcont='$marchcont', marchqte='$marchqte', marchpoids='$marchpoids.',
  4. marchvol='$marchvol', marchsurf='$marchsurf', marchval='$marchval',
  5. marchdaterec='$marchdaterec', marchconnu='$marchconnu',
  6. marchdep='$marchdep'
  7. where marchid='$marchid'";
  8. $result = mysql_query($query);


 
Quelqu'un pourrait me dire comment faire pour qu'il me corrige  toutes les lignes ?
 
Merci d'avance

Reply

Marsh Posté le 12-02-2004 à 14:13:06   

Reply

Marsh Posté le 12-02-2004 à 14:33:59    

Ben, c'est normal, tu as ça :
 
where marchid='$marchid'";

Reply

Marsh Posté le 12-02-2004 à 15:27:40    

hermes le messager a écrit :

Ben, c'est normal, tu as ça :
 
where marchid='$marchid'";


 
ben oui, et je mets koi moi à la place de ca ?

Reply

Marsh Posté le 12-02-2004 à 15:28:38    

samesoule1977 a écrit :


 
ben oui, et je mets koi moi à la place de ca ?


 
Ah ok... Attends, je regarde dans ma boule de crystal. Ah ben non, ya trop de lumière aujourd'hui. Peut être demain alors...  :whistle:

Reply

Marsh Posté le 12-02-2004 à 15:34:16    

yup
 
euh c'est normal le point la : marchpoids='$marchpoids.' ?
à la fin tu met WHERE 1; mais à la base si tu mets pas de where bah ça fait tout quand même :/


---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 12-02-2004 à 15:36:27    

bah tu peux essayer sans, ça te mettra à jour toutes les lignes de ta table :whistle:
mais ça m'étonerait que ce soit ça que tu veuilles faire ;)
 
quelle est la structure de la table?
enfin, dis nous plutôt ce que tu cherches à faire.


Message édité par dropsy le 12-02-2004 à 15:37:49
Reply

Marsh Posté le 12-02-2004 à 15:41:59    

samesoule1977 a écrit :


...
Quelqu'un pourrait me dire comment faire pour qu'il me corrige  toutes les lignes ?
...


 
On dirait que c'est ce qu'il veut ... je ne vois pas trop l'utilité mais bon ...  :pt1cable:


---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 12-02-2004 à 16:37:55    

dropsy a écrit :

bah tu peux essayer sans, ça te mettra à jour toutes les lignes de ta table :whistle:
mais ça m'étonerait que ce soit ça que tu veuilles faire ;)
 
quelle est la structure de la table?
enfin, dis nous plutôt ce que tu cherches à faire.


Bon d'accord j'avoue,j'ai pas été tres clair...
 
Table facture :  
facid, facnum, facdate, ....
 
Table marchandises :
marchid, marchqte, marchpoids,...et facid
 
Dans une facture, il peut y avoir jusqu'à 4 lignes de marchandises.
 
Ensuite, j'ai un formulaire de modification de ces lignes...(pour les gens qui ne sont pas capables de saisir une facture sans se planter...) :sarcastic:  
Il va récupérer toutes les lignes de marchandises ayant la référence de ma facture...

Code :
  1. $query = "select * from marchandises where marchoa like '".$facid."' order by marchid";
  2. $result = mysql_query($query);
  3.  
  4. $num_results = mysql_num_rows($result);
  5. for ($i=0; $i <$num_results; $i++)
  6.   {
  7. $my_array = mysql_fetch_array($result);
  8. $marchid=$my_array[0]; 
  9. $marchnum=$my_array[1]; 
  10. $marchtype=$my_array[2];
  11. $marchcont=$my_array[3];
  12. $marchqte=$my_array[4];
  13. $marchpoids=$my_array[5];
  14. $marchvol=$my_array[6];
  15. $marchsurf=$my_array[7];
  16. $marchval=$my_array[8];
  17. $marchconnu=$my_array[11];
  18.  
  19. echo " <tr>\n";
  20.   echo "    <td >";
  21.     echo "   <input type='text' maxlength='5' name='marchid' size='5' value='$marchid' >";
  22. echo " </td>";
  23. echo "    <td >";
  24.     echo "   <input type='text' maxlength='15' name='marchnum' size='13' value='$marchnum' >";
  25. echo " </td>";
  26. echo " <td>";
  27. echo "  <input type='text' maxlength='15' name='marchtype' size='13' value='$marchtype'>";
  28. echo " </td>";
  29. echo " <td>";
  30. echo "  <input type='text' maxlength='30' name='marchcont' size='30' value='$marchcont'>";
  31. echo " </td>";
  32. echo " <td>";
  33. echo "  <input type='text' maxlength='8' name='marchqte' size='8' value='$marchqte'>";
  34. echo " </td>";
  35. echo " <td>";
  36. echo "  <input type='text' maxlength='13' name='marchpoids' size='8' value='$marchpoids'>";
  37. echo " </td>";
  38. echo " <td>";
  39. echo "  <input type='text' maxlength='13' name='marchvol' size='8' value='$marchvol'>";
  40. echo " </td>";
  41. echo " <td>";
  42. echo"  <input type='text' maxlength='13' name='marchsurf' size='8' value='$marchsurf'>";
  43. echo " </td>";
  44. echo " <td>";
  45. echo "  <input type='text' maxlength='13' name='marchval' size='8' value='$marchval'>";
  46. echo" </td>";


 
Et lorsqu'ils ont modifié les 4 lignes(s'ils se sont plantés sur les 4...), je voudrais qu'il update ces 4 lignes dans ma table marchandise.
 
Voilà, la suite vous la connaissez...il ne me corrige qu'une seule ligne... losque je lance mon update.
il n'y a pas un moyen de faire une boucle ou kelke chose comme ca ?
 
Merci

Reply

Marsh Posté le 12-02-2004 à 16:38:06    

darxmurf >
jsais pas [:proy]
il a pê plusieurs fois le même marchid dans sa table, mais dans ce cas, sa première requête devrais toutes les mettre à jour...
 


Message édité par dropsy le 12-02-2004 à 16:39:03
Reply

Marsh Posté le 12-02-2004 à 16:41:36    

dans ton formaulaire html, tu as pls input avec le même nom avec ta façon de procéder ;)
c'est à ce niveau là qu'il faut que tu fasses tes modifs ;)

Reply

Marsh Posté le 12-02-2004 à 16:41:36   

Reply

Marsh Posté le 12-02-2004 à 16:46:10    

dropsy a écrit :

dans ton formaulaire html, tu as pls input avec le même nom avec ta façon de procéder ;)
c'est à ce niveau là qu'il faut que tu fasses tes modifs ;)


oui mais ils ont tous un id différent, ca devrait suffir à les différencier dans la table non ?

Reply

Marsh Posté le 12-02-2004 à 17:13:18    

tu n'as pas d'id dans tes balise input :heink:
 
regarde le code html généré ;)

Reply

Marsh Posté le 13-02-2004 à 08:09:43    

Hu en passant tu peux corriger ça :
 

Code :
  1. $num_results = mysql_num_rows($result);
  2. for ($i=0; $i <$num_results; $i++)
  3. {
  4.   my_array = mysql_fetch_array($result);
  5. ...


 
par ça :
 

Code :
  1. while ($my_array = mysql_fetch_array($result))
  2. {
  3. ...


 
ça t'enlève 1 ou 2 lignes, c'est plus simple ...


Message édité par darxmurf le 13-02-2004 à 08:10:11

---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 13-02-2004 à 08:13:54    

hm moi je verrais un truc dans le genre ça :
tu ajoute à la fin de chaque input un numéro
 
genre :  
echo "   <input type='text' maxlength='5' name='marchid$i' size='5' value='$marchid' >";
 
comme ça à chaque passage dans la boucle ton input prendre un nom différent
marchid1
marchid2
...
 
une fois le truc modifié, quand le mec valide, tu passe dans la page suivante la valeur de $i comme ça tu sais combien de lignes ont été modifiées et il te reste plus qu'à faire ton UPDATE en fonction de ça...


Message édité par darxmurf le 13-02-2004 à 08:14:33

---------------
Des trucs - flickr - Instagram
Reply

Marsh Posté le 17-02-2004 à 18:44:07    

darxmurf a écrit :

hm moi je verrais un truc dans le genre ça :
tu ajoute à la fin de chaque input un numéro
 
genre :  
echo "   <input type='text' maxlength='5' name='marchid$i' size='5' value='$marchid' >";
 
comme ça à chaque passage dans la boucle ton input prendre un nom différent
marchid1
marchid2
...
 
une fois le truc modifié, quand le mec valide, tu passe dans la page suivante la valeur de $i comme ça tu sais combien de lignes ont été modifiées et il te reste plus qu'à faire ton UPDATE en fonction de ça...


 
 
merci,
 
j'ai modifié mon formulaire ainsi :
 

Code :
  1. echo "   <input type='text' maxlength='5' name='marchid".$i."' size='5' value='$marchid' >";
  2.   echo " </td>";
  3.   echo "    <td >";
  4.     echo "   <input type='text' maxlength='15' name='marchnum".$i."' size='13' value='$marchnum' >";
  5.   echo " </td>";
  6. ...


 
effectivement, maintenant, ils ont un nom différent,mais maintenant, j'ai un problème pour récupérer les noms dans mon update  
 

Code :
  1. $query = "update marchandises
  2. set  marchnum='".$marchnum.$i."', marchtype='".$marchtype.$i."',
  3. marchcont='"$marchcont.$i"', marchqte='"$marchqte.$i"', marchpoids='$marchpoids.$i',
  4. marchvol='$marchvol'.$i, marchsurf='$marchsurf'.$i, marchval='$marchval'.$i,
  5. marchdaterec='$marchdaterec'.$i, marchconnu='$marchconnu'.$i,
  6. marchdep='$marchdep'.$i
  7. where marchid='$marchid'.$i";
  8. $result = mysql_query($query);


 
si je met ca,'".$marchnum.$i."', il ne me récupère aucune donnée.
Quelle est la bonne formulation ?
j'ai essaye avec $_POST['".$marchnum.$i."'] mais ca marche pas non plus
 
merci


Message édité par samesoule1977 le 17-02-2004 à 18:49:43
Reply

Marsh Posté le 17-02-2004 à 22:27:31    

hello,
 
2 choix :
 
1) il faut "magouiller" avec les noms :/
essaye de jouer avec $$var

Code :
  1. <?php
  2. $mavar1 = "youhouhou";
  3. $i = 1;
  4. $temp = "mavar".$i;
  5. echo $$temp;
  6. ?>


explication : dans la variable temp j'y pose le nom de la première variable "mavar" et j'y ajoute 1 donc $temp vaudra "mavar1". En faisant $$temp il va en fait faire $mavar1...
 
sinon tu peux faire echo ${'marchnum'.$i};
et ça marche aussi ...


---------------
Des trucs - flickr - Instagram
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed