Bonjour je suis le tuto, [url=http://www.grafikart.fr/tutoriels/php/portfolio-php-brut-debutant-connexion-460]créer un portfolio de A à Z.[/url] Et je but sur le passage de la redirection sur la page login.php :[url=][code]Texte du lien[/code][/url] [code]<?php session_start();
if(!isset($_SESSION['id']))
{
header('Location:login.php');
die();
}
?>[/code] là, tout va bien, j'accède directement sur la page login.php (qui n'est pas encore créer donc, erreur"404")logique... Mais je continu de suivre le tuto : [code]<?php session_start();
if(!isset($_SESSION['id']))
{
header('Location:' . WEBROOT . 'login.php');
die();
}
?>[/code] là j'obtient dans mes navigateurs (Safari OU FireFox OU Chrome) Notice: Use of undefined constant WEBROOT - assumed 'WEBROOT' in /Applications/MAMP/htdocs/site_PHP_01/lib/auth.php on line 6 Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/site_PHP_01/lib/auth.php:6) in /Applications/MAMP/htdocs/site_PHP_01/lib/auth.php on line 6 Pourquoi il perd d'un coup la valeur de WEBROOT ? Oo ... Pour info et une meilleurs compréhension : mon index : [code]<?php include 'lib/includes.php'; ?><?php include 'parties/header.php'; ?>

MESSAGES DE DEBUG :

<?php $select = $db->query('SELECT * FROM users'); var_dump($select->fetch()); echo '

Chemin de mon dossier : '; var_dump(WEBROOT); echo '

'; ?> <?php include 'lib/debug.php'; ?><?php include 'parties/footer.php'; ?>[/code] includes : [code]<?php include 'auth.php'; ?><?php include 'constantes.php'; ?><?php include 'db.php'; ?>();[/code] vous noterez qu'elles ne sont pas dans le même ordre que le tuto sinon mes navigateurs m'affiches : (); Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /Applications/MAMP/htdocs/site_PHP_01/lib/includes.php:2) in /Applications/MAMP/htdocs/site_PHP_01/lib/auth.php on line 2 Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/site_PHP_01/lib/includes.php:2) in /Applications/MAMP/htdocs/site_PHP_01/lib/auth.php on line 6 une idée sur la perte de la valeur de WEBROOT ? Aussi pourquoi mes chargement ne s'opère pas dans le même ordre que le tuto ... ?

6 réponses


Glaived
Réponse acceptée

les session et instruction header doivent être placer avant tout code html, et pour le WEBROOT, elle est soit pas définie dans l’exécution, soit définie après ton login.php

<?php include 'db.php'; ?>();

Y aurais pas comment un problème ?

Glaived
Réponse acceptée

ne copie pas bêtement le tuto, surtout que parfois grafikart ce corrige, mais coupe au montage, les constantes global sont la priorités suivis des session suivis des connexion DB and co

druide
Auteur
Réponse acceptée

pour apprendre, je dois bien comprendre ms erreurs ;) et je ne copie/colle pas, mais décortique...
j'ai pas mal éditer, tu comprendras que mon code n'est pas du tout le même que lui :)

Je suis même passé premium pour en finir sur ça et toujours pareil avec ces sources ! donc, j'aimerais juste comprendre.

Glaived
Réponse acceptée
<?php include 'auth.php'; ?> <!-- 3 -->
<?php include 'constantes.php'; ?> <!-- 1 -->
<?php include 'db.php'; ?> <!-- 2 -->

J'imagine que dans auth tu utilise les constantes globales de constantes.php, sauf qu'elle sont pas encore créer, forcement, ça coince ^^

druide
Auteur
Réponse acceptée

auth :

<?php
session_start();
// Si la variable n'est pas défini, alors je redirige l'utilisateur vers login.php :
if(!isset($_SESSION'id']))
{
    header('Location:' . WEBROOT . 'login.php');
}
?>

je comprends toujours pas ... car même en remettant dans le 'bon' ordre mes includes cela ne change strictement rien ...
à moi que je ne comprennes pas ce que tu essais de me dire.

actuellement, si tout est dans "l'ordre", j'ai ces beau messages :

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /Applications/MAMP/htdocs/site_PHP_01/lib/includes.php:2) in /Applications/MAMP/htdocs/site_PHP_01/lib/auth.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/site_PHP_01/lib/includes.php:2) in /Applications/MAMP/htdocs/site_PHP_01/lib/auth.php on line 6
MESSAGES DE DEBUG :
array(3) { "id"]=> string(1) "1" "username"]=> string(5) "admin" "password"]=> string(40) "d033e22ae348aeb5660fc2140aec35850c4da997" } 
WEBROOT : string(13) "/site_PHP_01/"
$_SESSION : array(0) { }

donc, tu remarqueras que mes variable ne sont pas vide :)
et que mes boot sont incorrecte, pourtant bien dans "l'ordre"...
Je t'assure que j'ai chercher de mon coté avant de venir ici, crois moi... mais rien, je n'abandonnerais pas, mais c'est rageant...

druide
Auteur

lu,
Pour :
"<?php include 'db.php'; ?>();"
c'est juste une faute de frappe (ici) :)

Pour :
"les session et instruction header doivent être placer avant tout code html, et pour le WEBROOT, elle est soit pas définie dans l’exécution, soit définie après ton login.php"

J'ai comme ordre de boot ça :

<?php include 'auth.php'; ?> <!-- 3 -->
<?php include 'constantes.php'; ?> <!-- 1 -->
<?php include 'db.php'; ?> <!-- 2 -->

note que j'ai indiquer les ordres de "boot" du tuto... mais si je les respect à la lettre, j'ai ces fameuse erreur de chargement (headers already sent)

pourquoi n'est ce pas idem que le tuto, chez moi ?...
Désolé je suis vraiment bloquer bêtement sur ça.

Tout me parais bien définie :
constantes :

<?php 
define('WEBROOT', dirname($_SERVER'SCRIPT_NAME']) . '/' );

PS :
header :

<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="shortcut icon" href="/img/ico/favicon.ico">
    <title>Portfolio</title>
    <!-- Imports CSS -->
    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="bootstrap/css/mon_style.css" media="screen"/>
    <!-- Custom styles for this template -->
    <!-- <link href="jumbotron.css" rel="stylesheet"> -->
    <!-- Just for debugging purposes. Don't actually copy this line! -->
    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
      <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
   <!-- <div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
            <span class="sr-only">Menu déroulant</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Nom du projet</a>
        </div>
        <div class="navbar-collapse collapse">
          <form class="navbar-form navbar-right" role="form">
            <div class="form-group">
              <input type="text" placeholder="Email" class="form-control">
            </div>
            <div class="form-group">
              <input type="password" placeholder="Password" class="form-control">
            </div>
            <button type="submit" class="btn btn-success">Se connecter</button>
          </form>
        </div> /.navbar-collapse
      </div>
    </div> -->
    <div class="container">

footer :

</div> <!-- /.container -->

    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script src="bootstrap/js/bootstrap.min.js"></script>
  </body>
</html>

Les seules différence sont dans le fait, que j'ai le bootstrap 3 ... donc, pourquoi cela changera les "boot" ...

EDITE :

Merci beaucoup pour ta patience ! !

Pour aider les personnes rencontrant le même soucis :
j'avais tout simplement placer des commentaires html dans du php ...
donc, des espaces "invisible" étant présent... d'ou mes "boots" en double !

voilà ;)

Encore un très grand M E R C I Glaived