[RESOLU] Modification multiple de champs SQL

Modification multiple de champs SQL [RESOLU] - PHP - Programmation

Marsh Posté le 13-12-2009 à 19:34:08    

Bonjour à toutes et tous,  
 
je n'ai trouvé aucune réponse à ma question (peut être n'ai-je pas trouvé comment la formuler correctement!) :
 
Je crée un système de gestion de patients pour mon activité de santé.
 
Dans la partie compta, je regroupe les séances effectuées, que je n'ai pas encore validées au niveau compta.
 
Ces données sont regroupées de cette manière :
 
http://free0.hiboox.com/vignettes/5009/dab234a0b3d86b9f31d9755028302348.png
 
Je souhaite que lorsque je clique sur le bouton "Envoyer" ma base de donnée se mette à jour concernant toutes les lignes de mon tableau (je suis peut être pas clair désolé!)
 
Je n'ai aucune idée de comment faire... mais je voudrai quand même éviter d'avoir à faire une requete pour chaque ligne du tableau.
 
En espérant que vous pourrez me guider...
 
Merci d'avance!!


Message édité par ghmpou le 16-12-2009 à 18:17:42
Reply

Marsh Posté le 13-12-2009 à 19:34:08   

Reply

Marsh Posté le 13-12-2009 à 20:03:29    

avec UPDATE

Reply

Marsh Posté le 13-12-2009 à 20:32:43    

Certes .... mais l'idée est plutot que utiliser UPDATE je veux bien, mais là il faut sûrement coupler un système d'array (enfin j'imagine).
 
Voila l'exemple ce que je voudrai pouvoir faire en UNE seule commande :
 
UPDATE seances SET regle=oui montant=40 type=espece WHERE id_seance=A
UPDATE seances SET regle=oui montant=50 type=cheque WHERE id_seance=B
UPDATE seances SET regle=oui montant=50 type=espece WHERE id_seance=C
UPDATE seances SET regle=oui montant=40 type=cheque WHERE id_seance=D
 
Autrement dit, récupérer dans un fichier php les variables $_POST issues de la capture que j'ai montrée afin de les modifier dans la bdd.
 
Faire un UPDATE simple n'est pas possible étant donné que le tableau que je donne en exemple est susceptible de contenir plus ou moins d'entrées.
 
J'espère avoir été un peu plus explicite ! :)

Reply

Marsh Posté le 13-12-2009 à 20:38:48    

Ton formulaire va créer un tableau $_POST. IL suffit de le parcourir avec foreach() et de lancer ta requête à l'intérieur.
 
P.S. : tu sais qu'il existe des logiciels médicaux déjà développés ?


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
Reply

Marsh Posté le 13-12-2009 à 20:41:16    

Merci pour cette réponse rapide, je vais donc me renseigner pour cette fonction foreach() !
 
Pour ton PS, bien sûe je sais qu'il en existe, mais d'une part je suis sous linux, donc ça limite le choix, d'autre part, je suis ostéopathe, et les logiciels spécifiques à l'ostéopathie sont soit bien trop onéreux, soit remplis de fonctions totalement inutiles pour moi.
 
Je préfère donc faire tout ça moi-même :)
 
Je reviendrai ici si je galère avec foreach() ;)

Reply

Marsh Posté le 14-12-2009 à 00:24:45    

Evidemment je galère....
 
J'ai compris "un peu" le fonctionnement du foreach(), et suis arrivé à afficher quelques données en écrivant :
 

Code :
  1. foreach($id_seance AS $cle1 => $valeur1)
  2.      {
  3.              echo $cle1.' | '.$valeur1.'<br />';
  4.      }


 
Ceci me renvoi bien :
0 | 77
1 | 73
2 | 82
3 | 88
 
Ce qui correspond bien aux valeurs de la variable $id_seance .. j'arrive à afficher de même toutes les variables qui m'intéressent en répétant plusieurs fois le foreach() en changeant la variable associée.
 
