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

tradraza - 15 nov. 2012 à 08:08
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 - 23 nov. 2012 à 10:38
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

sylvain64520 Messages postés 130 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 7 juin 2013
15 nov. 2012 à 09:05
Je viens de tester sur mon poste et ta redirection fonctionne correctement^^

Quelle version de PHP utilises-tu ?
As-tu les droits admin ?
0
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
15 nov. 2012 à 09:14
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();
0
syslain64520: Version PHP5.4.3; Droit d'admin OK

inwebo: Alors comment appeler header() si c'est le cas
0
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
15 nov. 2012 à 16:18
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();
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre 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 !
0
slt!

Warning: Cannot modify header information - headers already sent by (output started at auth.php:5)in C:\..........\auth.ph line 9
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
17 nov. 2012 à 09:23
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 !
0
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,
0
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,
0
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";
}
}
}
?>
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
23 nov. 2012 à 10:34
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 !
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
23 nov. 2012 à 10:38
echo $sql="SELECT * FROM ...
enlever le echo que pour le debug

Bonne programmation !
0
Rejoignez-nous