Bonsoir/Bonjour à tous ;)

J'ai un soucis avec la ligne

header("Location:me.php?id=".$_SESSION['id']); 

de ce code

<?php 

include_once('connexion_sql.php');

if(isset($_POST['submit']))
{

  $pseudoconnect = htmlspecialchars($_POST['pseudoconnect']);
  $mdpconnect = sha1($_POST['mdpconnect']);

    if(!empty($pseudoconnect) AND !empty($mdpconnect))
    {

      $requser = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ? AND pass = ?");
      $requser->execute(array($pseudoconnect, $mdpconnect));
      $userexist = $requser->rowCount();

      if($userexist == 1)
      {

        $userinfo = $requser->fetch();
        $_SESSION['id'] = $userinfo['id'];
        $_SESSION['pseudo'] = $userinfo['pseudo'];
        header("Location:me.php?id=".$_SESSION['id']); 

      }else echo "Pseudo ou Mot de passe Incorrecte";

    }else echo "Les champs sont incomplet";

}

?>

ce message s'affiche "Warning: Cannot modify header information - headers already sent by[...]". ://

16 réponses


Laznet
Réponse acceptée

Salut,

Déjà selon moi il y a un problème avec ton Location.

Essaye ça :

<?php

$id = $_SESSION['id'];

header("Location:me.php?id=$id");

?>
shinix
Réponse acceptée

Non le code ne change rien parce que c'est exactement le même que le tiens sauf fait d'une autre manière...

Soit tu fais en sorte de mettre le header() en tout début de script (avant tout code html).

Soit tu fais une redirection html :
(c'est pas la méthode conseillée mais tu peux^^.)

Remplace juste ton header() par :

echo '<meta http-equiv="refresh" content="0; url=me.php?id='.$id.'" />';

As tu du code html avant?

Noviste
Auteur
<?php session_start(); ?>

<link rel="stylesheet" type="text/css" href="login.css">
<?php 
  include_once("init.php");
?><!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title></title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">

           <link  href="css/list.php" rel="stylesheet" type="text/css" media="all" />

    </head>
    <body>
        <!--[if lt IE 7]>
            <p class="browsehappy">Vous utilisez une version ancienne de votre navigateur. Veuillez <a href="http://browsehappy.com/">mettre à jour votre navigateur</a> </p>
        <![endif]-->

        <?php Page::build("header"); ?>
<!--.........................................................................................................................................................-->

<?php 

include_once('connexion_sql.php');

if(isset($_POST['submit']))
{

  $pseudoconnect = htmlspecialchars($_POST['pseudoconnect']);
  $mdpconnect = sha1($_POST['mdpconnect']);

    if(!empty($pseudoconnect) AND !empty($mdpconnect))
    {

      $requser = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ? AND pass = ?");
      $requser->execute(array($pseudoconnect, $mdpconnect));
      $userexist = $requser->rowCount();

      if($userexist == 1)
      {

        $userinfo = $requser->fetch();
        $_SESSION['id'] = $userinfo['id'];
        $_SESSION['pseudo'] = $userinfo['pseudo'];
        header("Location:me.php?id=".$_SESSION['id']); 

      }else echo "Pseudo ou Mot de passe Incorrecte";

    }else echo "Les champs sont incomplet";

}

?>

<!--..........................................................................................................................................................-->

    <section id="section">
    <form method="post" action="login.php" class="formA">

        <div class="containerA">

          <div class="header">
            <h1> Connexion </h1>
          </div>

          <div class="connexion">
            <label>Nom d'utilisateur</label>
            <input name="pseudoconnect" type="text" placeholder="Pseudo">

            <label>Mot de passe</label>
            <input name="mdpconnect" type="password" placeholder="&middot; &middot; &middot; &middot; &middot; &middot; &middot; &middot; &middot; &middot; &middot; &middot; ">
          </div>

          <div class="footer">
            <a id="insc" href="register.php"><FONT Color="#01A9DB">S'inscrire</FONT></a>
            <input name="submit" type="submit" value="CONNEXION">
          </div>
        </div>
      </form>

    </section>

      <footer>
      <center>Copyright© 2015 - <a href="monsite">monsite</a> |.<br> <h5><i>Toutes copies du site est  interdite</i></h5></center>
      </footer> 

Salut,

Ce message signifie que tu as déjà envoyé du texte, avant d'envoyer tes headers (donc tu as un echo()/affiché du texte avant ton header()).

Et euh.. Les balises HTML font sont déprécié depuis longtemps pour laisser leurs place au CSS.

Noviste
Auteur

@mika445 oui je sais mais là n'est pas le problème ^^

Noviste
Auteur

@mika445 je viens d'essayer ton code, cela ne change rien au problème et @telb du coup mes echo sont insdispensable sinon mes visiteurs ne pourront pas savoir d'où viennent leur erreurs pour se connecter .. Comment dois-je m'y prendre ://

Noviste
Auteur

Merci @shinix cela fonctionne <b>PRESQUE</b> parfaitement. En effet, maintenant j'ai créé 2 comptes qui ont pour id 6 pour le premier et 8 pour le second, et en gros lorsque je me connecte avec le 1er je tombe bien sur l'espace membre id 6 et lorsque je me connecte avec le second je tombe encore sur le id 6. Je dois me reconnecter pour tomber sur l'espace membre id 8 et donc lorsque je veux alors me reconnecter avec le id 6 il se passe la même chose que pour le compte id 8 ... .

Donc je ne sais pas si ce problème est lié au code :/

Bah en même temps faut que tu destroy ta session avant de te reconnecter sinon ça va foutre le bordel ;)
http://php.net/manual/fr/function.session-destroy.php

Noviste
Auteur

@shinix ah d'accord .. parcontre je ne vois pas comment ou plutot où le placer :3 car je pensais que le session_destroy était pour quand on se déconnecte :/

si tu changes de comptemutilisateue, il faut bien te deconnecter

Noviste
Auteur

@shinix Ouais sauf que admettons que le compte id 6 soit moi et le 8 toi par exemple, il risque de se passer le problème que je t'ai dis plus haut si tu restes connecté et que moi je me connecte je me connecte je risque d'arrivé dans ton espace membre.. je ne sais pas si tu vois ce que je veux dire ...

c est une variable de session elle est juste dans TON navigateur

Noviste
Auteur

Ah d'accord dans ce cas, sujet résolu merci :)

Noviste
Auteur

je viens de me tromper j'ai mis que mika a résolu je me suis trompé excusez moi