UPDATE mysql ===> champs vide non voulus

WRInaute impliqué
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:
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:
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.
....
....
....
....
....................................
oiseau-manga.jpg

: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
 
WRInaute passionné
commence ta page par :
Code:
ini_set('display_errors', true);
error_reporting(E_ALL);

Tu verras si tu as une petite couille.
Et échappe tes variables correctement :
Code:
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:
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"
 
WRInaute impliqué
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 )
 
WRInaute passionné
ça donne bien ce que tu veux un :
Code:
echo '<pre>';
print_r($_POST);
echo '</pre>';
Peut-être une var définie deux fois
 
WRInaute impliqué
Julia41 a dit:
ça donne bien ce que tu veux un :
Code:
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:
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:
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.
 
WRInaute passionné
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" ;)
 
WRInaute impliqué
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:
$variable="pierre";
mysql_query("UPDATE portable SET prenom='$variable' where id='1234'") or die ('Erreur : '.mysql_error());

Ceci fonctionne.


Code:
$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....
 
WRInaute passionné
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à ^^
 
Discussions similaires
Haut