Comment faire un UPDATE sur un nom de champ SQL variable?

Résolu/Fermé
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014 - 25 août 2014 à 15:33
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 - 26 août 2014 à 20:43
Je m'explique, (bonjour à tous déjà :D) j'ai une BDD pour l'agenda de mes utilisateurs, et je DOIS afficher tous les utilisateurs (en ligne) , sur un mois complets (30-31 jours en colonne), sur une seule page de mon intranet. chaque case étant remplie par un contenu, mais peu importe le contenu.

J'ai fait un formulaire pour ajouter une entrée avec un <form> classique, qui envoie sur une page de traitement php (après avoir vérifié la validité des dates en javascript).

Et, c'est la que vient la difficultés, pour éviter de faire 31 requetes UPDATE couvrant chacune des possibilités, j'aimerai que le "AGENDA_1" soit remplacé par une variable, puisque le chiffre est variable et dépend de ce qui a été entré dans le formulaire. Voici la requête UPDATE à modifier.

$rep = $bdd->exec("UPDATE z_agenda
SET AGENDA_1='$code'
WHERE AGENDA_NOM='$agent'
AND AGENDA_TYPE='code'");

Quelqu'un a une idée prodigieuse? Parce que le SQL n'aime pas que je lui envoie des field name sous forme de variable...

6 réponses

Utilisateur anonyme
25 août 2014 à 15:54
Bonjour

Sii j'ai bien compris ta demande :
$rep = $bdd->exec("UPDATE z_agenda 
SET AGENDA_".$jour."='$code' 
WHERE AGENDA_NOM='$agent' 
AND AGENDA_TYPE='code'");


Entre nous, si tu es amené à écrire ce genre de choses, je pense que tu devrais re-réfléchir à l'organisation de tes données, genre avoir un seul champ AGENDA et ajouter un champ JOUR. Je dis ça sans connaître tout ton problème, c'est toi qui vois.
0
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
25 août 2014 à 16:00
Oui tu n'es pas le seul à le dire, et en le faisant je trouvais ça super crade, je sais bien, mais j'ai déjà masse informations et je ne savais vraiment pas comment l'ordonner...
J'ai peur que si j'enlève tous les champs "AGENDA_1" et les 30 qui suivent pour les remplacer par un champs unique "AGENDA_JOUR" par exemple, je ne puisse plus extraire les infos aussi facilement.
Même si c'est vrai que ça réglerait mon problème dans l'immédiat...

Sinon oui, tu as compris mon problème, mais aussi bien
SET AGENDA_".$jour."=
que
SET '$var'='$code' (avec $var="AGENDA_1")
Ne fonctionnent pas. Je n'ai pas de retour d'erreur sql, pas plus que d'ajout dans la bdd. Juste... Rien.
0
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
25 août 2014 à 16:13
Parce que je dois afficher 75 lignes de 30-31 cases chacune.
Ca prend déjà pas mal de temps (presque deux secondes), du coup si je dois boucler avec "trouve moi le 1", affiche, "trouve moi le 2", affiche, etc etc, je perdrais un max de temps de traitement non? La c'est simple, je cherche le mois, le nom du user, et tac, j'affiche la ligne.
0
Utilisateur anonyme
25 août 2014 à 16:42
SET '$var'='$code' (avec $var="AGENDA_1") 

Normal que ça ne marche pas. Tu as mis des apostrophes autour de $var, qui représente un nom de champ : il ne faut pas d'apostrophes autour des identifiants SQL, seulement autour des valeurs.

SET AGENDA_".$jour."=

Sûr et certain que ça marche, sous réserve qu'il n'y ait pas de problème ailleurs. MySQL n'a aucune raison de faire la distinction avec
SET AGENDA_1=
si $jour=1, car c'est php qui remplace la variable par sa valeur, et MySQL ne "voit" jamais de variable php.

Pour voir :
echo "UPDATE z_agenda 
SET AGENDA_".$jour."='$code'
WHERE AGENDA_NOM='$agent'
AND AGENDA_TYPE='code'";
ça t'affiche quoi ?
0
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
25 août 2014 à 16:59
Ca m'affiche la requête comme il faut en effet.
Diantre, j'essaye ça dès demain matin :D.
*affaire à suivre*
Tu aura ton croissant demain matin si ça fonctionne promis.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
26 août 2014 à 09:36
OMG CA FONCTIONNE!!!
Tout il est parfait, youhou, tout ça tout ça.
Je mets le sujet en résolu et remercie le père :D

Pour ceux que ca intéresse, la syntaxe finale :

$rep = $bdd->exec("UPDATE z_agenda
SET AGENDA_".$debut."='$code'
WHERE AGENDA_NOM='$agent'
AND AGENDA_TYPE='code'");
0
Utilisateur anonyme
26 août 2014 à 13:47
Tant mieux !

Mais peux-tu me montrer la différence avec ce que je t'avais proposé ? Mis à part la variable $jour que tu as remplacée par $debut.
0
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
26 août 2014 à 13:48
aucune, j'ai repris ta syntaxe.
Juste que je pensais logique de mettre le code final tout en bas pour plus de lisibilité?
Je ne veux pas te voler la vedette c'est toi qui m'a aidé :D
0
Utilisateur anonyme
26 août 2014 à 13:51
Ce n'est pas une question de vedette, ma question est : pourquoi n'est-ce pas résolu depuis hier 15h54 ? À 16h00, tu disais que ça ne marchait pas
0
sluggy10 Messages postés 20 Date d'inscription lundi 25 août 2014 Statut Membre Dernière intervention 28 octobre 2014
26 août 2014 à 13:53
........
*long silence géné*
En effet, tu y avais déjà répondu à ce moment là.
J'ai mal lu probablement.
0
Utilisateur anonyme
26 août 2014 à 14:56
En plus, tu ne tiens même pas tes promesses.
Obligé de me servir moi-même.^^
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
Modifié par Fallentree le 26/08/2014 à 20:45


Bonne appétit...
0