Warning: Cannot modify header information - headers already sent by (output star

Signaler
-
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
-
Slt à ts!

il s'agit d'un page d'authentification(auth.php) pour se rendre à une autre page(admin.php);
le problème est au niveau de la redirection, , si quelqu'un peut m'aider.

Merci d'avance,

Code:

<?php
ob_start();

if(isset($_POST['mot_de_passe']) && isset($_POST['login'])){
$mot_de_passe = $_POST['mot_de_passe'];
$login = $_POST['login'];}

else{
$mot_de_passe = "";
$login = "";}

if(($mot_de_passe "mot_de_passe") && ($login "login")){
header('Location:http://localhost/bureau/admin.php');
exit();}

else{
echo'erreur';}

ob_flush();
?>

12 réponses

Messages postés
130
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
7 juin 2013

Je viens de tester sur mon poste et ta redirection fonctionne correctement^^

Quelle version de PHP utilises-tu ?
As-tu les droits admin ?
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014

Bonjour,

je cite la doc

N'oubliez jamais que header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP. Une erreur très classique est de lire un fichier avec include ou require, et de laisser des espaces ou des lignes vides, qui produiront un affichage avant que la fonction header() ne soit appelée. Le même problème existe avec les fichiers PHP/HTML standards.


Le message d'erreur doit contenir la ligne incriminée (output started at ...).


________________________________________
( $toBe || !$toBe ) = $this->Question();
syslain64520: Version PHP5.4.3; Droit d'admin OK

inwebo: Alors comment appeler header() si c'est le cas
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014

Bonjour,

déjà quel est le message d'erreur complet car là c'est un peu frustrant comme titre.


Warning: Cannot modify header information - headers already sent by (output started at .......)


line number XX.

Cela donne déjà un indice.

Puis je ne suis vraiment pas sûr que l'on puisse mettre en tampon le résultat d'un header.

Bon il faut faire étape par étape : 1 - line number XX ??

________________________________________
( $toBe || !$toBe ) = $this->Question();
fiat une fonction de redirection,
dedans tu vérifie si les info "header" on déjà été appelées
si c'est le cas fait ta redirection avec une meta refresh

Exemple :
<?php
function redirection($url, $time=0) {
   if (!headers_sent()) {
     header("refresh: $time;url=$url"); 
     exit;
   }
   else {
     echo '<meta http-equiv="refresh" content="',$time,';url=',$url,'">';
   }
}

redirection('PageCible.php'); // a utiliser de cette manière
?>


Cordialement,

JéjéScript.

Si on ne réussi pas du premier coup, il faut se rappeler que le grand chêne aussi au début était un gland !
slt!

Warning: Cannot modify header information - headers already sent by (output started at auth.php:5)in C:\..........\auth.ph line 9
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
bonjour
essaye voir comme ça

<?php 
if(isset($_POST['mot_de_passe'],$_POST['login'],$_POST['btnsbt'])){ 
$mot_de_passe = $_POST['mot_de_passe']; 
$login = $_POST['login']; 

if($mot_de_passe "toto" && $login "titi"){ 
ob_start(); 
header('Location: http://localhost/bureau/admin.php');exit;
ob_flush();
}else{ 
echo 'erreur';
} 


}else{ 
$mot_de_passe = ""; 
$login = "";
} 
?>

<form action="" method="post">
login 

password


</form>


Bonne programmation !
Slt et Merci à ts
Merci cod57 mais apparemment ça marche

mon code est du genre static et comment faire maintenant pr qu'il soit dynamique càd mot de passe et login via base de donnée

Merci,
slt!

if($mot_de_passe "toto" && $login "titi"){ 


comment vérifier le mot de passe récupérer avec celui dans la base

Merci d`avance,
encore pas de réponse!

voila j`ai essayer autre chose et affiche comme résultat la dernière ligne `erreur d`authentification.

<?php

$_connexion = mysql_connect('localhost', 'root', '') or die ('impossible de se connecter, veuillez réessayer');
$db = mysql_select_db('qmmdatabase', $_connexion) or die ('La base de données ne peut pas être sélectionner');

if($_POST['valider'])
{
$query = "SELECT * FROM user WHERE login='".$_SESSION['login']."';";
$result = mysql_query($query);
$ligne = mysql_fetch_array($result);

if(($_SESSION['login'] == '') or ($_SESSION['password'] == ''))//verifier les champs si vide
{
echo "Veuillez remplir les champs";
}

else
{
if($_SESSION['password'] == "".$ligne['mdp']."")
{
function redirection($url, $time=0) 
{
if (!headers_sent())
{
header("refresh: $time;url=$url"); 
exit;
}

else
{
echo '<meta http-equiv="refresh" content="',$time,';url=',$url,'">';
}
}

redirection('administration.php');
exit();
}

else
{
echo"Erreur d'authentification";
}
}
}
?>
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
bonjour

classiquement voilà
une page de login


index.php
<?php
session_start();
/*la connection*/
/*
--
-- Base de données: `test`
--

-- --------------------------------------------------------

--
-- Structure de la table `members`
--

CREATE TABLE IF NOT EXISTS `members` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `password` varchar(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

--
-- Contenu de la table `members`
--

INSERT INTO `members` (`id`, `username`, `password`) VALUES
(1, 'titi', 'toto'),
(3, 'tata', 'popo');

*/
/*le tuto ... http://www.phpeasystep.com/phptu/6.html*/

function checkmembre($login,$password){
/*à parametrer*/
static $host='localhost'; // Host name 
static $username='root'; // Mysql username 
static $passBDD=''; // Mysql password 
static $db_name="test"; // Database name 
static $tbl_name='members'; // Table name 
static $myusername=false;
static $mypassword=false; 
// Connect to server and select databse.
mysql_connect($host,$username,$passBDD) or die('cannot connect'); 
mysql_select_db($db_name) or die('cannot select DB');

// To protect MySQL injection (more detail about MySQL injection)
$myusername = mysql_real_escape_string(htmlentities(trim($login)));
$mypassword = mysql_real_escape_string(htmlentities(trim($password)));
echo $sql="SELECT * FROM ".$tbl_name." WHERE username='".$myusername."' and password='".$mypassword."' limit 1";
if($result=mysql_query($sql)){

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

    // If result matched $myusername and $mypassword, table row must be 1 row
if($count===1){

mysql_close();
// Register $myusername, $mypassword and redirect to file "login_success.php"
$_SESSION['login']=$myusername;
$_SESSION['auth']=true;	
ob_start(); 
header('Location: http://localhost/logeur/admin.php');exit;
ob_flush();

}
else {
mysql_close();
return 'Verifier vos identifiants ...<hr>';
}

}else{
mysql_close();
//prob pas membre
return 'Verifier vos identifiants ...<hr>';
}
/* fin checkmembre*/
}


if(isset($_POST['mot_de_passe'],$_POST['login'],$_POST['btnsbt'])){ 
$mot_de_passe = $_POST['mot_de_passe']; 
$login = $_POST['login']; 

if(!empty($mot_de_passe) && !empty($login)){ 
echo checkmembre($login,$mot_de_passe);
}else{ 
echo 'des champs sont vides ...
';
} 

}else{ 
$mot_de_passe = ''; 
$login = '';
} 
?>

<form action="" method="post">
LOGIN


PASSWORD





</form>



admin.php

<?php
session_start();
if(isset($_SESSION['login'],$_SESSION['auth']) && $_SESSION['auth']===true){
echo 'BONJOUR : '.$_SESSION['login'].'<hr>';
/*des infos pour le membre*/

}else{
exit('Veuillez vous identifier');
}
?>


ne sont pas traités
protéger le password md5 ou sha1 ...
la deconnection ...

Bonne programmation !
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
echo $sql="SELECT * FROM ...
enlever le echo que pour le debug

Bonne programmation !