Par contre, je n'arrive pas à faire fonctionner de requete UPDATE dans ces fonctions... est-ce que ceci est la bonne méthode ?
 

Code :
  1. foreach($regle AS $cle2 => $valeur2)
  2.      {
  3.              echo $cle2.' | '.$valeur2.'<br />';
  4.    mysql_query('UPDATE guimosteo_seances_test SET compta_regle='.$valeur2.'');
  5.      }


 

Reply

Marsh Posté le 14-12-2009 à 13:27:16    

up ?
 
Au cas où mon message serait pas super clair (puisque ce n'est pas clair dans ma tête, ca risque de ne pas l'être à l'écrit) :
 
Avec ce code :

Code :
  1. $id_seance = $_POST['id_seance'];
  2. $regle = $_POST['regle'];
  3. $montant = $_POST['montant'];
  4. $type = $_POST['type'];
  5. $num_cheque = $_POST['num_cheque'];
  6.          foreach($id_seance AS $valeur1)
  7.         {
  8.        
  9.                   echo "$valeur1 <br />";
  10.         }
  11.  echo "<p />";
  12.  foreach($regle AS $valeur2)
  13.  {
  14.    echo "$valeur2 <br />";
  15.  }
  16.  echo "<p />";
  17.  foreach($montant AS $valeur3)
  18.  {
  19.   echo "$valeur3 <br />";
  20.  }
  21.  echo "<p />";
  22.  foreach($type AS $valeur4)
  23.  {
  24.    echo "$valeur4 <br />";
  25.  }
  26.  echo "<p />";
  27.  foreach($num_cheque AS $valeur5)
  28.  {
  29.    echo "$valeur5 <br />";
  30.  }
  31.  echo "<p />";


 
Il me retourne une page comme ça :
 
77  
82  
83  
88  
 
oui  
oui  
oui  
oui  
 
10  
20  
30  
60  
 
cheque  
especes  
cheque  
especes  
 
1111111111  
 
2222222222  
 
 
Ce qui est exactement les valeurs que je souhaite insérer ensuite dans une table sql.
Chaque première ligne de paragraphe correspond aux différentes valeurs d'un même item.
 
Je voudrai donc ajouter les valeurs sous cette forme :
 
77 oui 10 cheque 1111111111
82 oui 20 especes  
83 oui 30 cheque 2222222222
88 oui 60 especes
 
Vous voyez l'idée ?


Message édité par ghmpou le 14-12-2009 à 14:10:12
Reply

Marsh Posté le 14-12-2009 à 14:38:26    

coté client

 

il te faut un formulaire avec des liste du type

 

<input type="hidden" name="liste[1]['id']" />
<input type="text" name="liste[1]['montant']" />
<input type="text" name="liste[1]['type]" />
<input type="hidden" name="liste[2]['id']" />
<input type="text" name="liste[2]['montant']" />
<input type="text" name="liste[2]['type]" />

  

coté serveur tu recuper un tableau

 

[0] -- id          = 1
     -- montant = 40
     -- type      = cheque
[1] -- id          = 2
     -- montant = 50
     -- type      = espece

 

apres

 
Code :
  1. foreach($post as $value)
  2. {
  3.   $sql = sprintf("UPDATE guimosteo_seances_test SET type='%s' AND montant=%d WHERE id=%d LIMIT 1", $value['type'], $value['montant'], $value['id']);
  4. }
 



Message édité par stealth35 le 14-12-2009 à 14:40:19
Reply

Marsh Posté le 14-12-2009 à 14:57:24    

Pour ma part, je te conseillerai de visualiser ton tableau par un print_r($_POST). Pour mettre à jour le bon enregistrement, il faudra passer par un WHERE dans ta requête SQL.


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
Reply

Marsh Posté le 14-12-2009 à 15:48:46    

@stealth35 : j'avoue que ne m'y connaissant pas énormément, je ne comprend pas vraiment ce que tu m'as écris... même si je te remercie pour m'avoir répondu. Je vais m'efforcer de comprendre le principe.
 
@aideinfo : le print_r($_POST) me renvoi :
 
Array ( [id_seance] => Array ( [0] => 77 [1] => 82 [2] => 83 [3] => 88 ) [regle] => Array ( [0] => oui [1] => oui [2] => oui [3] => oui ) [montant] => Array ( [0] => 10 [1] => 20 [2] => 30 [3] => 60 ) [type] => Array ( [0] => cheque [1] => especes [2] => cheque [3] => especes ) [num_cheque] => Array ( [0] => 1111111111 [1] => [2] => 2222222222 [3] => ) [Submit] => Envoyer )
 
Maintenant je veux bien utiliser un WHERE dans ma requête, mais je ne comprend absolument pas comment :s

Reply

Marsh Posté le 14-12-2009 à 15:48:46   

Reply

Marsh Posté le 14-12-2009 à 15:52:29    

t'as fait le tableau mais a l'envers

 

au lieu de grouper les lignes, t'as grouper les colonnes


Message édité par stealth35 le 14-12-2009 à 15:52:39
Reply

Marsh Posté le 14-12-2009 à 15:55:49    

Exactement.... mais comment faire?
 
Le but serait d'apres ce que tu m'as donné, de faire un tableau associatif c'est ca?

Reply

Marsh Posté le 14-12-2009 à 15:56:45    

non mais t'inquete pas je te fais ca ;)

Reply

Marsh Posté le 14-12-2009 à 15:58:18    

que demander de mieux ? LOL merci beaucoup de ta patience en tout cas... je m'arme pour essayer de comprendre ce que tu vas m'envoyer :p

Reply

Marsh Posté le 14-12-2009 à 16:04:46    

par contre le probleme je sais pas comment est ton html, mais si tu rempli pas le champs 'num_cheque', il risque de décalé les resultat

 

limite montre nous ton formulaire


Message édité par stealth35 le 14-12-2009 à 16:05:34
Reply

Marsh Posté le 14-12-2009 à 16:08:16    

Le voila :

Code :
  1. <form action="compta_gestion_envoi.php" method="post">
  2. <table width="95%" border="0" align="center" cellpadding="4" cellspacing="1">
  3.   <tr>
  4.     <td bgcolor="#666666"><strong><a href="compta_comptes.php?tri=nom&amp;desc=DESC"><img src="img/arrow_up.png" alt="trier" width="15" height="13" border="0" /></a> PATIENT <a href="compta_comptes.php?tri=nom"><img src="img/arrow_down.png" alt="tri" width="15" height="13" border="0" /></a></strong></td>
  5.     <td bgcolor="#666666"><strong>SEANCE</strong></td>
  6.     <td bgcolor="#666666"><strong><a href="compta_comptes.php?tri=date&amp;desc=DESC"><img src="img/arrow_up.png" alt="trier" width="15" height="13" border="0" /></a> DATE <a href="compta_comptes.php?tri=date"><img src="img/arrow_down.png" alt="tri" width="15" height="13" border="0" /></a></strong></td>
  7.     <td bgcolor="#666666"><strong><a href="compta_comptes.php?tri=paye&amp;desc=DESC"><img src="img/arrow_up.png" alt="trier" width="15" height="13" border="0" /></a> REGLE <a href="compta_comptes.php?tri=paye"><img src="img/arrow_down.png" alt="tri" width="15" height="13" border="0" /></a></strong></td>
  8.     <td bgcolor="#666666"><strong><a href="compta_comptes.php?tri=prix&amp;desc=DESC"><img src="img/arrow_up.png" alt="trier" width="15" height="13" border="0" /></a> MONTANT <a href="compta_comptes.php?tri=prix"><img src="img/arrow_down.png" alt="tri" width="15" height="13" border="0" /></a></strong></td>
  9.     <td bgcolor="#666666"><strong><a href="compta_comptes.php?tri=type&amp;desc=DESC"><img src="img/arrow_up.png" alt="trier" width="15" height="13" border="0" /></a> TYPE <a href="compta_comptes.php?tri=type"><img src="img/arrow_down.png" alt="tri" width="15" height="13" border="0" /></a></strong></td>
  10.   </tr>
  11. <?php
  12. $reponse = mysql_query('SELECT * FROM guimosteo_seances_test WHERE compta_verif="non" ') or die("Erreur SQL : $query<br/>".mysql_error());
  13. while ($donnees = mysql_fetch_array($reponse))
  14. {
  15. $id_seance = $donnees['id_seance'];
  16. $id_patient = $donnees['id_patient'];
  17. $paye = $donnees['compta_regle'];
  18. $type = $donnees['compta_type'];
  19. $prix = $donnees['compta_montant'];
  20. $date = $donnees['date'];
  21. $facture = $donnees['facture'];
  22. ?>
  23.   <tr class="petit">
  24.     <td bgcolor="#E2E2E2">
  25. <?php print('
  26. <a href="details.php?id_patient='.$id_patient.'">'.$id_patient.'</a>
  27. <input type="hidden" name="id_seance[]" value="'.$id_seance.'">
  28. '); ?>
  29. </td>
  30.     <td align="center" bgcolor="#E4E4E4" class="petit"><?php print('<a href="details2.php?id_seance='.$id_seance.'">Voir s&eacute;ance</a>'); ?></td>
  31.     <td align="center" bgcolor="#C0C0C0"><?php echo $date ?></td>
  32.     <td align="center" bgcolor="#C0C0C0"><label>
  33.       <select name="regle[]" size="1" id="regle">
  34.         <option value="oui">oui</option>
  35.         <option value="non" selected="selected">non</option>
  36.       </select>
  37.     </label></td>
  38.     <td align="center" bgcolor="#C0C0C0"><label>
  39.       <select name="montant[]" size="1">
  40.         <option value="0">0</option>
  41.         <option value="10">10</option>
  42.         <option value="20">20</option>
  43.         <option value="30">30</option>
  44.         <option value="40">40</option>
  45.         <option value="47">47</option>
  46.         <option value="50" selected="selected">50</option>
  47.         <option value="57">57</option>
  48.         <option value="60">60</option>
  49.         <option value="70">70</option>
  50.       </select>
  51.     </label></td>
  52.     <td align="center" bgcolor="#C0C0C0">
  53. <input type="checkbox" name="type[]" value="cheque" />
  54. Ch&egrave;que N&deg;
  55. <input name="num_cheque[]" type="text" id="num_cheque1" value="" />
  56. <input type="checkbox" name="type[]" value="especes" />
  57. Esp&egrave;ces </td>
  58.   </tr>
  59. <?php } ?>
  60. </table>
  61. <p>
  62.   <label>
  63.   <div align="center">
  64.     <input type="submit" name="Submit" value="Envoyer" />
  65.   </div>
  66.   </label>
  67. </p>
  68. </form>


 
J'attend vos suggestions, je reviendrai voir vos réponses das la soirée, faut que je bosse entre temps !
 
Merci d'avance!! :)


Message édité par ghmpou le 14-12-2009 à 16:10:51
Reply

Marsh Posté le 14-12-2009 à 16:11:38    

tu vois par exemples ligne

 

92  tu as

Code :
  1. <input name="num_cheque[]" type="text" id="num_cheque1" value="" />


ce qu'il faudrai c'est

 
Code :
  1. <input name="form[<?php echo $id_seance ?>]['num_cheque']" type="text" id="num_cheque1" value="" />



Message édité par stealth35 le 14-12-2009 à 16:12:46
Reply

Marsh Posté le 14-12-2009 à 16:18:38    

sinon t'utilise quoi comme editeur, et t'as quelle version de php ?


Message édité par stealth35 le 14-12-2009 à 16:28:44
Reply

Marsh Posté le 14-12-2009 à 16:58:48    

voila apres avec ca tu peu utilisé ma fonction plus haut

Code :
  1. $post = $_POST;
  2. $sceance = array();
  3.             
  4. foreach($post as $key => $value)
  5. {
  6.     foreach($value as $dkey => $dvalue)
  7.     {
  8.         $sceance[$dkey][$key] = $dvalue;
  9.     }
  10. }
  11.             
  12. print_r($sceance);


Message édité par stealth35 le 14-12-2009 à 20:31:48
Reply

Marsh Posté le 14-12-2009 à 20:09:32    

Je viens de tester ce que tu m'as expliqué.
J'ai modifié mon formulaire en conséquence (et réorganisé l'ordre de certains champs pour plus de clarté), ainsi que le fichier php de destination :  
 
l'instruction print_r($seance) me donne :
Warning: Invalid argument supplied for foreach() in /xxx/xxx/xxx/compta_gestion_envoi.php on line 16
Array ( )
 
et l'instruction print_r($_POST) donne :
 
ray ( [id_seance] => Array ( [0] => 77 [1] => 82 [2] => 83 [3] => 88 ) [form] => Array ( [77] => Array ( [regle] => oui [montant] => 0 [type] => espece [num_cheque] => ) [82] => Array ( [regle] => oui [montant] => 10 [type] => cheque [num_cheque] => 1111111 ) [83] => Array ( [regle] => oui [montant] => 20 [type] => espece [num_cheque] => ) [88] => Array ( [regle] => oui [montant] => 50 [type] => cheque [num_cheque] => 2222222 ) ) [Submit] => Envoyer )
 
 
J'utilise dreamweaver pour coder, et php5.
 
Me reste plus qu'à comprendre comment utiliser cet array pour l'inclure dans ma BDD avec un UPDATE ou INSERT INTO ^^


Message édité par ghmpou le 14-12-2009 à 20:31:19
Reply

Marsh Posté le 14-12-2009 à 20:31:55    

c'est bon j'ai modifié,
au niveau de dream met en parametre de doctype  xhtml 1.0  y'aura moins de code


Message édité par stealth35 le 14-12-2009 à 20:34:33
Reply

Marsh Posté le 14-12-2009 à 22:06:02    

Mon doctype est celui-ci :
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
Pour la correction de ton code, j'obtiens le même message d'erreur, avec par contre une suite :
 
Warning: Invalid argument supplied for foreach() in /opt/lampp/htdocs/compta_gestion_envoi.php on line 16
Array ( [77] => Array ( [form] => Array ( [regle] => oui [montant] => 20 [type] => espece [num_cheque] => ) ) [82] => Array ( [form] => Array ( [regle] => oui [montant] => 10 [type] => espece [num_cheque] => ) ) [83] => Array ( [form] => Array ( [regle] => oui [montant] => 50 [type] => cheque [num_cheque] => 1111111 ) ) [88] => Array ( [form] => Array ( [regle] => oui [montant] => 57 [type] => cheque [num_cheque] => 2222222 ) ) )
 

Reply

Marsh Posté le 14-12-2009 à 22:50:39    

ta bien garder ton ancien forumlaire sans changé les champs ?

Reply

Marsh Posté le 14-12-2009 à 23:01:22    

J'ai "déplacé" des champs, mais ne les ai pas du tout modifiés. (ce qui est étonnant c'est de voir l'erreur, mais que l'affichage de la variable fonctionne tout de même ensuite... Oo)
 

