Ma session_start ne fonctionne pas

Résolu/Fermé
mobrobot Messages postés 173 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 8 mai 2023 - 30 déc. 2017 à 20:33
 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

4 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
30 déc. 2017 à 21:14
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.
1
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
30 déc. 2017 à 20:45
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 : https://forums.commentcamarche.net/forum/affich-37584944-php-html-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 : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code


0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
30 déc. 2017 à 20:45
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 )
0
mobrobot Messages postés 173 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 8 mai 2023 1
Modifié le 30 déc. 2017 à 21:57
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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 30 déc. 2017 à 23:24
eh bien, cela confirme que tu fais des
echo
avant l'instruction
header
, ce qui est interdit.
tu dois organiser l'ensemble de ton code pour éviter cela.
je ne sais pas si c'est une bonne idée, mais il est possible de mettre
session_start()
au début de recuperation_mdp.php
0
mobrobot Messages postés 173 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 8 mai 2023 1
31 déc. 2017 à 17:11
J'ai déjà essayer de mettre la
session_start()
au début de la page recuperation_mdp.php acune erreur s'affiche si je fait sa. Mais quand j'inclus la page codemenu.php l'erreur s'affiche maintenant
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > mobrobot Messages postés 173 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 8 mai 2023
31 déc. 2017 à 18:44
tu fais des echo avant l'instruction header, ce qui est interdit.
tu dois organiser l'ensemble de ton code pour éviter cela.
0
mobrobot Messages postés 173 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 8 mai 2023 1
31 déc. 2017 à 19:10
tu peu bien me détailler comment l'organiser s'il te plait, ou un exemple.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > mobrobot Messages postés 173 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 8 mai 2023
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?
0