Aller au contenu
Bridou

Problème MySQL avec UPDATE

Noter ce sujet :

Recommended Posts

Fais moi un pack avec le formulaire, le fichier de traitement et un fichier sql avec les tables nécessaires.

Test ce que tu m'envoies au cas où et si cela ne marche toujours pas, envoie moi le tout.

Je le testerais ce soir et posterais de suite après :)

:)

++

Partager ce message


Lien à poster
Partager sur d’autres sites

Ma foi je le veux bien au passage aussi ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir,

Après moulte test, je n'ai pas résolu le problème.

Cela viens, je pense, de la class utilisée pour exécuter la requête mais parfois cela fonctionne, et parfois non.

Ce que j'ai fais :

J'ai exécuté la requete directement à savoir :

Au lieu d'avoir ceci :

//$BDD_EDITER->Requete("UPDATE cr_news SET auteur = '".$_POST["auteur"]."', titre = '".$_POST["titre"]."', genre = '".$_POST["genre"]."' where id = '$id'");

J'ai mis :

$requete = mysql_query("UPDATE cr_news SET auteur = 'ffdsfdsfdsf', titre = 'fdsfdsfdsfsd', genre = 'fdsfdsfdsfsd' where id = '$id'") or die (mysql_error());

En mettant en dur, cela fonctionne à tous les coups. Par contre, si je mets ceci :

//$requete = mysql_query("UPDATE cr_news SET auteur = '".$_POST["auteur"]."', titre = '".$_POST["titre"]."', genre = '".$_POST["genre"]."' where id = '$id'") or die (mysql_error());

Cela ne fonctionne plus. La connexion à la base ce fait bien. La requête est bien affichée et exécutée. Mais les valeurs sont à blanc dans la base de données alors qu'elle est bien affichée à l'écran. La péthode est bien en POST.

J'ai pensé à un moment que le tableau '$_POST' était manipulé quelque part mais je n'ai rien trouvé de tel.

Je continuerais ce soir car cela m'intrigue fortement. D'ici là, si quelqu'un veut essayer, contacter Bridou ^_^

Bonne nuit

Portekoi

Modifié par portekoi

Partager ce message


Lien à poster
Partager sur d’autres sites

Re,

Notre ami a mis ceci :

$auteur = $_POST["auteur"];

$titre = $_POST["titre"];

$genre = $_POST["genre"];

et j'ai rajouter des 's' à la fin de chaque chaine :

$auteur = $_POST["auteur"]."s";

$titre = $_POST["titre"]."s";

$genre = $_POST["genre"]."s";

Et devinez quoi? Et oui, lors de l'update, il n'a enregistré que les s ...

J'ai donc changé la method en 'GET' et cela fonctionne. Il y a bien un conflit au niveau du POST mais je n'ai pas trouvé avec quoi...

Et la dodo time :)

++

Modifié par portekoi

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai un doute sur l'accessibilité des variables $_POST a l'interieur de la fonction EditerBDD($id)

Est-ce qu'il ne faudrait pas non plus les passer en parametre?

function EditerBDD($id, $auteur, $titre, $genre)

ou alors utiliser la définition global

Partager ce message


Lien à poster
Partager sur d’autres sites

Vincent je pensais ça aussi, que les variables POST devraient être dans les paramètres, mais à l'affichage de la requète tout marche... J'ai testé l'affichage de la requète dans la class, ainsi que juste avant de faire le mysql_query, et tout s'affiche correctement...

Donc les variables sont passées finalement :|

Partager ce message


Lien à poster
Partager sur d’autres sites

Le plus dingue c'est qu'il affiche la requete...

Je continue ce soir.

++

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Portekoi,

Es-tu certain de tes variables $_POST ? Particulièrement si elles peuvent contenir des caractères tels que les simples quotes...

Tu devrais utiliser addslashes($_POST['titre']) histoire d'être tranquille.

Il y aura toujours bien un jour un titre avec une simple quote qui fera foirer ta requête. ;)

Dan

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

Non, je test simplement le script de Bridou en mettant des valeurs telles que Test :)

Le truc vraiment bizarre, c'est que le echo de la requete affiche bien tout mais les champs sont quand même vides ^_^

En GET, les champs ne sont pas vide...

Première fois que je vois ca...

Modifié par portekoi

Partager ce message


Lien à poster
Partager sur d’autres sites

Bah moi aussi j'ai testé directement les scripts, j'ai changé des petites choses, j'ai fait juste un

echo $requete; 
mysql_query($requete);

... l'affichage de la requète est bon, il n'y a aucun souci dedans. Par contre, la requète vide les champs dans la BDD...

Le pire n'est même pas là, on pourrait imaginer un problème de configuration quelque part, bref une toute petite erreur... Le pire, c'est que quand on essaye la requète plusieurs fois, au bout d'un moment (2, 3 fois) elle marche ! La même requète marche une fois sur deux... C'est incompréhensible, bravo Bridou tu as le problème PHP+sql de l'année je crois !

Partager ce message


Lien à poster
Partager sur d’autres sites

Heu j'ignore si c'est utile mais quand on modifie des champs à partir des formulaires de phpmyadmin, il y a toujours un point virgule à la fin de la requête.

Et ici il n'y est pas...

