Menu

Ma session_start ne fonctionne pas [Résolu]

mobrobot 76 Messages postés vendredi 13 janvier 2017Date d'inscription 31 mars 2018 Dernière intervention - 30 déc. 2017 à 20:33 - Dernière réponse :  Mobrobot
- 31 déc. 2017 à 22:06
Bonsoir a tous le monde j'ai une erreur qui ma trop fatigue durent la semaine là
j'ai mis la session_start dans ma page menu du site dont j'ai nommé codemenu.php

quand je l'inclus dans une des mais page au début du code php on m'affiche l'erreur suivant:
Warning: cannot modify header information-headers already sent by (output started at C:\wamp\www\projet\codemenu.php\234) in C:\wamp\www\projet\recuperation_mdp.php on line 70

et si je l'inclus en bas dans le HTML la première erreur disparais et une autre s'affiche en me disant que la variable n'est pas définit
Afficher la suite 

12 réponses

Répondre au sujet
yg_be 5287 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 30 déc. 2017 à 21:14
+1
Utile
bonsoir,
N'oubliez jamais que header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP. Une erreur très classique est de lire un fichier avec include ou require, et de laisser des espaces ou des lignes vides, qui produiront un affichage avant que la fonction header() ne soit appelée.
le message d'erreur est très clair:
je pense que tu appelles la fonction header dans recuperation_mdp.php, en ligne 70
alors que tu avais commencé à envoyer des infos dans C:\wamp\www\projet\codemenu.php\234
partage ton code si tu souhaites une assistance plus précise.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de yg_be
jordane45 20602 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 30 déc. 2017 à 20:45
0
Utile
Bonjour,

Sans voir ton code il sera difficile de te répondre...

Mais tu peux déjà t'assurer que ton fichier est bien encodé en utf8 sans bom (voir chapitre 1 de ce lien : http://www.commentcamarche.net/faq/47069-html-php-caracteres-accentues-et-l-utf8)


NB : Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code


Commenter la réponse de jordane45
NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 30 déc. 2017 à 20:45
0
Utile
Il faut que le "session_start" soit la première instruction à être executée, sans autres caractère avant (genre un retour à la ligne ou un espace devant le <?php )
Commenter la réponse de NHenry
mobrobot 76 Messages postés vendredi 13 janvier 2017Date d'inscription 31 mars 2018 Dernière intervention - Modifié par mobrobot le 30/12/2017 à 21:57
0
Utile
8
Je vous remercie tous de m'avoir apporter votre aide

au fiat voici mon code du menu du site codemenu.php

<?php
//Demarrage de la SESSION
session_start();
//connexion à la base de donnees
  require 'dbconnectM.php';

      error_reporting(E_ALL);
   ini_set('display_errors', TRUE);
   ini_set('display_startup_errors', TRUE);

   if(isset($_POST['formconnex']))
   {
    $pseudoconnect = htmlspecialchars($_POST['pseudo']);
    $mdpconnect = sha1($_POST['pass']);
    if(!empty($pseudoconnect) AND !empty($mdpconnect))
    {
     $requser = $bdd->prepare('SELECT * FROM membres WHERE pseudo = ? AND pass = ?');
     $requser->execute(array($pseudoconnect, $mdpconnect));
     $userexist = $requser->rowCount();
     $user = $requser->fetch();
     if($userexist == 1)
     {
      $reqconfirme = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ? AND confirmekey = ? AND confirmer = ? ");
      $reqconfirme->execute(array($user['pseudo'],$user['confirmekey'],$user['confirmer']));
      $confirme = $reqconfirme->fetch();
      if($confirme['confirmer'] == 1)
      {
       
       $_SESSION['id'] = $user['id'];
       $_SESSION['pseudo'] = $user['pseudo'];
       
       header('Location:userprofil.php?id=' .$_SESSION['id']);
      }else{
       $err = "Veuillez confirmer votre compte ";
      }

     }
     else
     {
      $err = "Mauvais identifiant ou mot de passe";
     }
    }
    else
    {
     $err = "Tous les champs doivent être complétes ";
    }

   }
?>
<div class="pagemenu"> 
 <div class="header">
 <div class="page_titre">
 <h1>Sitename</h1>