Reply

Marsh Posté le 14-12-2009 à 23:25:58    

enfaite soit tu change les input comme je t'avai dis
 
soit tu garde ton code du debut, mais avec le ptit code que je t'es mis
 
 

Reply

Marsh Posté le 15-12-2009 à 14:36:20    

Arf j'ai fait les deux en fait, j'ai modifié les input comme tu me l'as dit :
 
exemple :
 

<input name="form[<?php echo $id_seance ?>]['num_cheque']" type="text" id="num_cheque1" value="" />


Et j'ai aussi utilisé ton code pour récup les données...
 
Je vais donc faire quelques tests!


Message édité par ghmpou le 15-12-2009 à 14:37:23
Reply

Marsh Posté le 15-12-2009 à 15:21:07    

Bon,j'ai fait quelques tests : je vais être honete, j'y arrive pas un pet !
 
Je ne comprend pas comment je peux utiliser ces données (qui sont toujours assorties de l'erreur "warning" ) afin de mettre a jour ma base de données....
 
Je désespère de ne pas mieux comprendre tout ça !!

Reply

Marsh Posté le 15-12-2009 à 15:46:42    

essaye sur un plus petit model, par exemple un truc login, mot de passe

 

dans ton forulaire t'aurai

 
Code :
  1. <input type="text" name="login[]" />
  2. <input type="text" name="password[]" />
  3. <input type="text" name="login[]" />
  4. <input type="text" name="password[]" />
 

on est d'accord que si tu  tu rempli les 2 champs avec  toto (passtoto), titi(passtiti)

 

dans ton php tu aurais

 
Code :
  1. [login]
  2.      [0] -> toto
  3.      [1] -> tata
  4. [password]
  5.      [0] -> passtoto
  6.      [1] -> passtata
 


mais nous parcourir les lignes par les colones

 

il nous faut la liste de ce type (grace a fontion plus haut)

 
Code :
  1. [0]
  2.      [login] -> toto
  3.      [password] -> passtoo
  4. [1]
  5.      [login] -> tata
  6.      [password] -> passtata
 

la tu peux ta liste

 
Code :
  1. foreach($array as $user)
  2. {
  3.  echo $user['login'] . '|' . $user['password'];
  4. }



Message édité par stealth35 le 15-12-2009 à 15:47:22
Reply

Marsh Posté le 15-12-2009 à 16:06:18    

Alors , je comprend exactement ce que tu veux dire, et je pense que mon problème n'est pas de la compréhension, mais des compétences en php.
 
Je comprend le principe, et récupérer les données sous formes de ligne, j'y suis arrivé grâce à toi.
 
Mon probleme est : où et comment placer une requete UPDATE afin d'enregistrer ces données dans ma base de donnée ^^
 
(boulet inside)

Reply

Marsh Posté le 15-12-2009 à 16:14:01    

tu reprend mon code la
 
sachant que $post est ta liste bien formater
 

Code :
  1. foreach($post as $value)
  2.    {
  3.      $sql = sprintf("UPDATE guimosteo_seances_test SET type='%s' AND montant=%d WHERE id=%d LIMIT 1", $value['type'], $value['montant'], $value['id']);
  4.    }


Message édité par stealth35 le 15-12-2009 à 16:15:07
Reply

Marsh Posté le 16-12-2009 à 17:36:02    

Le problème est résolu , je poste donc ici le code final qui m'a permis de m'en sortir, merci encore stealth35 !
 
Mon formulaire est de forme :
 
 <input name="num_cheque[]" type="text" value="" />
 
Mon fichier appelé :
 

Code :
  1. $post = $_POST;
  2. $seance = array();
  3.            
  4. foreach($post as $key => $value)
  5. {
  6.     foreach($value as $dkey => $dvalue)
  7.     {
  8.         $seance[$dkey][$key] = $dvalue;
  9.     }
  10. }
  11. foreach($seance as $value)
  12.     {
  13.     $sql = sprintf('UPDATE mabase SET compta_regle=\'%s\', compta_montant=\'%d\', compta_type=\'%s\',  ompta_num_cheque=\'%s\',  compta_verif=\'oui\' WHERE id_seance=\''.$value['id_seance'].'\' LIMIT 1', $value['regle'], $value['montant'], $value['type'], $value['num_cheque'], $value['verif']);
  14. mysql_query($sql) or exit(mysql_error() . '<br />' . $sql);
  15.     }


Message édité par ghmpou le 06-09-2013 à 21:20:59
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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