Probleme requete UPDATE

Louisss
Invité n'ayant pas de compte PHPfrance

02 févr. 2006, 19:46

Bonjour.

J'ai une requête UPDATE qui ne fonctionne pas. Je ne reçoit aucun message d'erreur, mais les données ne sont jamais modifiées. Voici la requête :

Code : Tout sélectionner

$jour = substr($_POST['date'], 0, 2); $mois = substr($_POST['date'], 3, 2); $annee = substr($_POST['date'], 6, 2); mysql_connect("...","...","..."); mysql_select_db("frat"); $requete = "UPDATE blog SET Auteur = '".$_POST['auteur']."', Titre = '".$_POST['titre']."', Contenu = '".$_POST['contenu']."', Date = '".$annee."/".$mois."/".$jour."', Categorie = '".$_POST['categorie']."' WHERE Id = ".$_POST['id'].";"; echo $requete; $res = mysql_query($requete); mysql_close();
Le
echo $requete;
me donne ceci :

UPDATE blog SET Auteur = 'toto', Titre = 'exemple de titre', Contenu = 'exemple de contenu', Date = '06/02/02', Categorie = 'exemple de categorie' WHERE Id = 2;

Par contre, le
$res = mysql_query($requete);
ne donne rien.

J'ai essayé de générer la même requête avec PHPmyadmin et il me donne la même chose, sauf qu'il met
Id = '2'
alors que Id est de type smallint.

D'autre part, toutes mes autres requêtes de sélection ou d'insertion fonctionnent très bien et sont conçues à peu près de la même manière.
Où est le problème alors ?

Merci d'avance

Mammouth du PHP | 768 Messages

02 févr. 2006, 19:57

$res = mysql_query($requete) or die(mysql_error()); te permettra d'afficher un message d'erreur si il y en a une.

Quel est le type de champ pour "Date"
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

VaN
Mammouth du PHP | 1107 Messages

02 févr. 2006, 20:34

$requete = "UPDATE blog SET Auteur = '".$_POST['auteur']."', Titre = '".$_POST['titre']."', Contenu = '".$_POST['contenu']."', Date = '".$annee."/".$mois."/".$jour."', Categorie = '".$_POST['categorie']."' WHERE Id = '".$_POST['id']."'";
devrait marcher
(rajout de ' autour de $_POST['Id'] et suppression du doublon "; à la fin de ta requete.

Note : le probleme venait surtout du manque de ' autour de Id.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

02 févr. 2006, 22:24

remarque... :-k

Il y a des données à modifier et surtout ayant un id égal à 2 !

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 60 Messages

03 févr. 2006, 11:48

Mario, merci pour ton "or die(mysql_error());", ça m'a permis de toruver la solution.

VaN, le problème ne venait pas du manque de ' autour de Id puisqu'il est de type numérique (smallint). Ceci dit, comme phpmyadmin en met lorsqu'il génère la requête, je pense que ça n'a pas d'importance. En tout cas, maintenant, ça fonctionne sans ces quotes.

D'autre part, le doublon de ; à la fin de ma requête n'en est pas un. En fait là encore phpmyadmin termine ses requêtes par un point-virgule pour la requête. D'où mes 2 ; successifs : celui de la requête et celui de la commande php. Il me semble que ça fonctionne aussi dans les deux cas.

Truc, je ne suis pas sûr d'avoir bien compris ta question mais en tout cas, je suis sûr qu'il y a des données à modifier avec un Id égal à 2. Mon formulaire de sélection d'un enregistrement à modifier propose un menu déroulant alimenté par les Id présents dans la table, donc pas de risque de ce côté là.

Le problème par contre, est assez intéressant compte tenu de sa subtilité : c'est dans le champ Contenu que ça coinçait, car l'enregistrement Id = 2 avait le mot suivant dans son contenu : d'article. Compte tenu du fait que la champ Contenu de ma requête était entouré de quotes, ça créait une erreur de syntaxe avec le quote de d'article. J'ai donc modifié ma requête de la façon suivante :

Code : Tout sélectionner

$requete = "UPDATE blog SET Auteur = \"".$_POST['auteur']."\", Titre = \"".$_POST['titre']."\", Contenu = \"".$_POST['contenu']."\", Date = '".$annee."/".$mois."/".$jour."', Categorie = \"".$_POST['categorie']."\" WHERE Id = ".$_POST['id'].";";
En gros, j'ai remplacé les ' par \" pour tous les champs de type texte.