UPDATE mysql ===> champs vide non voulus

Stellvia
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 451
Inscription: 28 Déc 2004

UPDATE mysql ===> champs vide non voulus

Message le Sam Déc 26, 2009 12:24

Helo...

Bon je précise tout de suite que mon problème est très très bisard.... limite je me demande si mon pc est pas possédé par un démon :mrgreen: parce que franchement c'est du grand n'importe quoi.

Suite à un formulaire je fait un update :

Code: Tout sélectionner
mysql_query("UPDATE portable SET num='$numero' where id='$id'") or die ('Erreur : '.mysql_error());


Le champs num est alors vidé.
Donc j'ai fait un echo de ma requete et la variable num est bien attribué :

Code: Tout sélectionner
mysql_query("UPDATE portable SET num='06865432XX' where id='7635'") or die ('Erreur : '.mysql_error());


De plus si je copie la requete dans phpmyadmin cela fonctionne.

Alors maintenant j'ai encore plus bisard, êtes-vous assis ?



Si je fait un F5 sur la page ( donc avec les variable post encore dans le navigateur qui me demande si je veux renvoyer les infos ) , CELA FONCTIONNE.

L'update vide mes champs la premère fois, et les remplis correctement avec un F5.
....
....
....
....
....................................
Image
:oops: :roll:


Ca fait 5 h que je bloque la dessus, j'ai tout essayé, limite j'ai envie de me reconvertir en jardinier tellement je suis blasé. Mon problème est tout simplement INCOMPREHENSIBLE, j'ai jamais vu ca....



PS : MySQL: 5.0.44


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: UPDATE mysql ===> champs vide non voulus

Message le Sam Déc 26, 2009 14:26

commence ta page par :
Code: Tout sélectionner
ini_set('display_errors', true);
error_reporting(E_ALL);


Tu verras si tu as une petite couille.
Et échappe tes variables correctement :
Code: Tout sélectionner
mysql_query("UPDATE portable SET num='$numero' where id='$id'") or die ('Erreur : '.mysql_error());

devrait être (même si id doit être un entier)
Code: Tout sélectionner
mysql_query("UPDATE portable SET num='" . mysql_real_escape_string($numero) . "' where id='" . mysql_real_escape_string($id) . ";'") or die ('Erreur : '.mysql_error());


Le rajout du ";" n'est pas obligatoire mais ça reste plus "propre"

Stellvia
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 451
Inscription: 28 Déc 2004

Re: UPDATE mysql ===> champs vide non voulus

Message le Sam Déc 26, 2009 16:31

Merci d'essayer de m'aider.

Alors j'ai rajouter le code pour les erreurs je n'ai aucune sortie, aucune erreurs. ( meme pas de Notice )
De ce coté ca a l'air d'aller.

