Bonjour,
Voila j'ai un petit soucis qui n'étais pas la avant le changement de design, maintenant j'ai une erreur headers already sent ça ne ce passe que pendans le logout, null par ailleur.
pour moi il n'y a aucun soucis aucun espace ou autre avant les session ou ailleurs.
sinon comme toute mes pages appel les même fonction header footer etc... sauf administration j'aurais aussi cette erreur hors la tous fonctionne bien sauf cette déconnexion.
et je ne comprend pas d'ou ça viens.
Une vidéo de 5 minute qui détaille le soucis sera dispo dans 30min env !! ne faites pas attention au design.
Donc, je confirme ce que je disais :
include 'parts/header.php';
include 'pages/' . $page . '.php'; // soit include 'pages/logout.php';
include 'parts/footer.php';
Et donc, tu charges "header.php" avant, qui lui, renvoit du texte (ton header).
A la limite, à en croire ton code, tu dois renommer logout.php en logout.func.php ?
Après, je n'adhère pas trop à ta structure "MVC" (la vue ?).
Salut,
Sans un peu de code ça va être compliqué de t'aider.
A quoi ressemble ta fonction de redirection ?
Merci
Alors j'ai trois fonction de redirection une pour le forum et l'admin qui sont dans des dossier diférent j'ai pas trouver mieux.
puis la fonction flash :
/*************
* flash message
**************/
function flash(){
if(isset($_SESSION['Flash'])){
extract($_SESSION['Flash']);
unset($_SESSION['Flash']);
return "<div class='alert alert-$type'><h4 style=\"margin:0;paddin=:5px;\">$message</h4></div>";
}
}
function setFlash($message, $type = 'success'){
$_SESSION['Flash']['message'] = $message;
$_SESSION['Flash']['type'] = $type;
}
/**************
* redirect
***************/
function redirect($location_page){
header("location:" . WEBROOT . "index.php?page=$location_page");
exit();
}
function redirectForum($location_page){
header("location:" . WEBROOT . "forums/index.php?page=$location_page");
exit();
}
function redirectAdmin($location_page){
header("location:" . WEBROOT . "admin/index.php?page=$location_page");
exit();
}
Au vue de l'emplacement de l'erreur PHP (cf video), manifestement le haut du design est déjà envoyé ... Donc fatalement, la redirection ne peut pas fonctionner.
Je suppose que tu dois faire un require/include du fichier "logout.php" à en croire ton url "?page=logout".
Même si effectivement le fichier logout.php n'a pas d'espace ou autre qui justifierai l'erreur, il ne faut pas non plus que le fichier qui l'inclus ne renvoit le moindre texte.
Pour comprendre il vous faut la structure de l'index MVC un peut spécial.
Les liens des pages ce présente comme ça : index.php?pages= la page
$pages = scandir('pages/');
if( isset($_GET['page']) && !empty($_GET['page']) ){ //controll pages exist
if(in_array($_GET['page'].'.php',$pages )){
$page = $_GET['page'];
}else{
//on redirige si on est pas sur la bonne page
setFlash('<strong>Oh oh!</strong> page non trouver ! <strong> Existe pas ou plus </strong>','warning');
redirect('home');
}
}else{
//on redirige si on est pas sur la bonne page
setFlash('<strong>Oh oh!</strong> page non trouver ! <strong> Existe pas ou plus </strong>','warning');
redirect('home');
}
Les fonction des mes pages fonctionne de la même façon sauf que j'ajoute .func :
$pages_functions = scandir('functions/');
if( in_array ($page.'.func.php', $pages_functions) ){//on inclu les pages traitement formulaire etc...
include 'functions/' . $page . '.func.php';
}
Chaque page est appeler avec un scandir() par l'index j'inclu tout en haut de l'index toutes mes librairie, donc toute mes pages inclu les même fonction etc... pareil pour le forum et l'admin un index diférent.
c'est pour ça que cette erreur est pas compréhensible pour moi !!
<?php
if(session_status() == PHP_SESSION_NONE){//on verifi et demarre les sessions
session_start();
}
require 'lib/cnxbdd.php';
require 'lib/libs-includes.php';
$pages = scandir('pages/');
if( isset($_GET['page']) && !empty($_GET['page']) ){ //controll pages exist
if(in_array($_GET['page'].'.php',$pages )){
$page = $_GET['page'];
}else{
//on redirige si on est pas sur la bonne page
setFlash('<strong>Oh oh!</strong> page non trouver ! <strong> Existe pas ou plus </strong>','warning');
redirect('home');
}
}else{
//on redirige si on est pas sur la bonne page
setFlash('<strong>Oh oh!</strong> page non trouver ! <strong> Existe pas ou plus </strong>','warning');
redirect('home');
}
$pages_functions = scandir('functions/');
if( in_array ($page.'.func.php', $pages_functions) ){//on inclu les pages traitement formulaire etc...
include 'functions/' . $page . '.func.php';
}
include 'parts/header.php';
include 'pages/' . $page . '.php';
include 'parts/footer.php';
Donc logout est inclu par la variable $page car elle existe.
J'ai tester de créer logout.php qui est vide et logout.func.php inclu donc avant le header.php qui fera la redirection, et ça fonctionne m^me sans obstart, j'aurai du y pensée.
Mais c'est quoi le problème avec ma structure ? car c'est un peut pareil qu'un autoloader elle fonctionne et inclu mes fonction quand j'en ai besoin.
Le terme MVC signifie que tu sépares la vue, le model et le controller.
En l'occurence, tu ne sépares ni la vue, ni le model, ni, du coup, le controller.
Le principe d'autoloader de base t'aurai notamment permis d'éviter ce soucis plus simplement, en appelant une vraie fonction (et tester l'existance d'une fonction est nettement plus performant que de faire un scan du dossier). Ce qui à terme pourra petit à petit t'amener à faire du POO basique, puis progresser aussi bien en rapidité, en performance et en sécurité.
Mais répondre à un sujet aussi vaste sur un post me parait compliqué.