Variable invisible pour requête sql !?

Variable invisible pour requête sql !? - PHP - Programmation

Marsh Posté le 10-05-2006 à 13:31:14    

Bonjour,
J'ai un problème bien curieux; je récupére des variables de sessions qui existent bien, puisque elles s'affichent avec un echo() mais par contre lorsque je les insére dans une requête sql, elles sont nulles !   :??:  
Au début de mon script :

Code :
  1. session_start();
  2. $identifiant = $_SESSION['login'];


et un peu plus loin :

Code :
  1. $req = "UPDATE tbl_user SET Nom = '$identifiant' WHERE identifiant = 'azerty' LIMIT 1";


La requête fonctionne mais le champ reste vide !
A contrario si je déclare une variable bidon

Code :
  1. $variablebidon = "Roger";


Le champ est remplis
Un echo($req) me renvois bien mes données :
UPDATE tbl_user SET Nom = 'Login' WHERE identifiant = 'azerty' LIMIT 1
 
C'est à n'y plus rien comprendre...  :fou:  
Mon code "complet", du moins simplifié au maximum pour isoler l'erreur :

Code :
  1. <?php
  2. session_start();
  3. $identifiant = $_SESSION['login'];
  4. $variablebidon = "Roger";
  5. //require 'prive/verifconnexion.php';
  6. require_once('prive/db.inc.php');
  7. //
  8. ConnectdB();
  9.         $req = "UPDATE tbl_user SET Nom = '$identifiant' WHERE identifiant = 'azerty'";
  10.         $ret = mysql_query ($req) or die (mysql_error ());
  11.         echo($req);
  12.         return true;
  13.         mysql_close();
  14. ?>


Un détail qui a son importance; si j'execute le script deux fois de suite, alors la variable est prise en compte !?
Première éxécution : champ vide
Deuxième exécution : champ remplis avec la valeur de $identifiant
 
Je ne sais plus trop quoi faire là ...  :cry:  
D'avance merci pour votre aide


Message édité par yopuke le 10-05-2006 à 13:37:20
Reply

Marsh Posté le 10-05-2006 à 13:31:14   

Reply

Marsh Posté le 10-05-2006 à 13:43:05    

je parie que tu attribues $_SESSION['login'] à la fin du script. Donc :  
- à la première exécution, il y a pas de variable de session, et donc $identifiant est vide
- à la deuxième exécution, tu as remplie la variable de session et donc $identifiant contient une valeur
 
C'est facilement vérifiable en mettant "error_reporting" sur E_ALL dans le php.ini : tu auras un message d'erreur si tu utilises une variable non-définie. Et tu auras cette erreur à la première exécution de ton script.

Reply

Marsh Posté le 10-05-2006 à 13:56:35    

Heu non, puisque mes variables de sessions sont créées dans un autre script qui appelle celui là une fois qu'il a finis son execution, et donc qu'il a remplis toute les variables de session; de plus si je fait un echo() il me renvoie bien mes valeurs. Pour le php.ini ca va être difficilement fesable étant hébergé chez online...

Reply

Marsh Posté le 10-05-2006 à 14:03:19    

Rajoute un error_reporting(E_ALL | E_STRICT) en haut de ton script, ensuite exécute-le (en laissent le echo $req) et colle ici ce que tu obtiens.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 10-05-2006 à 14:19:28    

Je n'obtient que le retour du echo($req)
En placant error_reporting(E_ALL | E_STRICT) avant ou aprés le session_start() c'est pareil ca ne renvoi rien

Reply

Marsh Posté le 10-05-2006 à 14:22:38    

juste après le session_start(), si tu fais un echo $_SESSION['login'];
tu obtiens une valeur dès la première exécution du script ?  :??:
 
Bah dans ce cas, au cours de ton script $identifiant est réutilisé, ou supprimé.
Il peut pas y avoir 36 solutions :  
- soit $identifiant ne contient jamais rien a aucun moment du script
- soit $identifiant contient une valeur au début du script et pas à la fin : ton code l'a donc modifié.


Message édité par Djebel1 le 10-05-2006 à 14:24:59
Reply

Marsh Posté le 10-05-2006 à 14:22:43    

Et ton echo t'affiche quoi ?...


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 10-05-2006 à 14:27:35    

Comme dis dans le premier post :
UPDATE tbl_user SET Nom = 'Login' WHERE identifiant = 'azerty'

Reply

Marsh Posté le 10-05-2006 à 14:30:53    

Bon, ben c'est donc forcément la requête qui est effectuée. :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 10-05-2006 à 14:36:50    