J'utilise déja mysql_real_escape_string mais je l'avais enlever ici dans un soucis de simplicité ( a noter que dans les 2 cas c'est le meme problème )

Il faut :

- soit faire un F5 pour que l'update fonctionne
- soit refaire une seconde fois un update ( on retourne sur le formulaire, on repost, et ca marche )

Pour avoir a nouveau le bug je suis obligé à chaque fois d'effacer la ligne dans mysql et d'en recrée une nouvelle, car l'update ne fonctionne pas uniquement la premiere fois, apres c'est bon.
C'est complétement invraisemblable.


Ta derniere ligne avec le ; sumplémentaire ne fonctionne pas chez moi ( il n'y a même pas d'erreur d'ailleurs... ca ne change rien, ca ne vide pas le champs non plus )


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: UPDATE mysql ===> champs vide non voulus

Message le Sam Déc 26, 2009 16:47

ça donne bien ce que tu veux un :
Code: Tout sélectionner
echo '<pre>';
print_r($_POST);
echo '</pre>';

Peut-être une var définie deux fois

Stellvia
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 451
Inscription: 28 Déc 2004

Re: UPDATE mysql ===> champs vide non voulus

Message le Sam Déc 26, 2009 18:03

Julia41 a écrit:ça donne bien ce que tu veux un :
Code: Tout sélectionner
echo '<pre>';
print_r($_POST);
echo '</pre>';

Peut-être une var définie deux fois


Oui, je sais que ca semble fou...
Je viens de tester à l'instant ca :

Code: Tout sélectionner
mysql_query("UPDATE portable SET num='$numero' where id='$id'") or die ('Erreur : '.mysql_error());
echo "UPDATE portable SET num='$numero' where id='$id";


L'update mets du vide et ca m'affiche :
UPDATE portable SET num='123456789' where id='1234'
Même topo je fait F5 et ca marche comme par miracle.

Maintenant je change mon code et je mets le mysql query en dur sans variable comme ceci :
Code: Tout sélectionner
mysql_query("UPDATE portable SET num='123456789' where id='1234'") or die ('Erreur : '.mysql_error());


Ceci fonctionne très bien. ( l'update est fait du premier coup )
Comment un truc pareil est possible........ limite il faut appeller mulder et scully la non ?

Ca me dépasse. Je peux pas lutter contre un bug pareil.


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8583
Inscription: 23 Nov 2005

Re: UPDATE mysql ===> champs vide non voulus

Message le Sam Déc 26, 2009 18:06

Et le test que te propose Julia41, tu as testé ? Ca donne quoi ?


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: UPDATE mysql ===> champs vide non voulus

Message le Sam Déc 26, 2009 18:20

A mon avis c'est une variable définie 2 fois par exemple
ta_page.php?id=10
avec un register_global à ON ça peut faire couiller.

Je donne des idées en vrac sans plus de détails mais bon.

Tente sinon un simple :
[code]mysql_query("UPDATE portable SET num='" . intval($_POST["numero"]) . "' where id='" . intval($_POST["id"]) . ";")|/code]

Ne connaissans pas trop tes variables peut-être qu'il y a un souchis tout simple. Mais les bugs fantômes sont généralement des bugs "tout bêtes" ;)

Stellvia
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 451
Inscription: 28 Déc 2004

Re: UPDATE mysql ===> champs vide non voulus

Message le Dim Déc 27, 2009 0:16

Register global est a off, mais l'idée etait pertinente j'ai quand meme été vérifié dans le php.ini, et dans php_info, je confime que register global est a off.

echo '<pre>';
print_r($_POST);
echo '</pre>';

m'affiche les bonne variable.

La mon exemple c'est pour des chiffres mais avec du texte c'est pareil :

Code: Tout sélectionner
$variable="pierre";
mysql_query("UPDATE portable SET prenom='$variable' where id='1234'") or die ('Erreur : '.mysql_error());


Ceci fonctionne.


Code: Tout sélectionner
$variable=$_POST['variable'];
echo "ma variable est $variable";
mysql_query("UPDATE portable SET prenom='$variable' where id='1234'") or die ('Erreur : '.mysql_error());


Ca marche pas et ca affiche :
ma variable est pierre



Mais bon j'avance , j'ai changé mon formulaire en GET, et maintenant , apres avoir changer mes $_POST['variable'] en $_GET['variable'] ca fonctionne.

Par contre j'ai absolument pas compris pourquoi POST ne marchais pas surtout quand le echo affiche la même chose..... je vous remercie quand meme d'avoir essayé de m'aider, ca m'a soutenus au moins dans ma démarche, cette connerie m'a tenu en haleine toute la journée....


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: UPDATE mysql ===> champs vide non voulus

Message le Dim Déc 27, 2009 14:18

Aucune idée de cet éventuel problème, tu as peut-être un unset quelque part. J'avais eu le même genre d'erreur une fois, en changeant le nom des variables il était parti mais je ne suis même pas sûr que ça venait de là ^^


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités