Bug avec MySQL -> update les champs à vide

Nouveau WRInaute
Bonsoir à tous.
J'ai le problème suivant en tantant un Update dans ma base MySQL :

1) Je récupère et je formate mes variables POST :

Code:
$id_journal = $_POST['id_journal'];
$jouri = $_POST['jour_i'];
	$moisi = $_POST['mois_i'];
	$anneei = $_POST['annee_i'];
	
	$heure = $_POST['heure_i'];
	$poids = $_POST['poids_i'];
	$poids = str_replace(",", '.', $poids);
	$poids = round($poids,2);
	
	$tour_taille = $_POST['tour_taille'];
	$tour_taille = str_replace(",", '.', $tour_taille);
	$tour_taille = round($tour_taille,2);

$nivalim = $_POST['nivalim'];
	$txtalim = $_POST['txtalim'];
	$txtalim = str_replace("\n", '<br>', $txtalim);
	$nivsport = $_POST['nivsport'];
	$txtsport = $_POST['txtsport'];
	$txtsport = str_replace("\n", '<br>', $txtsport);
	$nivmood = $_POST['nivmood'];	
	$txtjournal = $_POST['txtjournal'];
	$txtjournal = str_replace("\n", '<br>', $txtjournal);

2) Je fais l'update dans la base comme ceci :


Code:
$sql = "UPDATE journal SET `date`='$anneei-$moisi-$jouri',`heure`='$heure',`poids`='$poids',`tour_taille` = $tour_taille,
				`alim_mood`='$nivalim',`alim_com`='$txtalim',`act_mood`='$nivsport',`act_com`='$txtsport',`humeur`='$nivmood',`journal`='$txtjournal' WHERE `id`='$idJournal'";
		
$resultat = mysql_query($sql);

Résultat :
J'obtiens une mise à 0 de tous les champs

Pourtant quand je fais un echo de mon $sql, j'obtiens bien des valeurs correctes.

Je précise deplus, qu'en local tout marche impecablement, mais sur mon serveur de prod, toutes les variables sont mises à 0

Pour courroner le tout, quand j ecopie colle l'echo de$sql dans le PHPmYAdmin distant, tout marche bien, l'update se fait correctement.

Si quelqu'un a une idée du problème, je lui en serai vraiment reconnaissant :)

Merci d'avance
 
Nouveau WRInaute
Merci pour l'astuce, mais ca ne change rien.
J'ai même remarqué quelquechose d'encore plus étrange :
Quand je fais l'update, la première fois tous les champs sont donc mis à 0, mais si j'effectue un rechargement de la page (avec les données POST) La la modif s'effectue sans problème !!

Se peut-il qu'il y ai un problème avec Apache ou MySQL ? Je remarque d'ailleurs des lenteurs sur le site.
 
Nouveau WRInaute
La j'avoue mon ignorance, faire emerger un sql error c'est equivament d'un " or die(mysqlerror()) " ? si oui , c'est le cas, et je n'ai aucune erreur. si ce n'est pas ca qui fait emerger un mysql error comment dois-je faire ?

Et oui , j'ai exécuté manuellement l'echo du sql dans PHPMYAdmin et là ca marche. MAis comme je le disais, si ke recharge la page avec les variables POST toujours en mémoire, l'UPDATE se fait correctement.
 
WRInaute occasionnel
a priori, tes variables prennent bien la valeur que tu leur assignes... puisque ça te retourne la requête avec les bonnes valeurs...

et quand tu fais un echo sur $resultat ça affiche 1?

tu as envoyé la requête avec des valeurs fixes (je veux dire sans variable)?

si oui, tu as essayé de passer directement les variables du post directement dans la requête? (tu peux faire " . str_replace("\n", '<br>', $_POST['txtjournal']) . " à la place de passer par $txtjournal)

toutes les valeurs sont mises à 0? ou seulement tour_taille, $nivalim, $txtalim, $nivsport, $txtsport, $nivmood et $txtjournal?
 
Nouveau WRInaute
Toutes champs jouant dans l'UPDATE sont soir mis à
0000-00-00 pour la date
00:00:00 pour l'heure,
0 pour les entiers
RIEN pour les chaines
Les autres champs qui ont pourtant une valeur mais qui n'entrent pas dans l'UPDATE gardent leurs valeurs.

Je n'ai aps encore essayé ceci :

t quand tu fais un echo sur $resultat ça affiche 1?

tu as envoyé la requête avec des valeurs fixes (je veux dire sans variable)?

si oui, tu as essayé de passer directement les variables du post directement dans la requête? (tu peux faire " . str_replace("\n", '<br>', $_POST['txtjournal']) . " à la place de passer par $txtjournal)

Je le fais et te tiens au courant

Merci
 