Oui ça fonctionne effectivement mais parceque c'est le retour aprés l'avoir lancé une deuxième fois, la première fois l'update n'est pas effectuée.
je ne peut pas avoir un retour de echo la première fois car c'est un swf qui appelle un php pour créer la session, une fois la session créée et les variables enregistrées dans une table sql le flash appelle un deuxième php (donc celui en cause) qui uploade une image directement dans la bdd depuis flash.
J'ai fait des echo() à gogo php reçoit bien toutes les varaibles envoyés par flash, donc celui-ci est hors de cause, c'est bien au moment ou je veux modifier le contenu de la table (à savoir enregistrer l'image) que ca déconne.
Ca déconne simplement car cette **** de variable de session est vide aux yeux de la bdd. Heu j'éspére avoir été clair ?  :pt1cable:

Reply

Marsh Posté le 10-05-2006 à 14:36:50   

Reply

Marsh Posté le 10-05-2006 à 14:37:43    

Le premier appel du script c'est flash qui le fait, une fois exécuté je peut voir dans la bdd si la requête update a bien été faite (en l'occurence : non)
Le deuxième appel c'est moi qui le fait "à la main" et là tout fonctionne.
 
Mais le problème ne vient pas de flash puisque lors du premier appel du script la requête sql est bien éxécutée car le champ "Nom" est vide cad la variable de session semble "vide".
Au deuxième appel du script la requête sql est bien éxécutée car le champ "Nom" est remplis avec la valeur de la variable de session !

Reply

Marsh Posté le 10-05-2006 à 14:45:05    

donc en gros, la variable de session est vide à la première exécution du script, c'est bien ça ? (comme on te l'a déjà demandé :p)

Reply

Marsh Posté le 10-05-2006 à 14:46:40    

Oui voilà tout à fait ! et hop comme par magie à la deuxième éxécution du script elle n'est plus vide !
Y'aurais t-il un temps de latence lors de la creation d'une session et de ses variables ?

Reply

Marsh Posté le 10-05-2006 à 15:35:04    

absolument pas.  
Donc à priori : ton premier script récupérant les variables par un formulaire en flash et les mettant en session déconne.
 
Durant la première exécution du script, $_SESSION['login'] est remplie à un moment où à un autre, fouille bien dans ton code :p
et donc ça marche à la deuxième exécution.

Reply

Marsh Posté le 10-05-2006 à 15:57:53    

Oui c'est aussi ce que j'ai pensé mais pourtant je créée correctement ma session, du moins il me semble :
 
Premières lignes

Code :
  1. <? session_start();
  2. header("Cache-Control: no-store, no-cache, must-revalidate" );
  3. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
  4. header("Cache-Control: post-check=0, pre-check=0",false);
  5. header("Pragma: no-cache" );
  6. //  
  7. $lognew = $_POST['lognew'];


....

Code :
  1. $_SESSION['login'] = $lognew;


Reply

Marsh Posté le 10-05-2006 à 16:01:56    

$_POST['lognew'] contient qqch ?
Quand tu affectes $_SESSION['login'], $lognew n'a pas été remodifiée entre temps ?

Reply

Marsh Posté le 10-05-2006 à 16:15:00    

Oui $_POST['lognew'] contient bien quelquechose puisqu'il est inséré dans la bdd, et tout de suite aprés la requête sql il y a $_SESSION['login'] = $lognew, donc il n'est pas modifié.
Nan mais c'est une erreur bizarre, je ne m'en sort pas.  :pt1cable:  :pt1cable:

Reply

Marsh Posté le 10-05-2006 à 16:31:22    

vérifie que tu as pas modifié $lognew entre  
lognew = $_POST['lognew'];
et
$_SESSION['login'] = $lognew;
Parce que là à part ça je vois pas.
 
Aussi regarde si à la fin de la première exécution du script (donc quand ça marche pas), vérifie si à la toute toute fin du script $_SESSION['login'] est affecté. S'il ne l'est pas au début mais qu'il l'est à la fin, tu l'as affecté au cours du script, ça pourrait être intéressant de voir ce que tu y fais.

Reply

Marsh Posté le 10-05-2006 à 16:40:26    

Non c'est sur et certain que $lognew n'est pas modifié, mais je vais mettre le flash de côté et réécrire le tout en php pour pouvoir suivre le déroulement du script de façon plus transparent, une fois que ca marchera je repasserais tout en flash bc là c'est plus qu'une simple affectation de variables.
Merci de ton aide

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed