IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème de création de variable session


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 1
    Points
    1
    Par défaut Problème de création de variable session
    Bonjour,

    Je suis actuellement bloqué sur un problème avec mes sessions et malgré mes recherches un peu partout sur le net, tutos et faq, je ne comprend pas d'où vient mon erreur.

    J'ai deux fichiers :

    depos_form.php qui permet de renseigner un formulaire et de le transmettre.
    insert_form.php qui insère en base de données ce qui a été saisie dans le formulaire.

    Bout de code de depos_form.php (partie qui nous intéresse, j'ai enlevé le reste pour ne pas avoir un post trop long) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    session_start();
    include( "includes/header.html" );
    include( "includes/menu.php" );
    if(isset($_SESSION['InsertOk']) && $_SESSION['InsertOk'] == 'ok')
    {
    echo "<div id='return_insert'><p>Les donn&eacutes;es saisies ont bien &eacute;t&eacute;es enregistr&eacute;es</p></div>";
    }
    echo '<div id="conteneur_form">
    <form id="depositaire_form" action="include/insert_form.php" method="post">
    .....
    </form>
    </div>';
    Bout de code de insert_form.php (pareil j'ai coupé le code qui ne concerne pas notre sujet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
    session_start();
     
    function ControlSaisie($aValue){
    //code de contrôle de saisie
    }
     
    ....
     
    $bControle = ControlSaisie($aFormValue);
     
    if($bControle){
    //préparation de la requête et insert
    if($bInsert){
    $_SESSION['InsertOk'] = 'ok';
    }
    else{
    $_SESSION['InsertOk'] = 'ko';
    }
    }
    header('chemin vers depos_form.php');

    Le problème vient que lorsque je fais ma première validation, si le formulaire est bien rempli alors :
    - insertion en base de données OK
    - Création de ma variable session OK (j'ai placé un die($_SESSION['InsertOK']) juste après et elle existait bien.
    - redirection vers depos_form.php OK
    - rentre dans la condition pour afficher la div "return_insert" KO. (j'ai fait un echo de $_SESSION['InsertOK'] et j'ai eu un retour vide).

    Ce que je ne comprend pas c'est qu'en validant une deuxième fois, là j'ai bien toutes les étapes :
    - insertion BDD
    - création de variable session
    - redirection
    - affichage de la div


    Si quelqu'un a une idée de comment résoudre le problème ou juste me dire ce que je n'ai pas bien compris ce serait super sympa.

    Merci d'avance.

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    C'est que au premier tour le if($bControle) est à faux

    Tu peux donner cette fonction ?
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    La fonction n'est pas encore implémentée elle me retourne toujours true.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function ControlSaisie($aValue){
    //code de contrôle de saisie
    // Faire appel à une fonction JS et controle de regex PHP en cas de désactivation JS
     
    return true;
     
    }
    Au pire, si la fonction était implémenter je contrôlais le return de ma fonction avant de faire l'insert, et au premier passage l'insert a bien lieu.

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Ajoutes des var_dump et des echo dans les conditions genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if($bInsert){
    echo 'ici';
    $_SESSION['InsertOk'] = 'ok';
    }
    else{
    echo 'est Ici';
    $_SESSION['InsertOk'] = 'ko';
    }
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Comme c'est une page de traitement j'ai mis un die à la place, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if($bInsert){
    die('ici');
    $_SESSION['InsertOk'] = 'ok';
    }
    else{
    die('est Ici');
    $_SESSION['InsertOk'] = 'ko';
    }
    Au premier passage, j'ai ceci :

    ici

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Attention: die est un alias de la fonction exit, dans tous les cas ce n'est pas à utiliser dans les phases de prod ...

    Sinon, à part qu'avec le die tu auras pas $_Session initialisé (et on s'en fou d'ailleurs ), blague à part $_SESSION est bonne et est bien initialisée donc rien de ce côté là.

    les session_start sont bon, juste la ligne 1 à virer car jamais d'espaces en début de fichier avant un <?php

    Regardes sur session telle que:
    Si une session n'arrive pas à démarrer, alors FALSE est retourné. Précédemment TRUE était retourné.
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Il n'y a pas d'espace dans mon code à la ligne 1, j'ai sans doute du le créer dans le poste en recopiant le code.

    Je ne comprend pas ce que tu veux dire à ta dernière phrase.
    Il faut que je fasse quoi ?

    Merci pour ton aide

  8. #8
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bein vu le code que tu as fournit, je ne vois que ça (testes le session_start() à false).
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Elle me retourne bien true...

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $bTest=session_start();
    var_dump($bTest);
    A l'ouverture du formulaire, j'ai :
    A la première validation :
    A la deuxième :
    J'ai aussi fait un var_dump de $_SESSION, à l'ouverture j'ai toutes mes variables sauf la InsertOk jusqu'à la deuxième validation où elle apparaît...

    Je n'y comprend rien du tout...

  10. #10
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Alors en dernier, après chaque session_start() dans les deux fichiers, tu fais un var_dump($_SESSION); puis j'espère que tu verras l'erreur
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Voici ce que j'ai suite à la dernière manipulation :

    Ouverture du formulaire :
    array(0) { }
    Validation, deuxième fichier :
    array(0) { }
    Retour sur le formulaire :
    array(0) { }
    Nouvelle validation, appel du deuxième fichier :
    array(0) { }
    Retour sur le formulaire :
    array(2) { ["InsertOk"]=> string(2) "ok" ["annonce_id"]=> string(2) "54" }

  12. #12
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Tuè peux me mettre le code actuel des deux scripts concernant la variable $_SESSION et $binsert
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Le code du formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    session_start();
    include( "include/header.html" );
    include( "include/menu.php" );
    require_once("include/utils.php");
    require_once("include/fonctions.php");
     
    if(isset($_SESSION['InsertOk']) && $_SESSION['InsertOk'] == 'ok')
    {
    echo "<div id='return_insert'><p>Les donn&eacutes;es saisies ont bien &eacute;t&eacute;es enregistr&eacute;es</p></div>";
    }
    echo '<div id="conteneur_form">
    Ensuite ce n'est que de l'html pour le formulaire.

    Et celui du traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?php
    session_start();
    /*********************************************************************/
    function getCoordonnees($adresse){
        $url = "http://maps.google.com/maps/geo?q=".urlencode($adresse)."&output=csv&key=";
        $csv = file($url);
        $donnees = explode(",",$csv[0]);
        return $donnees;
    }
    /*******************************************************************/
    function generateUniqueCode($car1,$car2) {
    	$string = "";
    	$chaineLettre = "ABCDEFGHIJKLMNOPQRSTUVWXZ";
    	$chaineNum = "0123456789";
    	srand((double)microtime()*1000000);
    	for($i=0; $i<$car1; $i++) {
    		$string .= $chaineLettre[rand()%strlen($chaineLettre)];
    	}
    	for($i=0; $i<$car2; $i++) {
    		$string .= $chaineNum[rand()%strlen($chaineNum)];
    	}
    	return $string;
    }
    function ControlSaisie($aValue){
    //code de contrôle de saisie
    // Faire appel à une fonction JS et controle de regex PHP en cas de désactivation JS
     
    return true;
     
    }
    $bControle = ControlSaisie($aFormValue);
     
    if($bControle){
    //préparation de la requête dans la variable $sPrepareQuery
    $bInsert = $oBdd->exec($sPrepareQuery);
    if($bInsert){
    $_SESSION['InsertOk'] = 'ok';
    }
    else{
    $_SESSION['InsertOk'] = 'ko';
    }
    }
    header('Location : monchemin.php');

    J'ai enlevé les passages de récupérations des données du formulaire avec $_POST, je ne pense pas que ce soit cela qui pose problème, et la requête s'exécute bien.

  14. #14
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bein là je vois pas trop le rapport entre ton code et le post sur les array(0) lors des var_dump(); Franchement je vois pas

    Je regarderais encore tout à l'heure ...
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    J'ai créé deux nouveaux fichiers pour tester avec un code minimaliste et j'ai exactement le même problème.

    Fichier test1.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $TEST=session_start();
    var_dump($TEST);
    $_SESSION['essai'] = "test";
    var_dump($_SESSION);
    echo 'Je fonctionne :'.$_SESSION['essai']."<br/>";
    echo"<a href='test2.php'>TEST</a>";
    Fichier test2.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $Test=session_start();
    var_dump($Test);
    var_dump($_SESSION);
    echo 'Je fonctionne :'.$_SESSION['essai']."<br/>";
    echo"<a href='test1.php'>TEST</a>";
    A l'ouverture du script test1.php j'ai ceci :

    bool(true) array(1) { ["essai"]=> string(4) "test" } Je fonctionne :test
    TEST
    Après avoir cliqué sur TEST (exécution du script test2.php), j'ai ceci :
    bool(true) array(0) { } Je fonctionne :
    TEST
    Nouveau clic sur TEST et retour sur test1.php :
    bool(true) array(1) { ["essai"]=> string(4) "test" } Je fonctionne :test
    TEST
    Enfin dernier clic vers test2.php :
    bool(true) array(1) { ["essai"]=> string(4) "test" } Je fonctionne :test
    TEST
    Quelqu'un a une idée ?

  16. #16
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    je viens de faire le test avec tes codes et cela fonctionne très bien
    j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bool(true) array(1) { ["essai"]=> string(4) "test" } Je fonctionne :test
    TEST
    sur chaque page
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Merci d'avoir testé.
    Si le code est bon, d'où peut provenir l'erreur que je rencontre ?

  18. #18
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    vérifier que
    <?php est bien la première ligne
    sinon je vois pas trop désolé
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    <?php est bien la première ligne.

    Je me demande si ça ne proviens pas d'un problème avec l'hébergeur même si la session est bien démarrée...

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    J'ai contacté l'hébergeur, en espérant que le problème ne vienne pas du code sinon je serais facturé .

    En tout cas merci de votre aide

Discussions similaires

  1. Variable session non retenue / problème sur Firefox
    Par hatembr dans le forum Langage
    Réponses: 10
    Dernier message: 25/04/2007, 17h22
  2. Problème de récuperation des variables de session
    Par paradeofphp dans le forum ASP.NET
    Réponses: 10
    Dernier message: 02/03/2007, 15h40
  3. Réponses: 4
    Dernier message: 20/06/2006, 13h12
  4. Problème de duplication de variables session
    Par boubsa dans le forum Langage
    Réponses: 5
    Dernier message: 10/05/2006, 16h49
  5. [xmlrad]problème avec la variable session
    Par ekmule dans le forum XMLRAD
    Réponses: 5
    Dernier message: 22/02/2006, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo