Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1614 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Variable invisible pour requête sql !?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Variable invisible pour requête sql !?

n°1363229
yopuke
Posté le 10-05-2006 à 13:31:14  profilanswer
 

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
mood
Publicité
Posté le 10-05-2006 à 13:31:14  profilanswer
 

n°1363247
Djebel1
Nul professionnel
Posté le 10-05-2006 à 13:43:05  profilanswer
 

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.

n°1363269
yopuke
Posté le 10-05-2006 à 13:56:35  profilanswer
 

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...

n°1363285
sielfried
Posté le 10-05-2006 à 14:03:19  profilanswer
 

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
n°1363317
yopuke
Posté le 10-05-2006 à 14:19:28  profilanswer
 

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

n°1363324
Djebel1
Nul professionnel
Posté le 10-05-2006 à 14:22:38  profilanswer
 

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
n°1363325
sielfried
Posté le 10-05-2006 à 14:22:43  profilanswer
 

Et ton echo t'affiche quoi ?...


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1363332
yopuke
Posté le 10-05-2006 à 14:27:35  profilanswer
 

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

n°1363338
sielfried
Posté le 10-05-2006 à 14:30:53  profilanswer
 

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


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1363348
yopuke
Posté le 10-05-2006 à 14:36:50  profilanswer
 

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:

mood
Publicité
Posté le 10-05-2006 à 14:36:50  profilanswer
 

n°1363349
yopuke
Posté le 10-05-2006 à 14:37:43  profilanswer
 

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 !

n°1363362
Djebel1
Nul professionnel
Posté le 10-05-2006 à 14:45:05  profilanswer
 

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)

n°1363366
yopuke
Posté le 10-05-2006 à 14:46:40  profilanswer
 

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 ?

n°1363440
Djebel1
Nul professionnel
Posté le 10-05-2006 à 15:35:04  profilanswer
 

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.

n°1363465
yopuke
Posté le 10-05-2006 à 15:57:53  profilanswer
 

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;


n°1363471
Djebel1
Nul professionnel
Posté le 10-05-2006 à 16:01:56  profilanswer
 

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

n°1363510
yopuke
Posté le 10-05-2006 à 16:15:00  profilanswer
 

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:

n°1363553
Djebel1
Nul professionnel
Posté le 10-05-2006 à 16:31:22  profilanswer
 

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.

n°1363566
yopuke
Posté le 10-05-2006 à 16:40:26  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Variable invisible pour requête sql !?

 

Sujets relatifs
requete php/mysqlSéparer un resultat de requete sur 3 colonnes egales
[PAMC9.5] créer une variable externe[PHP] Pb de naviguation entre resultat d'une requete
[Résolu]Comment changer un nom de variable[PL/SQL]Variable de Session
PRO*C : passage de parametres dans une requete[VB6] variable prend mauvaise valeur
ComboBox et requète paramétréeRécuperer une ligne d'un fichier texte dans une variable
Plus de sujets relatifs à : Variable invisible pour requête sql !?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR