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

Résolu
sluggy10 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
Fallentree Messages postés 2309 Date d'inscription   Statut Membre Dernière intervention   -
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...
A voir également:

6 réponses

Utilisateur anonyme
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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
 
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   Statut Membre Dernière intervention  
 
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
 
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   Statut Membre Dernière intervention  
 
........
*long silence géné*
En effet, tu y avais déjà répondu à ce moment là.
J'ai mal lu probablement.
0
Utilisateur anonyme
 
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   Statut Membre Dernière intervention   209
 


Bonne appétit...
0