PHP & MYSQL Update - Problème de variables

Fermé
bogus01 Messages postés 5 Date d'inscription lundi 25 avril 2011 Statut Membre Dernière intervention 26 avril 2011 - 25 avril 2011 à 21:07
coeus Messages postés 3021 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 - 26 avril 2011 à 18:48
Bonjour,

J'ai un problème que j'essaie de comprendre, mais dont je ne viens pas à bout.

Mon script devrait en théorie mettre à jour ma bd. Mais lorsque je reçois le contenu des variables. Tout est OK. Mais la mise à jour n'est pas effectuée.

Je fais un echo $desc et de $id le contenu est là.
Mais lorsque l'update est faite, rien n'est effectué.

La variable $id n'est pas le problème. Puisque si je force la variable $desc pour "123" par exemple, à ce moment la mise à jour va être effectué. Mais si la variable qui provient de ma fonction get_desc($id) est égale à "123" alors ça ne fonctionne pas. Pourtant c'est le même résultat mais pas la même provenance.

Et si je prends le résultat de "echo $query" et que je l'exécute dans phpmyadmin. La mise à jour va fonctionner. Mais pas dans PHP... Ça fait 2 jours que je tourne en rond avec des debug à gauche et à droite.


----------------
je connecte la bd
----------------
ensuite je reçois les variables

$id = $_GET['pid'];
$desc = get_desc($id);


$query = sprintf("UPDATE products inner join products_description SET"
. " products_description = '".$desc."' "
. " WHERE products.products_model = '$id' "
. " AND products.products_id = products_description.products_id ;");

$Recordset1 = mysql_query($query);

echo $id;
echo "<br>";
echo $desc;
echo "<br>";
echo $query;
echo "<br>";
echo "<br>";

$result_info = mysql_info($linkz);
echo $result_info;



P.s. La fonction get_desc est fonctionnelle puisqu'elle sert déjà pour d'autres pages à récupérer la même variable... mais je ne reprends pas la variable pour mettre à jour la bd :(


Aidez moi quelqu'un :) J'ai l'impression que c'est tellement con comme solution que je ne le vois pas...
A voir également:

9 réponses

coeus Messages postés 3021 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
25 avril 2011 à 22:24
Salut !

As-tu essayé de rentrer seulement la commande SQL dans MySQL (ou peu importe ce que tu utilises) ? Il peut te sortir un message d'erreur s'il y en a une...
0
bogus01 Messages postés 5 Date d'inscription lundi 25 avril 2011 Statut Membre Dernière intervention 26 avril 2011
26 avril 2011 à 00:47
Oui, et c'est correcte quand je met la commande dans MySQL.
0
boly38 Messages postés 267 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 29 septembre 2016 80
26 avril 2011 à 11:39
hello,
2 petites questions pour mieux comprendre :
- "inner join" me semble inadapté pour cet update : est-ce que 'products_description' est une table ou bien une colonne ?
- "$id" ne correspondrait-il pas plutôt à products.products_id (et pas model) ?
0
bogus01 Messages postés 5 Date d'inscription lundi 25 avril 2011 Statut Membre Dernière intervention 26 avril 2011
26 avril 2011 à 16:18
Je n'ai pas le choix pour le "inner Join" puisque ce sont 2 tables qui doivent être lié pour obtenir le bon résultat. Les tables "products" et "products_description"

Non le "$id" ne correspond pas au products.products_id.

Comme je l'ai mentionner, la requete d'update fonctionne dans le cas suivant:
Si je met : $desc = '123';
Le résultat est : Requete update correcte

Si j'utilise le résultat de la fonction : $desc = get_desc($id) qui elle retourne '123', à ce moment la requete update ne renvoi rien.

Pourtant "$desc" donne le même résultat...
0

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

Posez votre question
coeus Messages postés 3021 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
26 avril 2011 à 16:23
Si tu mets $id = '123'; au lieu de $id = $_GET['pid']; est-ce que ça marche ?
0
boly38 Messages postés 267 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 29 septembre 2016 80
26 avril 2011 à 16:34
quel est le type de la colonne products_model ?
si c'est du texte alors peut être essayer avec un LIKE à la place du signe égal :
(...)
" WHERE products.products_model LIKE '$id' " 
(...)
0
bogus01 Messages postés 5 Date d'inscription lundi 25 avril 2011 Statut Membre Dernière intervention 26 avril 2011
26 avril 2011 à 17:23
coeus : Lorsque je regarde le resultat du "echo $id;" la valeur est la bonne. Et pour votre compréhension. La fonction "getdesc()" provient d'un autre page PHP. Et elle me retourne une description qui elle est lié à un numero de pièce qui est $id...

La fonction "getdesc($nomdelavariable)" est correcte puisque je l'utilise dans d'autre page sans problème et dans le même contexte.

Donc $id récupère le numero de pièce via l'URL
Ensuite j'envoie le numero à la fonction getdesc($id) qui elle me retourne une description et la stock dans la variable $desc

Et ensuite je "veux" mettre à jour la description dans la requete MYSQL... et c'est là que ca ne fonctionne pas.

Pourtant lorsque je regarde le resultat de "echo $desc" la variable à le contenu désiré...mais la requete ne l'execute pas.

Et si je force "$desc = 'peu importe la description';" alors là la requète fonctionne.

Mais pourquoi une variable qui provient d'une fonction n'est pas interprété de la même façon ? Est-ce que je dois définir autre chose ?
0
Bonjour

Suggestion : puisque ta requête ne semble pas marcher de la même manière dans le script et 'à la main', vérifier d'abord si elle est correcte pour le script :
$Recordset1 = mysql_query($query) or die (mysql_error());

D'autre part, l'intérêt d'utiliser un sprintf pour créer ta requête m'échappe complètement, c'est même une source de problèmes s'il y a des '%' dans tes variables
0
bogus01 Messages postés 5 Date d'inscription lundi 25 avril 2011 Statut Membre Dernière intervention 26 avril 2011
26 avril 2011 à 18:25
le père : Avec "$Recordset1 = mysql_query($query) or die (mysql_error());" j'obtiens le même résultat.
Si je force la variable, ca marche. Si je laisse la variable recevoir le contenu de la fonction, pas de mise-à-jour.

Pour le sprintf, je l'ai essayer en remplacant la requete par : $query = "UPDATE products inner join products_description SET products_description = '$desc' WHERE products.products_model = '$id' AND products.products_id = products_description.products_id";

et j'ai le même résultat!

0
coeus Messages postés 3021 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
26 avril 2011 à 18:48
Si je force la variable, ca marche.

On parle toujours de forcer $id ici, pas de forcer $desc ?
Si c'est le cas, ben tu as ta solution : $id reçoit mal le $_GET['pid'], et donc la fonction get_desc() ne peut pas faire son travail si elle reçoit en argument une variable fautive ?
0