<?php

   error_reporting(E_ALL);
   ini_set('display_errors', TRUE);
   ini_set('display_starup_errors', TRUE);

   require_once 'dbconnectM.php';

   //------------- functions ---------------/
   //functions
   //------------------------------/

   /*Fair une requete SELECT et retoune 1 ligne */

   function querySelectOneRow($sql,$datas=NULL){
    global $bdd;

    $result = NULL;

    try{
     $req = $bdd->prepare($sql);
     $req->execute($datas);
     $result = $req->fetch();
    }catch(Exception $e){
     echo 'Error : ' .$e->getMessage();
     echo "Les datas";
     print_r($datas);
    }
    return $result;
   }

   /* Recuper les info d'un user en fonction de son ID */

   function getUserInfosByID($id){
    $sql = "SELECT * FROM membres WHERE id = ?";
    $datas = array($id);
    return querySelectOneRow($sql,$datas);
   }

   
   $id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;

    if($id){
     $result = getUserInfosByID($id);
     if(!empty($result)){
      echo '<span class="Userpseudo">'.$result['pseudo'].'</span><a class="Userprofil" href="userprofil.php?id='.$id.'"> Mon profil</a>';

      echo '<span class="userdeconnect" id="userdeconnect"><a href="deconnection.php">Se deconnecter</a></sapn>';
     }
     
    }else{
      echo '<div class="logine">
       <b><a href="inscription.php">Inscription</a></b>
         </div>';

     echo '<div class="Divlogin">
       <b><a href="connecter.php">Connexion</a></b>

       <div class="login">
        <form method="POST" action="">
         <tr>
          <td>
           <label for="pseudo">Pseudo :</label>
          </td>
          
          <td>
           <input type="text" name="pseudo" id="pseudo" placeholder="pseudo" />
          </td>
         </tr>

            <tr>
            
          <td>
           <label for="mdp">Mot de passe :</label>
          </td>
          
          <td >
           <input id="mdp" type="password" name="pass" placeholder="mot de passe" />
          </td>
         </tr>

         </table>
         <hr>
         <input type="submit" name="formconnex" value="se connecter">
        </form>
        
       </div>
      
      </div>';

    }



   
  ?>

</div>


      <nav id=sidenave class="sidenav">
       <a href="javascript: void(0)" class="closebtn" onclick="closeNav()">×</a>
       <ul class="menu_drow">
                        <li class="navi"><i class="fa fa-home" aria-hidden="true" id="awesome"></i><a href="datamee.php">site</a></li>
        <li class="navi"><i class="fa fa-gamepad" aria-hidden="true" id="awesome"></i><a href="a2jeux.php">site</a>
         
         <ul class="apps_drow">
          <li><i class="fa fa-android" aria-hidden="true" id="awesome"></i><a href="#">site</a></li>
          <li><i class="fa fa-apple" aria-hidden="true" id="awesome"></i><a href="#">site</a></li>
          <li><i class="fa fa-windows" aria-hidden="true" id="awesome"></i><a href="#">site</a></li>
         </ul>
         
        </li>
        <li class="navi"><i class="fa fa-rocket" aria-hidden="true" id="awesome"></i><a href="a3apps.php">site</a>
         <ul class="apps_drow">
          <li><i class="fa fa-android" aria-hidden="true" id="awesome"></i><a href="#">site</a></li>
          <li><i class="fa fa-apple" aria-hidden="true" id="awesome"></i><a href="#">site</a></li>
          <li><i class="fa fa-windows" aria-hidden="true" id="awesome"></i><a href="#">site</a></li>
         </ul>
        
        </li>
        
        
        <li class="navi"><i class="fa fa-mobile" aria-hidden="true" id="awesome"></i><a href="a4phone.php">Phone</a></li>

        <li class="navE"><a href="#">site</a></li>
        <li class="navE"><a href="#">site</a></li>
        <li class="navE"><a href="#">site</a></li>
        <li class="navE"><a href="#">site</a></li>
        <li class="navE"><a href="#">site</a></li>
        <li class="navE"><a href="#">site</a></li>
       </ul>
      </nav>
   
      <span style="font-size: 30px;cursor: pointer" id="bars" onclick="openNav()"><i class="fa fa-bars" aria-hidden="true"></i></span>
   
      <div id="main">
   
      </div>
      
      
       
       <!-- voici la bare de recherche -->
      <div class="search_">
       <form class="search_q" method="GET" action="resultat_recherche.php">
         <input type="hidden" name="search" value="s">
         <input type="search"  name="g"  placeholder="Recherche" /><button  name="submit" onclick="valid(this, 'resutats-search');" >Go</button>
         
  
       </form>
      </div>
       <?php
        if(isset($msg)){
         echo '<b style="color:darkred">' .$msg. '</b>';
        }
       ?>
  
  
      
   
     <!-- Le Menu de deroule telephone-->
      <div id="menu">
       <ul>
        <li id="menue"><a href="#">site</a></li>
        <li id="menuee"><a href="#">site</a>
         <ul>
          <li><a href="#">site</a></li>
          <li><a href="#">site</a></li>
          <li><a href="#">site</a></li>
          <li><a href="#">site</a></li>
          <li><a href="#">site</a></li>
         </ul>
        </li>
        <li><div id="btnsearh"></div><button id="btsh" onclick="srhBtn()">search</button></li>
       </ul>
      </div> 
  
     </div>   
     </div>



