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

[Résolu/Fermé]
Signaler
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014
-
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
-
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


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.
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

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.
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

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.

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 ?
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

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.
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

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'");
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

........
*long silence géné*
En effet, tu y avais déjà répondu à ce moment là.
J'ai mal lu probablement.
Utilisateur anonyme
En plus, tu ne tiens même pas tes promesses.
Obligé de me servir moi-même.^^
Messages postés
20
Date d'inscription
lundi 25 août 2014
Statut
Membre
Dernière intervention
28 octobre 2014

Hu hu hu ^^
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
198
Comme le pére y fait pour mettre une image
<center><img src='http://static.commentcamarche.net/www.commentcamarche.net/pictures/vhYd5bHaja7JQhn4jk7XAsJWEVKzUY40hjmqiWEnTFERy4E6cIyt7udFftrur7e4-4e449961-s-.png' alt='' width='325'  border='0' /></center>
Dans une réponse, c'est facile, il y a un bouton pour insérer des images.
Mais dans les commentaires, il n'y a pas ce bouton.

Alors tu fais une réponse, mais au lieu de la valider, tu copies-colles le tout dans un commentaire.

Voir aussi et surtout :
https://www.commentcamarche.net/faq/2380-ccm-inserer-une-image-dans-une-discussion
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
198


Bonne appétit...