Modification multiple de champs SQL [RESOLU] - PHP - Programmation
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 !
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 ?
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()
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 :
|
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 :
|
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 :
|
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 ?
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 :
|
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.
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
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
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?
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
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
Marsh Posté le 14-12-2009 à 16:08:16
Le voila :
Code :
|
J'attend vos suggestions, je reviendrai voir vos réponses das la soirée, faut que je bosse entre temps !
Merci d'avance!!
Marsh Posté le 14-12-2009 à 16:11:38
tu vois par exemples ligne
92 tu as
Code :
|
ce qu'il faudrai c'est
Code :
|
Marsh Posté le 14-12-2009 à 16:18:38
sinon t'utilise quoi comme editeur, et t'as quelle version de php ?
Marsh Posté le 14-12-2009 à 16:58:48
voila apres avec ca tu peu utilisé ma fonction plus haut
Code :
|
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 ^^
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
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 ) ) )
Marsh Posté le 14-12-2009 à 22:50:39
ta bien garder ton ancien forumlaire sans changé les champs ?
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)
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
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!
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 !!
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 :
|
on est d'accord que si tu tu rempli les 2 champs avec toto (passtoto), titi(passtiti)
dans ton php tu aurais
Code :
|
mais nous parcourir les lignes par les colones
il nous faut la liste de ce type (grace a fontion plus haut)
Code :
|
la tu peux ta liste
Code :
|
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)
Marsh Posté le 15-12-2009 à 16:14:01
tu reprend mon code la
sachant que $post est ta liste bien formater
Code :
|
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 :
|
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 :
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