Mehdi

Bonsoir,
Cela fait 3 jours que j’essaie de trouver une solution mais sans succès (je commence à être désespéré et à me faire agresser par des balises php pendant mon sommeil).
Je vous remercie par avance pour toute l'aide que vous pourrez m'apporter.
Mes header location m'affichent les messages suivants:


Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/CarmentaGames/admin/index.php:39) in /Applications/MAMP/htdocs/CarmentaGames/admin/pages/login.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/CarmentaGames/admin/index.php:39) in /Applications/MAMP/htdocs/CarmentaGames/admin/pages/login.php on line 49

les pages de codes sont les suivantes:

INDEX.PHP

<?php
// Je recupére la page contenant la connexion à ma db
require '../functions/main-functions.php';

//ini_set('display_errors',1);

/*scandir permet de scanner le contenu d'un dossier*/
$pages = scandir('pages/');
if (isset($_GET['page']) && !empty($_GET['page'])) {
if (in_array($_GET['page'] . '.php', $pages)) {
$page = $_GET['page'];
} else {
$page = "error";
}
} else {
$page = "dashboard";
}
$pages_functions = scandir('functions/');
if (in_array($page . '.func.php', $pages_functions)) {
require 'functions/' . $page . '.func.php';
}

?>


<!DOCTYPE html>
<html>
<head>
<!--Import Google Icon Font-->
<link href="http://fonts.googleapis.com/icon?family=Material+Icons"; rel="stylesheet">
<!--Import materialize.css-->
<link type="text/css" rel="stylesheet" href="../css/materialize.css" media="screen,projection"/>
<title>CARMENTA-NEWS | Administration</title>
<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>

<body>
<?php

if($page != 'login' && !isset($_SESSION['admin'])){
header("Location:index.php?page=login");
}

require"body/topbar.php";
?>

<div class="container">
<?php
require 'pages/' . $page . '.php'
?>
</div>


<!--Import jQuery before materialize.js-->
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>;
<script type="text/javascript" src="../js/materialize.min.js"></script>
<script type="text/javascript" src="../js/script.js"></script>
<?php
$pages_js = scandir('js/');
if(in_array($page.'.func.js',$pages_js)){
?>
<script type="text/javascript" src="js/<?= $page ?>.func.js"></script>
<?php
}

?>
</body>
</html>


LOGIN.PHP

<?php

if(isset($_SESSION['admin'])){
header("Location:index.php?page=dashboard");
}

?>


<div class="row">
<div class="col l4 m6 s12 offset-l4 offset-m3">
<div class="div card-panel">
<div class="row">
<div class="col s6 offset-s3">
<img src="img/admin.png" alt="administrateur" width="100%">
</div>
</div>

<h4 class="center-align">Se connecter</h4>

<?php

if(isset($_POST['submit'])){
$email = htmlspecialchars(trim($_POST['email']));
$password = htmlspecialchars(trim($_POST['password']));

$errors = [];

if(empty($email) || empty($password)){
$errors['empty'] = "Tous les champs sont obligatoire!";
}else if(is_admin($email,$password) == 0){
$errors['exist'] = "Administrateur inconnu";
}

if(!empty($errors)){
?>
<div class="card white">
<div class="card-content red-text">
<?php
foreach($errors as $error){
echo $error."<br/>";
}
?>
</div>
</div>
<?php
}else{
$_SESSION['admin'] = $email;
header("Location:index.php?page=dashboard");
}
}

?>

<form method="post">
<div class="row">
<div class="input-field col s12">
<input type="email" id="email" name="email">
<label for="email">Adresse email</label>
</div>
</div>

<div class="row">
<div class="input-field col s12">
<input type="password" id="password" name="password">
<label for="password">Mot de passe</label>
</div>
</div>

<center>
<button type="submit" name="submit" class="waves-effect waves-light btn grey darken-3">
<i class="material-icons left">perm_identity</i>
Se connecter
</button>
</center>

</form>

</div>
</div>
</div>

Le 04/04/2017 à 23:17
Mokrani Zahir

mercis de votre repense sa c'est une nouvel information mercis ;)
n'oublie pas de marquer sa réponse comme résolvant.

Le 07/04/2017 à 14:06
Mehdi

Ps: cela concerne le tuto création d'un blog avec admin en php.

Le 04/04/2017 à 23:18
Mokrani Zahir

salut Mehdi se problème et trot compliquer a corriger. parce-que il a boucau de reseau que le serveur apache envoi set erreur

1 . Cause est une grand classique : il faux pas laisser un espace avant la balise ouvrante de PHP

2 . Utiliser " header(); " après " session_start(); " : ce problème impossible régler par le PHP il faut passer en JS, HTML ou autre langage.

3 . Utilisation " $_SESSION[''] " sans ajouter au début de script " session_start(); "

4 . Il ne doit pas y avoir de texte sortant avant l'appel à la fonction " header(); "

pour mon expression sur PHP si sa les problème que j'ai trouver sur mai script. bonne chance. essai surtout la première cause.

:)

Le 07/04/2017 à 11:37
Mehdi

Salut Mokrani Zahir.
je tenais à te remercier pour ta réponse.
Au final j'ai réussi à trouver une solution en modifant deux petites choses.
j'ai remplacé tout mes header() par redirect() et mes require par requiere_once.

Le 07/04/2017 à 12:38
Mokrani Zahir

résolvant == résolue

Le 07/04/2017 à 14:07
Connectez-vous pour pouvoir répondre