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 :

incompréhension sur l'utilisation des sessions


Sujet :

Langage PHP

  1. #1
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 785
    Points : 2 436
    Points
    2 436
    Par défaut incompréhension sur l'utilisation des sessions
    Bonjour,

    j'essaye de me familiariser avec l'utilisation des sessions et je rencontre un problème de compréhension. Tout d'abord j'ignorais qu'il ne fallait plus utiliser les session_register, l'aide apportée sur ce forum m'a permis de corriger cela. J'ai ensuite essayer un petit code pensant avoir compris ce qui m'avait été indiqué mais hélas, cela ne fonctionne pas comme je le souhaiterais. Pourriez-vousme dire pourquoi s'il vous plait?

    La page d'accueil est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form method="post" name="formulaire" action="page1.php">
    Veuillez Saisir votre nom :<BR>
    <input type="text" name="nom"><BR>
    <Input type="button"  value= "S'identifier" onCLick="verifier();" >
    </form>
    Je passe la fonction javascript pas utile du tout.

    La page page1.php est :

    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
    <?php
    session_start();
    $chem_image="image/";
    include "redirect.php";
     
    /* si l'on est bien passés par l'identification,
             on met nom dans la session */
    if (!isset($nom))
    {
    	$_SESSION['nom'] = $_POST['nom'];
    	echo "blablq";
    }
        $image="ima.jpg";
       	$_SESSION['image']= $image;
     
     
    // On inclu l'image et le nom 
    include "entete.php";
    echo "<a href='page2.php'> aller a la page 2pour vérifier le script </a><BR>"
    ?>
    les fichiers d'en-tete et de redirection:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
    $chem_image="image/"; 
    echo " Session ouverte sous le nom $nom<BR>";
     
    if (isset($image))
    {
    		echo"<BR> <Img src=\"".$chem_image.$image ."\" height=\"100\" width=\"70\"> Image</img><BR>";
    }
     
    ?>
    redirection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php 
    $chem_image="image/";
     
     
    if (!(isset($_POST['nom'])or isset($nom)))
    {
    	header("Location: tp3.php");
     
    } 
     
    ?>
    enfin la page 2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php 
    session_start();
    include "redirect.php";
    include "entete.php";
     
     ?>

    L'idée est la suivante: sur le formulaire de départ on entre son nom. Lorsqu'il est renseigné on arrive à la page 1 sur laquelle ce nom est affiché + une image.
    Sur cette meme page, on place le nom de l'image et le nom renseigné dans la sessiona fin de pouvoir les afficher également sur les autres pages.
    Un lien existe entre la page 1 et la page 2.
    La page 2 sert uniquement a tester si l'on a bien l'affichage du nom et de l'image sur les pages autre que la 1.

    Pour les 2 pages, 1 et 2, si l'on tente d'y accéder sans etr epassé par l'identification, on est redirigé vers la page d'identifciation par un header.

    Ca c'est la théorie.

    Ce que j'obtiens en pratique:

    C'est ok pour l'identification et la page 1
    Lorsque j'accède à la page 2, je suis systématiquement rédirigé vers l'identifciation comme si la variable $nom n'était pas connue.

    Je suis désolé si je vous ai mis 2 tonnes de mon code pas top mais c'était dans le but d'éviter des explications encore 3 fois plus longues.

    merci pour votre aide
    Chef de Projet SAP. Certifié Prince2 Practitioner
    ---------------------------------------------------
    Anakin Skywalker turned to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2.

  2. #2
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Logiquement lorsque que tu t identifier, la variable dession est enregistré ??
    donc pkoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php 
    $chem_image="image/"; 
     
     
    if (!(isset($_POST['nom'])or isset($nom))) 
    { 
       header("Location: tp3.php"); 
     
    } 
     
    ?>
    Pkoi tu test sur la variable post et nan po sur le variable de session .. ?
    -= You tak di Apéro ? =-

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Comme le dit toutchak, ton double test est doublement faux : tu testes la variable $_POST qui n'existe plus (au lieu de tester la variable $_SESSION) et tu testes l'absence de $nom alors que tu voudrais savoir l'inverse :/

    Sinon, je te recommande cette page sur les guillemets simples / doubles :
    http://fr.php.net/manual/fr/language.types.string.php

  4. #4
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 785
    Points : 2 436
    Points
    2 436
    Par défaut
    Désolé mais je comprends encore moins :S

    Citation Envoyé par Kirkis
    comme le dit toutchak, ton double test est doublement faux : tu testes la variable $_POST qui n'existe plus (au lieu de tester la variable $_SESSION) et tu testes l'absence de $nom
    Pour moi on passe par le formulaire. Puis par la page 1.
    Lorsque l'on arrive a la page 1 , on inclu redirect:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!(isset($_POST['nom'])or isset($nom)))
    {
    	header("Location: tp3.php");
     
    }
    $_POST['nom'] existe, on est pas rédirigés.
    On test donc si $nom est défini, (s'il a deja été mis dans la session) et comme au premier passage ce n'est pas le cas, on le met dans la session:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!isset($nom)) 
    { 
       $_SESSION['nom'] = $_POST['nom']; 
       echo "blablq"; 
    }
    Si l'on passe maintenant au lien de la page 2. On arrive sur le meme test (redirect). Il fait le renvoi si $_POST ET $nom sont !isset , pour $_post bien entendu c'est le cas ( logique on ne vient pas du formulaire), mais pour $nom ca ne doit pas etre le cas ( on l'a m'y dans la session sur la page 1). Donc pour moi on ne devrait pas être redirigés...

    vraiment j'y comprends rien :S
    Chef de Projet SAP. Certifié Prince2 Practitioner
    ---------------------------------------------------
    Anakin Skywalker turned to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2.

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Le souci est que $_POST n'existe que dans la page qui suit immédiatement le formulaire. Ce n'est pas le cas chez toi car tu rediriges l'utilisateur entre-temps, ce qui supprime $_POST.

    [Edit] Je parle du deuxième script, dans lequel tu inclus redirect.php, or dans ce dernier script tu testes $_POST.
    J'imagine que tu n'as pas utilisé un nouveau formulaire entre ton premier script et le deuxième, donc la variable $_POST a toutes les chances d'avoir disparu.

  6. #6
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 785
    Points : 2 436
    Points
    2 436
    Par défaut
    Oui ca je comprends très bien, la première fois que je passe dans le test, $_post existe puisque lors de ce premier passage, je suis sur page1.php qui est la page qui suit le formulaire. D'ou la presence de ce test. La seconde fosi que je passe, certes, $_post n'existe pas mais $nom , lui, existe puisqu'il a été mis dans la session à la page 1. Donc je ne comprends pas pourquoi je susi redirigé meme si j'ai très bien compris pourquoi $_post n'est pas défini sur la page 2...
    Chef de Projet SAP. Certifié Prince2 Practitioner
    ---------------------------------------------------
    Anakin Skywalker turned to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2.

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    C'est ce que je tentais de t'expliquer au départ : tu as inversé le test !
    Tu devrais faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(!isset($nom)){
      include('redirect.php');
    }
    En gros, actuellement, tu rediriges si ta variable $nom n'existe pas... J'imagine que tu veux le contraire ?

  8. #8
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 785
    Points : 2 436
    Points
    2 436
    Par défaut
    Citation Envoyé par kirkis
    En gros, actuellement, tu rediriges si ta variable $nom n'existe pas... J'imagine que tu veux le contraire ?
    Hum c'est la que je ne comprends pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!(isset($_POST['nom'])or isset($nom)))
    {
    	header("Location: tp3.php");
    }
    Si $_POST['nom'] n'est pas défini et $nom est défini alors

    A: isset($_POST['nom'])= F
    B: isset($nom)= T

    Donc A or B = T

    Donc !(A OR B)= F.... donc je ne devrais pas rentrer dans le IF, donc, si $nom est défini je ne devrais pas etre redirigé...
    Chef de Projet SAP. Certifié Prince2 Practitioner
    ---------------------------------------------------
    Anakin Skywalker turned to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2.

  9. #9
    Membre averti Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Points : 434
    Points
    434
    Par défaut
    Bonjour,
    Peut-etre que ton test serait plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (!(isset($_POST['nom'])or (isset($_SESSION['nom'])))
    {
       header("Location: tp3.php");
    }
    Bon courage,
    Sohnic
    http://www.noctinfo.fr/

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez-le à conquérir le monde en le reproduisant.
    (")-(")

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ouarf, ça ressemble trop à des maths pour moi, tout ça :/

    Voici ce que je vois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!(isset($_POST['nom'])or isset($nom)))
    {
       header("Location: tp3.php");
    }
    Avec des mots, voici ce que cela donne : s'il n'y a pas de variable 'nom' envoyée par formulaire ou bien si la variable $nom existe, alors redirige-moi vers tp3.php (tiens, je croyais que c'était redirect.php).
    Il suffit que l'une au moins des deux conditions soit remplie pour que tu sois renvoyé vers tp3.php...
    Mea culpa, j'avais lu 'redirect.php' au lieu de 'tp3.php'...

    Bon, je pense mieux saisir ce qu'il se passe. Je pense que tu devrais tester $_SESSION['nom'] plutôt que $nom, ainsi tu saurais peut-être mieux où tu en es.

    Si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!(isset($_POST['nom'])or isset($nom)))
    {
       die('bouh');
       header("Location: tp3.php");
    }
    ça te donne quoi ?

  11. #11
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 785
    Points : 2 436
    Points
    2 436
    Par défaut
    Alors si tel est le cas, j'en reviens à mon titre initial:

    incompréhension concernant l'utilisation des sessions
    en effet, si c'est la le teste correct , cela veut dire que lorsque j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['nom']=$_POST['nom']
    pour accéder à la variable sur les autres pages je dois systématiquement faire $_SESSION['nom'] et pas $nom comme je le pensais, c'est bien cela?

    Est ce la meme chose pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['image']= $image;
    est-ce que sur les autres pages je dois y accéder par:
    $_SESSION['image'] et pas par $image :
    Chef de Projet SAP. Certifié Prince2 Practitioner
    ---------------------------------------------------
    Anakin Skywalker turned to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2.

  12. #12
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ah, oui, c'est vrai que PHP a passé les variables automatiques à OFF depuis quelque temps. Avant, tu pouvais créer une variable de $_SESSION['nom'] et y accéder dans le script suivant en utilisant $nom, ce n'est plus le cas désormais.

  13. #13
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 785
    Points : 2 436
    Points
    2 436
    Par défaut
    LE problème venait effectivement de cela, en remplacant les $nom par des $_SESSION['nom'] et en faisant de meme pour $image, le code fonctionne. Je vous remercie beaucoup pour le temps que vous m'avez consacré

    Je mets un résolu
    Chef de Projet SAP. Certifié Prince2 Practitioner
    ---------------------------------------------------
    Anakin Skywalker turned to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FPDF] fpdf et utilisation des sessions
    Par kagura dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 11/05/2006, 18h46
  2. 3 précisions sur l'utilisation des "std::vector"
    Par Invité dans le forum SL & STL
    Réponses: 9
    Dernier message: 10/01/2006, 00h42
  3. Réponses: 5
    Dernier message: 22/08/2005, 16h48
  4. [VB.NET] Utilisation des sessions dans Session_End ?
    Par San Soussy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/02/2005, 16h40
  5. Compteur sur l'utilisation des index
    Par hkhan dans le forum Administration
    Réponses: 11
    Dernier message: 14/10/2004, 17h57

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