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 :

[Cookies] Problème avec session_start


Sujet :

Langage PHP

Vue hybride

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut [Cookies] Problème avec session_start
    Bonjour.
    Ca va être un peu long mais je préfère tout donner maintenant.
    Sur ma page index.php j'ai un bouton qui affiche une page pour s'enregistrer dont voici une partie du 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
    <!-- Menu  -->
    <dl id="menu">
    	<dt><a href="index.php?page=accueil"><img src="images/menu/accueil.GIF" border="0" onMouseover="this.src='images/menu/accueilh.GIF'"; onMouseout="this.src='images/menu/accueil.GIF'"></a></dt>
    	<dt><a href="index.php?page=abo"><img src="images/menu/abonnement.GIF" border="0" onMouseover="this.src='images/menu/abonnementh.GIF'"; onMouseout="this.src='images/menu/abonnement.GIF'"></a></dt>
    	<dt onmouseover="javascript:montre('smenu1');" onmouseout="javascript:montre();"><img src="images/menu/archives.GIF" border="0" onMouseover="this.src='images/menu/archivesh.GIF'"; onMouseout="this.src='images/menu/archives.GIF'"></a></dt>
    		<dd id="smenu1" onmouseover="javascript:montre('smenu1');" onmouseout="javascript:montre();">
    			<ul>
    				<li><a href="index.php?page=2005">&nbsp;&nbsp;2005</a></li>
    			</ul>
    		</dd>
    	<dt onmouseover="javascript:montre('smenu4');" onmouseout="javascript:montre();"><a href="#">&nbsp;Réseaux</a></dt>
    	<dt onmouseover="javascript:montre('');" onmouseout="javascript:montre();"><a href="index.php?page=reseaux1">&nbsp;Réseaux (payant)</a></dt>
    </dl>
    </div>
    <div class="frame"> 
    <?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 'abo': include ('membres/membre_nouveau.php');break;
    case 'inscriptions': include ('inscription.php');break;
    case 'reseaux1': include ('reseaux_1.php');break;
    case 'reseaux': include ('reseaux.php');break;
     
    case 'insc': include ('membres/membre_nouveau.php');break;
    case 'enreg_nouveau': include ('membres/enreg_nouveau.php');break;
     
    //liens page d'accueil
    case 'fr2s6': include ('revues/fr2s6.php');break;
    case 'fr2s5': include ('revues/fr2s5.php');break;
    case 'fr2s4': include ('revues/fr2s4.php');break;
    } 
    ?>
    Dans un sous-répertoire "membres" j'ai :
    -un fichier fns_affichage.php qui contient un formulaire.
    -un fichier enreg_nouveau.php qui contient le code suivant
    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
    <?php
      require('connect.php');
      // include function files for this application
      require_once('fns_reseaux.php');
      //creation des variables aux noms abrégés
      $surname=$_POST['surname']; 
      $name=$_POST['name']; 
      $adresse=$_POST['adresse'];
      $codep=$_POST['codep'];
      $ville=$_POST['ville'];
      $username=$_POST['username'];
      $email=$_POST['email'];
      $passwd=$_POST['passwd'];
      $passwd2=$_POST['passwd2'];
      $revue=$_POST['revue'];
      $revue1=$_POST['revue1'];
      $lci=$_POST['lci'];
      $li=$_POST['li'];
      $reseaux=$_POST['reseaux'];
    //enregistrement d'un nouveau membre
        //référence d'acces
        $ac = "RS";
        $acces = "";
        $nombre = 0;
        $result_sql = mysql_query('Select id_nom, acces From admin order by id_nom',$connexion);
    	while ($row = mysql_fetch_array($result_sql))
    	{ 
    		$nombre=substr($row['acces'],4);
    	}
    	if ($nombre == 0) $nombre = 100110;
    	else	$nombre += 1;
    		$acces = substr($username,0,2);
    		$acces = $ac.$acces.$nombre;
        // date du jour
        $date= $date=date("Y-m-d");
        //codage du mot de passe
        $passwd=sha1($passwd);
        //appel de la fonction d'enregistrement
        register($surname, $name, $adresse, $codep, $ville, $revue, $revue1, $lci, $li, $reseaux, $email, $username, $passwd, $acces, $date);
     
        echo "<font face='verdana' size=1><br><br>Nous vous remercions de vous être inscrit(e)<br>Notez votre code confidentiel :<b> $acces</b>";
    ?>
    -un fichier fns_auth_user.php qui contient 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
    <?php
    require('connect.php');
    function register($surname, $name, $adresse, $codep, $ville, $revue, $revue1, $lci, $li, $reseaux, $email, $username, $passwd, $acces, $date)
    {
         $sql = "INSERT INTO admin(id_nom, nom, prenom, adresse, code_postal, ville, revue, revue1, lettre_ci, lettre_i, reseaux, email, nom_utilisateur, password, acces, date_inscription) 
    	VALUES('','$surname','$name','$adresse','$codep','$ville','$revue','$revue1','$lci','$li','$reseaux','$email','$username','$passwd','$acces','$date')"; 
             $_SESSION['username']=$username;
        // on insère les informations du formulaire dans la table 
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
        mysql_close();  // on ferme la connexion 
     
    }
    ?>
    Tous ça fonctionne normalement.
    Mon problème se situe ici :
    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
    <?php
    session_start(); 
    if(!empty($_SESSION['username'])) {
          header("Location: index.php?page=reseaux"); 
          exit;
    }
    // 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";
            } 
    }
    </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
    	if (isset($_post['codeconf']))	$code=$_post['codeconf'];
    	else $code="";
    	$result_sql = mysql_query('Select * From admin',$connexion);
    	$nombreligne = mysql_num_rows($result_sql);
    	for ($i = 0; $i < $nombreligne; $i++) 
    	{
    		$codebdd = mysql_result($result_sql,$i,"acces");
    		if ($codebdd === $code){
    		}
    	}
    ?>
    </form>
    <!-- 
    form pour récupérer le code utilisateur
    //-->
    <div id="mondiv" class="hidden">
    <form name="oubli" method="POST">
    <table bgcolor="gold" style="margin-left:210px; margin-top:20px;">
    	<tr>
    		<td><font face="verdana" size="2">
    		<?php
      $username=$_SESSION['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>
    Quand je clic sur (en gras dans le code) Code d'accès oublié ?<span class="choix" onclick="hide('mondiv')"> j'ai le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    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_1.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_1.php on line 2
    J'avoue que ne comprends pas et donc je ne vois pas ce que je dois faire.

    Merci de m'aider

  2. #2
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Simplement que tu ne peux pas créer de session après que des données soit déjà envoyé sur le navigateur.
    En résumé, il ne faut pas de echo ou autre élément qui s'affiche avant que tu fasse session_start

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Tu veux dire que je dois pas mettre (en gras)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
      $username=$_SESSION['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";
    			}
    			}
    		?>

  4. #4
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Si le session_start se trouve après, non. Cette regle est valable aussi pour les cookie.

    Astuce/conseil.
    Parfois il arrive que se message apparait alors qu'il y a rien à l'affichage. Il y a une chose à savoir :
    ___________________________

    <? php
    ....
    ?>
    La barre represente le haut du fichier. Entre le haut et la balise php il y a une ligne vide. Ceci va faire planter session_start et les cookie.
    Ce phénomène peut être plus vicieux dans le bas du fichier. Il est parfois difficile de detecter qu'il y a plusieurs ligne vide en bas du fichier. Il suffi qu'il y a ceci

    _____________________________________
    <?php
    .....
    ?>


    __________________________________

    Selon l'éditeur utilisé les lignes vide en bas des balises n'est pas visible. Il suffit d'avoir un fichier ainsi dans un include et session_start après et c'est le plantage assuré.
    Donc il faut bien vérifié que le haut et le bas du fichier ne possède pas de ligne vide.

Discussions similaires

  1. [Cookies] problème avec session_start
    Par tom42 dans le forum Langage
    Réponses: 2
    Dernier message: 13/03/2007, 14h25
  2. [Cookies] problème avec if
    Par PAYASS59 dans le forum Langage
    Réponses: 11
    Dernier message: 20/02/2006, 12h07
  3. [Cookies] Problème avec les sessions PHP !!!
    Par boukay dans le forum Langage
    Réponses: 4
    Dernier message: 14/02/2006, 17h32
  4. [Cookies] problème avec site multilingue
    Par lacfab dans le forum Langage
    Réponses: 13
    Dernier message: 30/12/2005, 23h10
  5. problème avec session_start()
    Par hanane_iaai dans le forum Langage
    Réponses: 1
    Dernier message: 12/12/2005, 17h46

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