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 :

Pseudo-Frames et Session


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut Pseudo-Frames et Session
    Bonjour,

    je travail actuelement sur un site en pseudo frame.

    Mon problème est que avant d'acceder au site en pseudo-frame, il faut s'identifié.

    J'ai donc rélaisé un script. Je peut m'inscire, me connecter pas de problème.

    Dans tout les script de mon site j'utilise ensuite l'id du joueurs que j'ai passé en variable de sessions comme ceci: $_SESSION['id']. Seulement, je pense que c'est du au pseudo frame, cette varaible est toujours nulle.

    J'ai donc essayé de mettre des session_start dans tout mes fichiers, en les plaçant avant la balise body, mais à chaque fois j'ai une notice comme quoi une session existe déjà et que la nouvelle sera ignorée.

    Donc ma session existe bien mais alors pourquoi mes variable de sessions sont toujours vide.

    Est-ce qu'il existe une astuce pour que pseudo-frame et sessions fassent bon ménage ?

    Merci d'avance

  2. #2
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Comment tu sauvegardes tes valeurs dans la session?

    Pseudo frame et session font bon ménage!

  3. #3
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Bin pour être plus simple, voilà l'initialisation de ma session:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    session_start();
    $_SESSION['login'] = $_POST['login'];
    $_SESSION['id'] = $data['id'];
    Et ensuite je fait un header pour rediriger vers la page de jeu comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Location: play.php');
    exit();

  4. #4
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    As-tu vérifié la valeur retournée par $data['id']?

  5. #5
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    et y a quelque chose dans $data['id']; ?
    tu fais bien un session_start au début des autres pages ?
    tu as register_globals à ON ou OFF ?

  6. #6
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Alors register_global est a on

    Et oui, la valeur renvoyée par Mysql est bonne.

    EDIT 1: Si je rajoute des session_start au debut des autre page, j'ai le problème que j'ai expliqué en haut.

  7. #7
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    Pourrais-tu nous montrer le code de ton script qui pose problème?

  8. #8
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    juste si register_global est a ON, $id = $_SESSION[id], donc si a un moment tu utilises $id ou autre, ta variable de session va disparaitre.

  9. #9
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Oui sans problème, mais en fait, c'est tout les script ou j'utilise une variable du type $_SESSION['login'].

    Voici un exemple:

    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
    <?php
    // on teste si notre paramètre existe bien et qu'il n'est pas vide
    if (!isset($_GET['id_message']) || empty($_GET['id_message'])) {
        echo 'Aucun message reconnu.';
    }
    else {
    	require_once("include/config.php");
        $base = mysql_connect ($serveur, $username, $password); 
        mysql_select_db ($nombase, $base);
     
        // on prépare une requete SQL selectionnant la date, le titre et l'expediteur du message que l'on souhaite lire, tout en prenant soin de vérifier que le message appartient bien au membre connecté
        $sql = 'SELECT titre, date, message, user.login as expediteur FROM messages, user WHERE id_destinataire="'.$_SESSION['id'].'" AND id_expediteur=user.id AND messages.id="'.$_GET['id_message'].'"';
        // on lance cette requete SQL à MySQL
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
        $nb = mysql_num_rows($req);
     
        if ($nb == 0) {
            echo 'Aucun message reconnu.';
        }
        else {
            // si le message a été trouvé, on l'affiche
            $data = mysql_fetch_array($req);
            echo $data['date'] , ' - ' , stripslashes(htmlentities(trim($data['titre']))) , '</a> [ Message de ' , stripslashes(htmlentities(trim($data['expediteur']))) , ' ]<br /><br />';
            echo nl2br(stripslashes(htmlentities(trim($data['message']))));
     
            // on affiche également un lien permettant de supprimer ce message de la boite de réception
            echo '<br /><br /><a href="supprimer.php?id_message=' , $_GET['id_message'] , '">Supprimer ce message</a>';
        }
        mysql_free_result($req);
        mysql_close();
    }
    ?>
    EDIT 1:

    Je viens de mettre register_globals à off en local et j'ai le même problème.

  10. #10
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    Si tu ne mets pas de session_start() il ne pourra pas récupérer la valeur de $_session['id'] ou des autres variables de session.
    Comment déclares-tu tes variables de session?

  11. #11
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    En fait je ne met pas de session_start() car comme je l'ai dit plus haut, j'utilise des pseudo frame et qui si je le remet, j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Fri Jul 07 17:43:35 2006] [error] [client 127.0.0.1] PHP Notice:  A session had already been started - ignoring session_start() in E:\\www\\medievalheros\\max\\profil.php on line 4, referer: http://127.0.0.1/max/play.php
    Mes variable sont déclaré dans le fichier de connexion, de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['id'] = $_POST['id'];

  12. #12
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    c'est pas pour t'embeter, mais bon les frames c'est pas top.

    Apres je vois pas trop d'ou vient ton probleme, mais tu peux faire un print_r($_SESSION); juste apres ton session_start(); et voir quand elles disparaissent ...

  13. #13
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Bon et bien j'ai fait ce que tu m'a dit dans toute mes pages et à chaque fois j'obtient ça:

    Array ( [login] => Pahcixam [id] => 1 )

    Donc je comprend plus,

    Mes valeurs sont bien là

    Alors pourquoi mes requêtes merdent ?

  14. #14
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Ca c'est une autre histoire !!

    Tein tein teinnnnnnnnn !!! (petite note de musique ...)

  15. #15
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Par exemple, dans ce code là, le print_r me renvoi ce que j'ai dit tout à l'heure, donc j'ai bien mes valeur de session.

    Et à l'execution de ce code:

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    <?php
     
    print_r($_SESSION);
     
    ?>
    <?php
     
    if (isset($_POST['go']) && $_POST['go'] == 'Envoyer') {
        if (empty($_POST['destinataire']) || empty($_POST['titre']) || empty($_POST['message'])) {
            $erreur = 'Au moins un des champs est vide.';
        }
        else {
            require_once("include/config.php");
    		$base = mysql_connect ($serveur, $username, $password); 
    		mysql_select_db ($nombase, $base);
     
            // si tout a été bien rempli, on insère le message dans notre table SQL
            $sql = 'INSERT INTO messages VALUES("", "'.$_SESSION['id'].'", "'.$_POST['destinataire'].'", "'.date("Y-m-d H:i:s").'", "'.addslashes($_POST['titre']).'", "'.addslashes($_POST['message']).'")';
            mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
     
            mysql_close();
     
    		header('Location: play.php?page=messagerie');
            exit();
        }
    }
    ?>
     
    <html>
    <head>
    <title>Espace membre</title>
    </head>
    <body>
    Envoyer un message :<br /><br />
     
    <?php
    require_once("include/config.php");
    $base = mysql_connect ($serveur, $username, $password); 
    mysql_select_db ($nombase, $base);
     
    // on prépare une requete SQL selectionnant tous les login des membres du site en prenant soin de ne pas selectionner notre propre login, le tout, servant à alimenter le menu déroulant spécifiant le destinataire du message
    $sql = 'SELECT user.login as nom_destinataire, user.id as id_destinataire FROM user WHERE id <> "'.$_SESSION['id'].'" ORDER BY login ASC';
    // on lance notre requete SQL
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    $nb = mysql_num_rows ($req);
     
    if ($nb == 0) {
        // si aucun membre n'a été trouvé, on affiche tout simplement aucun formulaire
        echo 'Vous êtes le seul membre inscrit.';
    }
    else {
        // si au moins un membre qui n'est pas nous même a été trouvé, on affiche le formulaire d'envoie de message
        ?>
        <form action="envoyer.php" method="post">
        Pour : <select name="destinataire">
        <?php
        // on alimente le menu déroulant avec les login des différents membres du site
        while ($data = mysql_fetch_array($req)) {
            echo '<option value="' , $data['id_destinataire'] , '">' , stripslashes(htmlentities(trim($data['nom_destinataire']))) , '</option>';
        }
        ?>
        </select><br />
        Titre : <input type="text" name="titre" value="<?php if (isset($_POST['titre'])) echo stripslashes(htmlentities(trim($_POST['titre']))); ?>"><br />
        Message : <textarea name="message"><?php if (isset($_POST['message'])) echo stripslashes(htmlentities(trim($_POST['message']))); ?></textarea><br />
        <input type="submit" name="go" value="Envoyer">
        </form>
        <?php
    }
    mysql_free_result($req);
    mysql_close();
    ?>
    </select>
     
    <?php
    // si une erreur est survenue lors de la soumission du formulaire, on l'affiche
    if (isset($erreur)) echo '<br /><br />',$erreur;
    ?>
    Ma requête sql ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO messages VALUES("", "", "2", "2006-07-07 17:58:22", "titre", "test message")
    La deuxième valeur est vide !

    Je comprend pas ...

  16. #16
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    Je pense que le problème vient de l'architecture de ton application. Mais comme je ne sais pas comment elle est j'ai un peu de mal à trouver une direction de recherche.

  17. #17
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    Dans ta requête essais d'inverser les simples cotes et les doubles cotes:
    Remplace:
    $sql = 'SELECT user.login as nom_destinataire, user.id as id_destinataire FROM user WHERE id <> "'.$_SESSION['id'].'" ORDER BY login ASC';
    Par:
    $sql = "SELECT user.login as nom_destinataire, user.id as id_destinataire FROM user WHERE id <> ".$_SESSION["id"]." ORDER BY login ASC";

  18. #18
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Bin, voilà, ça c'est mon fichier play.php. L'entete le pied et le menu sont en html pur.

    Et puis sa appel les page, comme envoyer.php de mon post précédent.

    play.php:
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    <?php
    session_start();
    if (!isset($_SESSION['login'])) {
        header ('Location: index.php');
        exit();
    }
    ?>
    <div class="entete" >
    <?php
      include('header.php');  // Nous appelons l'entete du site
    ?>
    </div>
    <table border=0>
    <tr><td width=200px>
    <div class="colonneGauche" >
    <?php
      include('menu.htm');   // Nous appelons notre menu
    ?>
    </div>
    </td><td width=824px>
    <div class="colonneDroite">
    <?php
     
      // On définit le tableau contenant les pages autorisées
      // ----------------------------------------------------
      $pageOK = array('news' => 'news.php',
                      'accueil' => 'accueil.php',
    				  'profil' => 'profil.php',
    				  'ma_vue' => 'vue.php',
    				  'equipement' => 'equipement.php',
    				  'messagerie' => 'messagerie.php',
    				  'envoyer' => 'envoyer.php',
    				  'lire' => 'lire.php',
    				  'supprimer' => 'supprimer.php');
     
      // On teste que le paramètre d'url existe et qu'il est bien autorisé
      // -----------------------------------------------------------------
      if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
        include($pageOK[$_GET['page']]);   // Nous appelons le contenu central de la page
      } else {
        include('accueil.php');   // Page par défaut quant elle n'existe pas dans le tableau
      }
     
    ?>
    </div> 
    </td></tr></table>
    <div class="pied">
    <?php
      include('footer.php');   // Nous appelons le pied de page
    ?>
    </div>
    EDIT 1: pour cette requête là ça marche bien, c'est étonnant quand même, voilà ce qu'elle me retourne dans les deux cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT user.login as nom_destinataire, user.id as id_destinataire FROM user WHERE id <> 1 ORDER BY login ASC
    Ya de quoi s'écraser la tête contre le mur

  19. #19
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    Citation Envoyé par Pahcixam
    EDIT 1: pour cette requête là ça marche bien
    Pour laquelle? Avec les doubles cotes ou avec les simples cotes?

  20. #20
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Avec les double et les simple. J'ai essayé de faire ça en debut de fichier:

    $idenvoyeur = $_SESSION['id']

    et de remplacer dans ma requête

    Toujours le même problème.

    Je vois vraiment pas pourquoi il veut pas !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème de SESSION avec les "pseudo-frame" PHP
    Par kergad dans le forum Langage
    Réponses: 10
    Dernier message: 24/05/2008, 01h12
  2. Variable de sessions qui disparaissent (pseudo-frames)
    Par lecharcutierdelinux dans le forum Langage
    Réponses: 11
    Dernier message: 09/02/2007, 22h25
  3. Pseudo-frame et index
    Par MYster dans le forum Langage
    Réponses: 3
    Dernier message: 09/11/2005, 18h48
  4. Pseudo frames
    Par virtuadrack dans le forum Langage
    Réponses: 9
    Dernier message: 23/10/2005, 14h23
  5. [Système] question bete sur les pseudo frames
    Par balou dans le forum Langage
    Réponses: 5
    Dernier message: 12/10/2005, 13h11

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