Bonjour, continuant toujours le tuto sur le portfolio en php je me retrouve encore avec cette maudite erreur Warning: session_start(): Impossible d'afficher le contenue de ma variable var_dump($url), sans afficher cette erreur. Là, par contre je récupère bien son contenu ... [code]array(2) { [0]=> string(6) "/tuto/" [1]=> string(16) "/admin/index.php" } Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /Applications/MAMP/htdocs/tuto/portfolio/lib/constantes.php:3) in /Applications/MAMP/htdocs/tuto/portfolio/lib/auth.php on line 2 Mon premier portfolio en PHP Catégories[/code] Pourtant, cette fois, j'ai tout vérifier, pas d'espace, tout est en UTF8 sans bom. Et bien sur des die bien placé... db.php : [code]<?php try
{
$db = new PDO('mysql:host=localhost;dbname=tuto', 'root', 'root');
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); } catch (Exception $e) { echo 'Impossible de se connecter à la base de donnée'; echo $e->getMessage(); die(); }[/code] constantes.php : [code]<?php $url = explode('portfolio', $_SERVER['REQUEST_URI']);
var_dump($url);
define('WEBROOT', dirname($_SERVER['SCRIPT_NAME']) . '/' );[/code]
auth.php
[code]<?php
session_start();
if(!isset($auth))
{
if(!isset($_SESSION['Auth']['id']))
{
header('Location:' . WEBROOT . 'login.php');
die();
}
}/code]
index.php :[code]<?php
$auth = 0;
include 'lib/includes.php';
include 'parties/header.php';
?>
<?php include 'lib/debug.php';
include 'parties/footer.php';[/code]
index.php :[code]<?php
$auth = 0;
include 'lib/includes.php';
include 'parties/header.php';
?>
C'est le session_start() qui est mal placé : Il doit toujours être appelé avant le moindre affichage.
Et var_dump() est un affichage, comme un echo.
Aussi, Soit il te faut déplacer ton appel vers auth.php avant les constantes, soit l'inverse.
il faut comprendre 3 choses:
1) Si sa fonctionne pour l'auteur du tutoriel et pas pour toi, c'est que t'as fait une faute quelque part.
2) La session dois etre démarée une seule fois ! Dans l'idéal toutes tes pages vont commencer par include constante.php c'est donc judicieux de démarrer la session dans constante.php et ne PLUS JAMAIS utiliser ailleurs la fonction...
3) Retire le var_dump, c'est bon t'as vérifié que ton explode est bon, retire la fonction de debuggage et continue.
Au risque de me répéter, si tu te perds dans tes includes copies/colles le code en vrai, sa vas etre plus simple...
<?php
/* Bonjour je suis le fichier constante.php et je vais lancer la session */
session_start(); //C'est moi qui rajoute sa...
$url = explode('portfolio', $_SERVER'REQUEST_URI']);
var_dump($url);
define('WEBROOT', dirname($_SERVER'SCRIPT_NAME']) . '/' );
/* db.php */
try
{
$db = new PDO('mysql:host=localhost;dbname=tuto', 'root', 'root');
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch (Exception $e)
{
echo 'Impossible de se connecter à la base de donnée';
echo $e->getMessage();
die();
}
include 'form.php';
session_start(); //Bonjour je suis un session_start() placé après de l'affichage
if(!isset($auth))
{
if(!isset($_SESSION'Auth']'id']))
{
header('Location:' . WEBROOT . 'login.php');
die();
}
}
/* fichier auth.php */
$auth = 0;
include 'lib/includes.php';
include 'parties/header.php';
?>
<h3>MESSAGES DE DEBUG</h3>
<?php
include 'lib/debug.php';
include 'parties/footer.php';
include 'session.php'
"il faut comprendre 3 choses:
1) Si sa fonctionne pour l'auteur du tutoriel et pas pour toi, c'est que t'as fait une faute quelque part."
--> Je n'ai JAMAIS prétendu le contraire, mais je demande juste à comprendre...
Parceque passé 3 jours sur ça, effectivement ça à tendance à gonflé.
Surtout que je ne copie/colle pas les sources (que j'ai, puisque en plus je suis premium...)
Je suis ici, si possible, pour apprendre et comprendre par moi même :)
De plus,je me suis rendu compte que les mêmes erreurs était sur son code, mais bien cacher tout en bas de la page, c'est important à dire...
Quite à me répété aussi, quand tu débute (car toi aussi tu es passé par là un jour) au moindre écart tu "panique" en pensant que tu as faut... Et continuer dans l'erreur est simplement contre productif !
"2) La session dois etre démarée une seule fois ! Dans l'idéal toutes tes pages vont commencer par include constante.php c'est donc judicieux de démarrer la session dans constante.php et ne PLUS JAMAIS utiliser ailleurs la fonction..."
--> Pourtant dans les sources, il ne fait absolument pas ainsi... D'ou mon post...
"3) Retire le var_dump, c'est bon t'as vérifié que ton explode est bon, retire la fonction de debuggage et continue."
Oui, là, je susi ok...
Sinon pour répondre, voici son code :
constantes.php :
<?php
define('WWW_ROOT', dirname(dirname( __FILE__ )));
$directory = basename(WWW_ROOT);
$url = explode($directory, $_SERVER'REQUEST_URI']);
tu noterais qu'il est vierge de tout start... Si je suis l'idée, ça pète d'erreurs...
*** pour le reste je vais simplement abandonné ce projet beaucoup trop ambiguë pour moi, dommage vraiment... ***
*** A mon sens, il ne manque pas grand chose pour qu'un NOVICE (n'ayant JAMAIS toucher à du php ou autre avant...) puisse le réalisé sans peine et surtout le comprendre... ***
En tout cas, merci à vous 2 pour vos tentatives d'explications et votre d'aide.
Si tu retires ton var_dump, tu peux remettre tes fichiers à l'état originel, ça fonctionnera.
Il faut juste que tu te souviennes de ne jamais afficher quelque chose à l'écran avant d'avoir lancé la fonction session_start().
mouais.... je vais faire une pose, ça me ressort par les trous de nez là ! Perdre autant de temps pour RIEN, je pense que tu comprends...
merci beaucoup pour votre aide ;)
J'espere que tu n'as pas pris mon commentaire comme une attaque, ou du bashing, ou autre...
C'était juste pour te faire avancer.
Réaliser un site sa implique beaucoup de notions, prends un peu de recul, essaie de créer de plus petits scripts, quand tu te sentiras un peu mieux avec le PHP sa iras.
Au rique de te spoiler la fin, en vrai ce que tu appelles une erreur est en fait juste un avertissement de php (PHP warning), c'est rien de ien grave, le var_dump() qui pose probleme n'est pas censé rester.
Quoiqu'il en soit bravo tu as la bonne attitude, tu cherches des réponses, tu ne te contente pas de regarder. Tu es dans la partie super ingrate de l'apprentissage en informatique, tu fait beaucoup d'efforts pour résoudre des problèmes simples (ou des avertissements :D) ne laches surtout pas ! Tu as tout pour y arriver !
A mon humble avis c'est le session_start de Auth.php qui est de trop...
il arrive après l'affichage du var_dump (sa compte comme un affichage),
normalement toutes tes pages vont inclure constantes.php
tu ne dois plus utiliser de session_start(), la séssion seras toujours démarée
PS: c'est quoi session.php ?
Si tu veux débugger facilement, tu commentes le code déja present dans index.php, tu copies/colles à la mano les bouts de code, après tu suis le cheminement.
j'ai tenté le coup, mais si je déplace ainsi :
<?php
include 'auth.php';
include 'constantes.php';
include 'db.php';
include 'form.php';
// Session_star();
include 'session.php';
tout s'affiche bien sans erreurs sauf logout.php donc ,pas ce que je souhaite.
du coup, je ne comprends toujours pas comment dans la vidéo tout ceci fonctionne au poil,sans rien toucher ;) ?
Je suis pas un expert, alors j'ose pas prendre des libertés...
Du coup peut importe la configuration d'appelle des inclusions, il y à toujours un page qui merde...
Je comprends vraiment pas comment l'auteur du tuto à fait pour n'avoir aucune erreur.
Ou alors, ces mêmes erreurs apparaissent tout en bas de la page ! (en vidéos) ? ...
Je viens de mettre le code source sur mon serveur et je les vois tout en bas, donc, ça serais "normale"
pas simple quand on débute de comprendre dans tout ça...
non, non tkt pas je n'ai rien pris mal ! J'ai tendance à être très direct aussi.
je vais juste faire une pause là... Cela ma tenue un poil :)
Moi je pensais vraiment que je merdais sec...
bref, encore merci ! Sympa tes encouragements ;) et surtout j'ai mes explications, du coup, j'ai compris, c'est ça l'essentielle.