--------------------------------------------------------------------------------------------------------------------------------------------------------------------
et voici le code de la page de recuperation_mdp.php




<?php
include_once "codemenu.php";

//connextion
require_once 'dbconnectM.php';

if(isset($_GET['section'])){
 $section = htmlspecialchars($_GET['section']);
 
}
else{
 $section = "";
}

if(isset($_POST['recup_submit'],$_POST['recup_mail'])){
 if(!empty($_POST['recup_mail'])){
  $recup_mail = htmlspecialchars($_POST['recup_mail']);
  if(filter_var($recup_mail,FILTER_VALIDATE_EMAIL)){
   $mailexist = $bdd->prepare('SELECT id, pseudo FROM membres WHERE email = ? ');
   $mailexist->execute(array($recup_mail));
   $mailexist_count = $mailexist->rowCount();
   if($mailexist_count == 1){
    $pseudo = $mailexist->fetch();
    $pseudo = $pseudo['pseudo'];
    
    $_SESSION['recup_mail'] = $recup_mail;
    
    $recup_code =  "";
    for ($i=0; $i < 8; $i++) { 
     $recup_code .= mt_rand(0,9);
    }
    

    $mail_recup_exist = $bdd->prepare("SELECT id FROM recuperation WHERE email = ?");
    $mail_recup_exist->execute(array($recup_mail));
    $mail_recup_exist = $mail_recup_exist-> rowCount();

    if($mail_recup_exist == 1){
     $recup_insert = $bdd->prepare("UPDATE recuperation SET code = ? WHERE email = ?");
     $recup_insert->execute(array($recup_code,$recup_mail));
    }
    else{ 
     $recup_insert = $bdd->prepare("INSERT INTO recuperation(email,code) VALUES(?,?)");
     $recup_insert->execute(array($recup_mail,$recup_code));
    }
    $header="MIME-Version: 1.0\r\n";
    $header.='From:\'Datamobmee\'<datamobmee12@gmail.com>'."\n";
    $header.='Content-Type:text/html; charset="uft-8"'."\n";
    $header.='Content-Transfer-Encoding: 8bit';

    $message='
    <html>
     <body>
     <font color="#aaa";>
      <div align="center">
       
       blabla de Gmail...
      </div>

     </font>
     </body>
    </html>
       ';

    mail($recup_mail, "Recuperation de mot de passe !", $message, $header);
    header("Location:http://localhost/datamobmee/recup_mdp.php?section=code");

    $errore = '<span id="errr">Votre compts a été bien crée<a href="connecter.php">  Me connecter</a></span><br/><br/>

    <span id="errr1">Un message de confirmation a été envoyé a votre boite e-mail</span> ';

   }
   else{
    $msg_errer = "Cette adresse mail n'est pas enregistrée";
   }
  }
  else{
   $msg_errer = "Adresse mail invalide";
  }
 }
 else{
  $msg_errer = "Veuillez entre votre adresse mail";
 }
}
 
 if(isset($_POST['verif_submit'],$_POST['verif_code'])){
  if(!empty($_POST['verif_code'])){
   $verif_code = htmlspecialchars($_POST['verif_code']);
   $verif_req = $bdd->prepare("SELECT id FROM recuperation WHERE email = ? AND code = ?");
   $verif_req->execute(array($_SESSION['recup_mail'],$verif_code));
   $verif_req = $verif_req->rowCount();
   if($verif_req == 1){
    $del_req = $bdd->prepare("DELETE FROM recuperation WHERE email = ?");
    $del_req->execute(array($_SESSION['recup_mail']));
    header("Location:http://localhost/datamobmee/recup_mdp.php?section=changemdp");
   }
   else{
    $msg_errer = "Code invalide";
   }
  }
  else{
   $msg_errer = "Veuillez entre votre code de verification";
  }
 }
 if(isset($_POST['change_submit'])){
  if(isset($_POST['change_mdp'],$_POST['change_mdpc'])){
   $mdp = htmlspecialchars($_POST['change_mdp']);
   $mdpc = htmlspecialchars($_POST['change_mdpc']);
   if(!empty($mdp) AND !empty($mdpc)){
    if($mdp == $mdpc){
     $mdp = sha1($mdp);
     $ins_mdp = $bdd->prepare('UPDATE membres SET pass = ? WHERE email = ?');
     $ins_mdp->execute(array($mdp,$_SESSION['recup_mail']));
     header("Location:http://localhost/datamobmee/connecter.php");
    }
    else{
     $msg_errer = "Vos deux mot de passes ne correspondent pas";
    }

   }
   else{
    $msg_errer = "Veuillez remplir tous les champs";
   }
  }
  else{
   $msg_errer = "Veuillez remplir tous les champs";
  }
 }