Partager ce message


Lien à poster
Partager sur d’autres sites

Si c'était un problème de syntaxe rien ne serait touché sur la BDD, il ne se passerait rien, et l'affichage des erreurs pourrait renvoyer l'erreur de MySQL... Or, la ligne modifiée est vidée de son contenu et le script ne renvoie aucune erreur, tout est bien, il est content du résultat le script...

Partager ce message


Lien à poster
Partager sur d’autres sites

Je rentre juste du boulot et vois qu'au bout du compte je suis quand même pas un idiot, c'est pas trop de ma faute si ca fonctionne pas :D

Je remercie tout le monde pour le temps que vous passez à essayer de trouver une solution.

_AT_Dan : Concernant :"Es-tu certain de tes variables $_POST ?"

Comme dit plus haut, c'est verifié à tout les niveaux possibles et ce sont bien les valeurs que l'on saisit à modifié qui sont affichées, donc les valeurs sont bel et bien récupérées.

Modifié par Bridou

Partager ce message


Lien à poster
Partager sur d’autres sites
Si c'était un problème de syntaxe rien ne serait touché sur la BDD, il ne se passerait rien, et l'affichage des erreurs pourrait renvoyer l'erreur de MySQL... Or, la ligne modifiée est vidée de son contenu et le script ne renvoie aucune erreur, tout est bien, il est content du résultat le script...

D'ailleurs, il n'y a que lui qui est content de se résultat ^_^

Ce soir, je lui fais ca peau :D

@Bridou : Mets GET au lieu de POST et tu verras que cela fonctionne. Reste à savoir pourquoi :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Ma foi si ca marche je vais essayer cette solution, peu m'importe la technique en fait du moment que ca fonctionne.

Merci beaucoup, je m'en vais tester le GET de ce click...

Partager ce message


Lien à poster
Partager sur d’autres sites

Je n'ai pas du bien comprendre pour le GET ;)

Je remplace POST par GET, où ?

Si je le fait dans le formulaire ca ne marche pas quand je met valider.

Les variables sont bien passées dans l'url mais je perd les informations de session et rubrique.

Au lieu d'avoir :

page.php?session=xxxxxx&rubrique=news&titre=yyyy&auteur=zzzz

J'obtiens :

page.php?titre=yyyy&auteur=zzzz

Donc je suis délogguer de l'administration car perte de la session dans l'url...

Qu'ais-je encore fais de mal ? :boude:

Partager ce message


Lien à poster
Partager sur d’autres sites

Ouaip car au lieu de faire

<form action="page.php?session=<?=$session?>...."

mets tous ces champs en hidden :)

Mais sinon, tu as été déloggé de l'admin mais vérifie si dans la base, cela a fonctionné...

Un McDo que oui :P

++

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon ben je t'achète un Happy Meal si tu veux :D

Effectivement j'ai fait plusieurs test et ca à l'air de fonctionner via cette technique, donc je vais mettre à jour mes fichiers avec cette solution pour le moment.

Ca doit faire la 251,5 ème fois, mais encore Merci :P

Partager ce message


Lien à poster
Partager sur d’autres sites

Moui mais je boycotterai ton site tant que tu n'auras pas trouvé le problème avec les POST... D'abord, non mais ho !

C'est trop facile de changer la méthode pour arriver à ses fins lool

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est la roue de secours usée avant d'acheter une nouvelle roue toute neuve :D

Je prefere mettre cette solution en place pour "mon staff" qu'ils puissent bosser sans soucis et contiuer a chercher par la suite.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon maintenant le soucis est que un article est composé de texte, que ce texte peut faire plus de 256 octets, et que donc par la method GET et bien ca ne fonctionne pas correctement, le contenu de l'article est coupé.

Arghhhh :fou::fou:

Modifié par Bridou

Partager ce message


Lien à poster
Partager sur d’autres sites

Lol ^_^

Faut pas prendre le get comme solution. C'était juste pour montrer le pb du $_POST :)

On va y arriver... enfin j'espère :fete:

Modifié par portekoi

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne vois quand même pas pourquoi le POST fait planter car autant avec le GET qu'avec le POST on affecte ces variables à d'autre variables :

$auteur = $_POST["auteur"]

ou

$auteur = $_GET["auteur"]

Et ensuite on utilise $auteur dans la requête, donc à ce moment donné le POST ou GET n'ont plus de role a jouer, c'est ca qui est dur à comprendre...

Modifié par Bridou

Partager ce message


Lien à poster
Partager sur d’autres sites

A priori "j'ai" trouvé !

Suite à ta remaque des champs HIDDEN, j'ai testé cette solution tout en gardant la méthode POST et cela fonctionne l'édition ne plante plus.

Je vais encore faire des tests mais je pense qu'on tient le bon bout ! :wub:

Modifié par Bridou

Partager ce message


Lien à poster
Partager sur d’autres sites

Hum.... j'ai pas creusé par là hier mais je n'utilise que les champs hidden pour ma part....

Met tout à plat pour voir :)

++

PS : Pour moi, ce sera un Golden Menu, Frites +Coca avec une boite de 4 et un sunday chocolat. Sur place biensur ^_^

Et Je suis sur Saint Lazare :D:P

Modifié par portekoi

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×