Nouveau WRInaute
Alors, voici résumé les faits (attention, c'est bizzare) :

- un echo pour le résultat affiche 1
- Quand je passe des valeurs fixes ca marche

MAIS tres bizarre :
je fais l'update, puis tout de suite apres, je fait une requete sur le poids par exemple et ca affiche le poids correct voulu par l'update.

Cependant, quand je regarde dans PHP MyAdmin, les fameux champs sont à 0.

Un exemple de output :

Code:
UPDATE journal SET `date` = "2007-09-19", heure = "12:52", poids = "70", tour_taille = "100", alim_mood = "1", alim_com = "", act_mood = "", act_com = "TEST", humeur = "3", journal = "TEST" WHERE id = "21519"

Avec cet update, j'ai un echo résultat à 1

puis je fais :

Code:
SELECT poids FROM journal WHERE id = 21519

et là j'obtiens bien 70, comme demandé dans l'UPDATE

Cependant, je vais voir apres dans PHP MyAdmin, et les valeurs sont à

21519 0000-00-00 00:00:00 850 0 0 0 0 0 0 0

la date a été mise à 0, l'heure aussi et le poids aussi (Les autres étaient à 0 par défaut dans cet exemple)

Puis quand je change de page et que je fais une requete pour obtenis le dernier poids par exemple, il est à 0.

Je précise qu'en local su mon portable tout marche bien.

Sur le serveur distant dédié OVH c'est la que ca foire.

Voila qui est bizarre, tout de suite après l'UPDATE, je fais un SELECT et j'ai la veleur voulue, et quand je vérifie apres, les champs sont à 0.

Merci :D

PS, voici le code de création de la table journal :

Code:
CREATE TABLE journal (
  id int(10) NOT NULL auto_increment,
  date date default NULL,
  heure time default NULL,
  client varchar(11) default NULL,
  poids double default NULL,
  tour_taille double default NULL,
  alim_mood char(1) default NULL,
  alim_com text,
  act_mood char(1) default NULL,
  act_com text,
  humeur char(1) default NULL,
  journal text,
  total_calories double default NULL,
  total_proteines double default NULL,
  total_lipides double default NULL,
  total_glucides double default NULL,
  total_fruits_legumes double default NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;
 
WRInaute occasionnel
dans un premier lieu, change date en date_qqch car date est un mot réservé...

il n'y a plus aucun contact avec la base de données dans le reste du script? Je trouve cela super bizarre...
 
Nouveau WRInaute
Justement :? Je cherche depuis des heures, et il n'y a pourtant plus aucun contact avec l abase de données ailleurs.

D'autant plus que ca ne peut pas être un éventuel autre contact avec l abase pour les raisons suivantes :
1) En local ca marche bien
2) avec de svaleurs entrées en "Dur" ca marche bien
3) Quand je fais un Reload de la page ca annule la mise à 0 précédente et la ca marche nickel.

J'ai jamais vu ca
8O

Help :!: et merci pour ton aide erestrebian :idea:
 
Nouveau WRInaute
Salut Rog,

Est ce que tu veux dire que le navigateur aurait du mal avec les variables POST ?

Je pensais que ca n'avait pas d'incidences, mais je précise que j'ai changé l'adresse URL de la page qui effectue ce traitement.

Comment faire pour tester si il s'agit bien d'un problème de cahce du navigateur ?

PS, J'ai effacé mes traces dans Firefox (sessions d'authentifications, cookies, cache) , le problème reste le même.

J'ai l'impression que le problème arrive aussi aux autres internautes qui visitent mon site et qui tentent une modification de leur journal.

Et pour être sur que ca ne soit pas un autre contact avec la base apres, j'ai couper tout le code qui suit l'update., rien à faire, toujours la même chose.
 
WRInaute passionné
mais il est possible que le cache t'empeche de voir la modif dans phpmyadmin

c'est surtout cette page que tu devrais actualiser

rog
 
WRInaute occasionnel
t'as les même versions de mysql en local et sur le serveur

sur mon dédié j'ai Version du client MySQL: 5.0.32

peut-être qu'en local il est plus permissif... t'as changé le nom date en date_qqch?

est-ce que ça marche sans mettre à jour certains champs?
 
Nouveau WRInaute
Merci pour vos contributions.

Apres vérifications, le problème ne viens pas de PHPmyAdmin.

Je n'ai en effet pas la même version de Apache ni de MySQL en local et en distant. Je n'ai pas pu changer le non daate en date_qqch, car le nombre de fichiers faisant appel à ce champ est elevé et je ne les ai pas tous programmés moi même.

Par contre je pense avoir "cibler" le problème. Je pense qu'il vient des variables POST.

Quand je mets certains champs en dur comme la date dans la requête comme la date ou le poids, ces champs sont bien modifiés mais les autres mis à 0.

Je ne comprends pas comment cela peut se faire puisque l'echo de mon $sql est correct 8O

J'ai même essayé de mettre directement le $_POST['machin'] dans la requette, mais même problème.

Help :wink:
 
Nouveau WRInaute
Alors voila, mysterieusement le problème est réglé......

J'explique ce que j'ai fait.

J'utilise Joomla.

J'ai désactivé dans l'admin de Joomla, tout ce qui était lié à l'ancienne URL de cette page (articles, modules liens). Je précise cependant que Ma nouvelle URL n'avait RIEN à voire avec la nouvelle.

D'un coup je vois que :

1) le site ne rame plus
2) les updates se font bien.

C'est à n'y rien comprendre.

L'impression que j'ai eue en tout cas (ce n'est qu'une impression), c'est que soit Apache soit MySQL ramaient avec un module de Joomla (OpenSEFx)
et que les updates dans la base s'emmelaient les pinceaux quand il y avait des variables POST.

Le site et les acces FTP avaient tendance à ramer depuis mon changement d'URL. Maintenant c'est OK.

J'avoue que c'est le plus grand mystère qu'il m'a été donné de voir depuis que je programme. A ma conniassance, un bug faisait qu'un traitement donné ne marche jamais. C'est la première fois que je vois un code s'exécuter de temps en temps correctement alors que les outputs sont bons. Pour ca que je crois que c'est au niveau d'Apache ou de MySQL qu'il y a eu une compliquation.

C'est déjà arrivé à quelqu'un ce genre d'embrouilles
:?: :?

En tout cas merci sincèrement à vous deux qui avaient consacré du temps à m'aider :D
 
Discussions similaires
Haut