?>


<!DOCTYPE html>
<html>
<head>
 <title>Recuperation de mot de passe</title>
 <meta charset="utf-8">
 <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
 <div class="page_principal1">
 <div class="recup">
  
  <?php if($section == 'code') { ?>
  <p>Un code de verifcation a eté envoyer a cette adresse <b><?= $_SESSION['recup_mail'] ?></b> </p>
  <h4>Entrez votre code de verification : </h4>
  
  <form method="post" class="default-form">
   <p>
    <input type="text" name="verif_code" placeholder="Code de verification" size="30">
   </p>
   <p>
    <input type="submit" id="mitsub" name="verif_submit" value="Valide">
   </p>
  </form>
  
  <?php } elseif($section == 'changemdp'){ ?>
  <h4>Nouveau de mot de passe pour : </h4><b><?= $_SESSION['recup_mail'] ?></b>
  <form method="post" class="default-form">
   <p>
    <input type="password" name="change_mdp" placeholder="Nouveau mot de passe" size="30">
   </p>
   <p>
    <input type="password" name="change_mdpc" placeholder="Confirmation du mot de passe" size="30">
   </p>
   <p>
    <input type="submit" id="mitsub" name="change_submit" value="Valide">
   </p>
  </form>

  <?php } else { ?>
  <h2>Recuperation de mot de passe</h2>
  <form method="post" class="default-form">
   <p>
    <input type="email" name="recup_mail" placeholder="Votre adresse mail" size="30">
   </p>
   <p>
    <input type="submit" id="mitsub" name="recup_submit" value="Valide">
   </p>
  </form>

  <?php } ?>

  <?php if(isset($msg_errer)) { echo '<font color="red">'.$msg_errer.'</font>';} ?>
 </div>



</div>
</body>
</html>


je vous remercie
mobrobot 76 Messages postés vendredi 13 janvier 2017Date d'inscription 31 mars 2018 Dernière intervention - 31 déc. 2017 à 19:10
tu peu bien me détailler comment l'organiser s'il te plait, ou un exemple.
yg_be 5287 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention > mobrobot 76 Messages postés vendredi 13 janvier 2017Date d'inscription 31 mars 2018 Dernière intervention - 31 déc. 2017 à 19:31
comment en es-tu arrivé à faire un include de codemenu dans le code de récupération du mot de passe?
est-ce toi qui a écrit tout le code? le comprends-tu?
mobrobot 76 Messages postés vendredi 13 janvier 2017Date d'inscription 31 mars 2018 Dernière intervention - 31 déc. 2017 à 19:45
Oui ce moi qui la ecrit. J'arrive pas a conprend ce que tu veu dire "tu fais des echo avant l'instruction header, ce qui est interdit."
yg_be 5287 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention > mobrobot 76 Messages postés vendredi 13 janvier 2017Date d'inscription 31 mars 2018 Dernière intervention - 31 déc. 2017 à 20:38
eh bien, les messages d'erreurs sont assez clairs:
- dans ton fichier recuperation_mdp.php, tu inclus (au début) ton fichier codemenu.php, qui est donc exécuté avant le reste du code
- dans codemenu.php, tu fais des echo, ou tu envoies des données au navigateur (output started at C:\wamp\www\projet\codemenu.php\234)
- ensuite, dans recuperation_mdp.php, tu utilises l'instruction header en ligne 70 (cannot modify header information-headers already sent by (output started at C:\wamp\www\projet\codemenu.php\234) in C:\wamp\www\projet\recuperation_mdp.php on line 70)
il est interdit d'utiliser l'instruction header après avoir envoyé des données.
Merci je vais essayé de modifie et voir si sa fonctionne
Commenter la réponse de mobrobot