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 session


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut Problème de session
    Bonjour.

    Je suis entrain faire un site pour une boîte et j'ai des soucis de cession.
    Dans mon dossier "ReseauxSante" j'ai ma page index.php dans laquelle j'ai un menu.
    les pages sont appelées avec include du genre :
    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
    <dt><a href="index.php?page=log"><img src="images/menu/identite.GIF" border="0" onMouseover="this.src='images/menu/identiteh.GIF'"; onMouseout="this.src='images/menu/identite.GIF'"></a></dt>
    <?php 
    if (!isset($_GET['page'])) $page= 'accueil'; else $page= $_GET['page'];  
     switch($page)
    {
    //menu horizontal
    case 'accueil': include ('accueil.php');break;
    case 'contacts': include ('contacts.php');break;
     
    //menu vertical
    case 'log': include ('membres/login.php');break;
    case 'change_passwd': include ('membres/change_passwd.php');break;
    case 'inscription': include ('membres/membre_nouveau.php');break; 
    case 'enreg_nouveau': include ('membres/enreg_nouveau.php');break;
    case 'enreg_nouveau1': include ('membres/enreg_nouveau1.php');break;
    case 'abo': include ('membres/abonnements.php');break;
     
    case 'reseaux1': include ('reseaux_1.php');break;
    case 'reseaux': include ('reseaux.php');break;
    } 
    ?>
    Quand je me logg pas de problème. Le problème il est toujours pas là mais j'y viens.
    ma page log.php qui est dans un sous dossier "Membres"
    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
    <?php
      require('connect.php');
      require_once('fns_validation_data.php'); 
    ?>
    <p style="margin-left:10px; margin-top:10px"><br>
    <!-- S'identifier -->
    <form name="identite" method="Post">
      <table bgcolor='#cccccc' align="center">
       <colgroup width=150>
        <colgroup width=150>
       <tr>
         <td colspan=2 class=tdmin align="center"><br>Identifiez-vous ici</td>
       <tr>
         <td class=tdmin align="right">Nom utilisateur :</td>
         <td><input type="text" name="username"></td></tr>
       <tr>
         <td class=tdmin align="right">Mot de passe :</td>
         <td><input type="password" name='password'></td></tr>
       <tr>
         <td colspan=2 align="center">
         <input type="submit" value="Valider" style="height:20px; font-size:9px"></td></tr>
       <tr>
         <td class=tdmin><a href="forgot_form.php">Mot de passe oublié ?</a><br><br></td>
         <td class=tdmin><a href="index.php?page=change_passwd">Changer le mot de passe</a><br><br></td>
       </tr>
     </table>
     
    <?php
       $val='';
       if(isset($_POST['username']))      $ident=$_POST['username'];
       else	$ident = "";
       if(isset($_POST['password']))     $passwd=$_POST['password'];
       else	$passwd = "";
       $passwd = Sha1($passwd);
       // on vérifie si l'identifiant et le mot de passe sont renseignés
       if (( !empty($_POST['username']) && !empty($_POST['password']))) { 
    	$sql = mysql_query("SELECT * FROM admin WHERE nom_utilisateur='".$ident."' AND password='".$passwd."'",$connexion);
    	if (mysql_num_rows($sql) > 0)
    	{
    	   $val="ok";
    	   $res = mysql_fetch_array($sql);
    	   $utilisateur = $res['nom_utilisateur'];
               $acces = $res['acces'];
    	   $_SESSION['utilisateur'] = $utilisateur;
    	   $_SESSION['acces'] = $acces;
    	   echo '<p align="center">Bonjour <b>'. $utilisateur .'</b> vous êtes connecté(e).';
    	} 
    	else {
    	   $val="rien";
    	}
       }
       if ($val=='rien'){
    	echo '<p align="center"><font face="verdana" size="1" color="red"><b>Nom utilisateur ou mot de passe invalide</b></font>';
       }
    ?>
    </form>
    Dans mon menu, je clic sur un bouton où il faut saisir un code personnel pour avoir accès à des renseignements payants.

    Le problème il est là: Même si le code est correcte j'ai des messages d'erreurs et je ne sais pas comment les traiter.
    le code de ma page Reseaux_1.php où le code d'accès est demandé:
    Quan l'accès est correct ça doit ouvrir une page reseaux.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
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    <?php
    // connection à la base de données
    require ('connect.php');
    ?>
    <style type="text/css">
    .hidden {
        display: none;
    }
    .visible {
        display: inline;
    }
    </style>
    <Script Language="Javascript">
    function hide(identifiant) 
    {
            if (document.getElementById(identifiant).className == "hidden") {
                document.getElementById(identifiant).className = "visible";
            } else {
                document.getElementById(identifiant).className = "visible";
                document.getElementById(identifiant).className = "hidden";
            }
    }
    </script>
     
    <p align="center">
     
    <form name="interro" method="Post" action="index.php?page=reseaux">
    <font color="black" size="2" face="Tahoma" >
    <table border="0" style="margin-left:40px; margin-top:20px;">
    	<tr>
    		<td align="left"><font face="verdana" size="1">
    			Pour accéder à la liste des réseaux vous devez avoir souscrit un <a href="index.php?page=abo">abonnement</a> aux réseaux. 
    			<br><br>
    			Pour accéder à la liste, entrer le code confidentiel qui vous a été communiqué puis valider.<br><br>
    		</td>
    	<tr>
    		<td align="left"><font face="verdana" size="1">Code confidentiel : <input type="text" name="codeconf" value="">
    			<input type="submit" name="valid" value="Valider" style="height:20px; font-size:9px">
    			<br><br>
    		</td>
    	</tr>
    	<tr>
    		<td><font face="verdana" size="1">Code d'accès oublié ?
    			<span class="choix" onclick="hide('mondiv')"><font color="blue">cliquer ici</span></td>
     
    </table>
     
    <!-- 
    acces aux réseaux
    //--> 
    <?php
       $val='';
       if(isset($_POST['codeconf']))      $code=$_POST['codeconf'];
       else	$code = "";
       // on vérifie si l'identifiant et le mot de passe sont renseignés
       if (!empty($_POST['codeconf'])) { 
    	$sql = mysql_query("SELECT * FROM admin WHERE acces ='".$code."'",$connexion);
    	if (mysql_num_rows($sql) > 0)
    	{
    	   $val="ok";
    	   $res = mysql_fetch_array($sql);
               $acces = $res['acces'];
    	}
    	else {
    	   $val="rien";
    	} 
       }
       if ($val === "rien"){
          ?><font face="verdana" size="1" color="red"><b>Code d'accès invalide</b></font><?
       }
    ?>
    </form>
     
    <!-- 
    form pour récupérer le code utilisateur
    //-->
    <div id="mondiv" class="hidden">
    <form name="oubli" method="POST" action="index.php?page=reseaux">
    <table bgcolor="gold" style="margin-left:210px; margin-top:20px;">
    	<tr>
    		<td><font face="verdana" size="2">
    		<?php
    //le nom utilisateur doit être récupéré lors de l'ouverture de session (par cookie?)
      $username='philippe';
    		$utilisateur = $username;
    		$result_sql = mysql_query('Select * From admin ',$connexion);
    		$nombreligne = mysql_num_rows($result_sql);
    		for ($i = 0; $i < $nombreligne; $i++) 
    		{
    			$code = mysql_result($result_sql,$i,"acces");
    			$utilisateurbdd = mysql_result($result_sql,$i,"nom_utilisateur");
    			if ($utilisateurbdd === $username){
    				echo "Votre code confidentiel :<b> $code";
    			}
    			}
    		?>
    		</b></td>
    	</tr>
    </table>
    </form>
    </div>
    le messages affichés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\weblocal\sites\reseauxsante\index.php:10) in c:\weblocal\sites\reseauxsante\reseaux.php on line 2
     
    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\weblocal\sites\reseauxsante\index.php:10) in c:\weblocal\sites\reseauxsante\reseaux.php on line 2
     
    Warning: Cannot modify header information - headers already sent by (output started at c:\weblocal\sites\reseauxsante\index.php:10) in c:\weblocal\sites\reseauxsante\reseaux.php on line 4
    Je sais que c'est un peu long mais j'essaie de fournir le maximum d'infos.

    Infos supplémentaires :
    ma page login.php est dans un sous dossier et les pages reseaux_1.php et reseaux sont dans le dossier principal.

    Est ce là le problème?

  2. #2
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Ca a l'air d'être une erreur banale: je ne vois nul part ou tu mets ton session_start() mais il doit se trouver avant tout autre code (même avant les include).

  3. #3
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Merci.
    J'ai oublié un truc. Quand je suis sur ma page reseaux_1.php (là où je dois saisir le code), j'ouvre la page reseaux.php si le code est ok (en principe!!)
    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
    <form name="interro" method="Post" action="index.php?page=reseaux">
    <font color="black" size="2" face="Tahoma" >
    <table border="0" style="margin-left:40px; margin-top:20px;">
    	<tr>
    		<td align="left"><font face="verdana" size="1">
    			Pour accéder à la liste des réseaux vous devez avoir souscrit un <a href="index.php?page=abo">abonnement</a> aux réseaux. 
    			<br><br>
    			Pour accéder à la liste, entrer le code confidentiel qui vous a été communiqué puis valider.<br><br>
    		</td>
    	<tr>
    		<td align="left"><font face="verdana" size="1">Code confidentiel : <input type="text" name="codeconf" value="">
    			<input type="submit" name="valid" value="Valider" style="height:20px; font-size:9px">
    			<br><br>
    		</td>
    	</tr>
    	<tr>
    		<td><font face="verdana" size="1">Code d'accès oublié ?
    			<span class="choix" onclick="hide('mondiv')"><font color="blue">cliquer ici</span></td>
     
    </table>
    et la session elle est sur ma page reseaux.php (celle qui doit s'afficher si le code est ok)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    session_start(); 
    if(empty($_SESSION['utilisateur'])) {
          header("Location: index.php?page=reseaux1"); 
          exit;
    }
    ?>
    Je me demande si mon problème n'est pas dû à l'emplacement des fichiers
    reseaux_1.php et reseaux.php sont dans le dossier principal et log.php est dans un sous dossier "membres"

    Je n'ai pas testé ça mais je voudrais avoir ton

  4. #4
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    C'est donc ça qui plante:

    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
    <dt><a href="index.php?page=log"><img src="images/menu/identite.GIF" border="0" onMouseover="this.src='images/menu/identiteh.GIF'"; onMouseout="this.src='images/menu/identite.GIF'"></a></dt>
    <?php 
    if (!isset($_GET['page'])) $page= 'accueil'; else $page= $_GET['page'];  
     switch($page)
    {
    //menu horizontal
    case 'accueil': include ('accueil.php');break;
    case 'contacts': include ('contacts.php');break;
    
    //menu vertical
    case 'log': include ('membres/login.php');break;
    case 'change_passwd': include ('membres/change_passwd.php');break;
    case 'inscription': include ('membres/membre_nouveau.php');break; 
    case 'enreg_nouveau': include ('membres/enreg_nouveau.php');break;
    case 'enreg_nouveau1': include ('membres/enreg_nouveau1.php');break;
    case 'abo': include ('membres/abonnements.php');break;
    
    case 'reseaux1': include ('reseaux_1.php');break;
    case 'reseaux': include ('reseaux.php');break;
    } 
    ?>
    En rouge des données HTML sont transmises avant le session_start(). Il doit se trouver avant.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Mille mercis, je galère là dessus depuis des semaines

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

Discussions similaires

  1. [Servlets - JSP] Problème de session
    Par the java lover dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 28/11/2011, 10h54
  2. Problème de session
    Par kephy dans le forum Langage
    Réponses: 11
    Dernier message: 24/11/2005, 11h08
  3. Problème de session
    Par meda dans le forum Langage
    Réponses: 13
    Dernier message: 25/10/2005, 19h25
  4. problème de session en cours
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 15h36
  5. Gros problème de session/cookies
    Par valfredr dans le forum XMLRAD
    Réponses: 18
    Dernier message: 03/06/2004, 10h21

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