Pb de header:comment faire une authentificati
Résolu
ethan55
Messages postés
42
Statut
Membre
-
Timon1102 Messages postés 354 Statut Membre -
Timon1102 Messages postés 354 Statut Membre -
je travaille sur EasyPhp et j essaie de faire une authentification HTTP pour ma page da acceuil.
Je vous montre mon code:
<?php
$auth=FALSE;
if ((isset($_SERVER['PHP_AUTH_USER']) AND
isset($_SERVER['PHP_AUTH_PW'])))
{
define('DB_USER','root');
define('DB_PASSWORD','');
define('DB_HOST','localhost');
define('DB_NAME','s_c_l_s');
$bd=@mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die ('Connexion à MySQL impossible:'.mysql_error());
mysql_select_db(DB_NAME)
OR die ('Sélection de la base de donnees impossible:'.mysql_error());
$rq="SELECT nom from ingenieur where nom='{$_SERVER['PHP_AUTH_USER']}'
AND password=PASSWORD('{$_SERVER['PHP_AUTH_PW'] }')";
$result=mysql_query($rq);
$ligne=@mysql_fetch_array($result);
if($ligne)
{$auth=TRUE;}}
if(!$auth){
header('WWW-Authenticate:Basic realm="Sunbelt Call Logging System"');
header('HTTP/1.0 401 Unauthorized');}
?>
<html>
<body>
</html>
</body>
et voila ce que j obtiens :
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-82\www\auth.php:3) in c:\program files\easyphp1-82\www\auth.php on line 25
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-82\www\auth.php:3) in c:\program files\easyphp1-82\www\auth.php on line 26
Si vous pouvez peut etre m aider ca serait tres sympa ...
Je vous montre mon code:
<?php
$auth=FALSE;
if ((isset($_SERVER['PHP_AUTH_USER']) AND
isset($_SERVER['PHP_AUTH_PW'])))
{
define('DB_USER','root');
define('DB_PASSWORD','');
define('DB_HOST','localhost');
define('DB_NAME','s_c_l_s');
$bd=@mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die ('Connexion à MySQL impossible:'.mysql_error());
mysql_select_db(DB_NAME)
OR die ('Sélection de la base de donnees impossible:'.mysql_error());
$rq="SELECT nom from ingenieur where nom='{$_SERVER['PHP_AUTH_USER']}'
AND password=PASSWORD('{$_SERVER['PHP_AUTH_PW'] }')";
$result=mysql_query($rq);
$ligne=@mysql_fetch_array($result);
if($ligne)
{$auth=TRUE;}}
if(!$auth){
header('WWW-Authenticate:Basic realm="Sunbelt Call Logging System"');
header('HTTP/1.0 401 Unauthorized');}
?>
<html>
<body>
</html>
</body>
et voila ce que j obtiens :
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-82\www\auth.php:3) in c:\program files\easyphp1-82\www\auth.php on line 25
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-82\www\auth.php:3) in c:\program files\easyphp1-82\www\auth.php on line 26
Si vous pouvez peut etre m aider ca serait tres sympa ...
A voir également:
- Pb de header:comment faire une authentificati
- Bad pool header ✓ - Forum Windows
- Your browser sent a request that this server could not understand. size of a request header field exceeds server limit. ✓ - Forum Bureautique
- Bad request ... - Forum Réseaux sociaux
- Rgb header c'est quoi - Forum Carte-mère/mémoire
- 400 bad request request header or cookie too large ✓ - Forum Google Chrome
71 réponses
ok
alors voila un exemple de page identification :
il manque la partie de connection a la BD, et il faut que tu adapte la requete SQL a ta BD
alors voila un exemple de page identification :
<?php
session_start();
if(isset($_POST['destroy']) || isset($_GET['logout']))
{session_destroy();session_start();}
// Ca c si on a cliqué sur un bouton nommé destroy, ou appelé identification.php?logout=1
echo "<html><head>\n"; // les headers, ont bien été envoyés avant
echo "<h2>Identification</h2>\n" ;
if(isset($_POST['connect'])){ //si on a clické sur 'connection', mais ca t'avais compris
$login = strtolower($_POST['login']) ;
$password = $_POST['password'] ;
$sql = "SELECT level FROM account WHERE login='$login' AND password='$password'" ;
$result = mysql_query($sql) ;
if(0<mysql_num_rows($result)) {
$temp = mysql_fetch_array($result) ;
$_SESSION['level']=$temp['level'] ;
$_SESSION['login']=$login ;
}
else echo "<h3 class='confirm'>Wrong login or password</h3>\n" ;
}
$level= $_SESSION['level'] ;
$login= $_SESSION['login'] ;
if(!empty($level)) {
echo "<form method='POST' action='".$_SERVER ['PHP_SELF']."'>\n";
echo "<input type='submit' name='destroy' value='Logout' onclick=\"return confirm('Logout ?');\">\n<form>\n" ;
} else {
echo "<form action='".$_SERVER['PHP_SELF']."' method='POST' onsubmit='return (this.login.value.length>0 && this.password.value.length>0);'>\n" ;
echo "<table>\n" ;
echo "<tr><td>Login :<td><input type='text' name='login'>\n" ;
echo "<tr><td>Password :<td><input type='password' name='password' MAXLENGTH='8'>\n" ;
echo "<tr><td><td align='center'><a href='./lost.php'><h6><i>Password forgotten ?</i></h6></a>\n" ;
echo "</table>\n" ;
echo "<input type='submit' name='connect' value='Login'>\n</form>\n" ;
}
echo"</div></body><html>" ;
il manque la partie de connection a la BD, et il faut que tu adapte la requete SQL a ta BD
Ok j ai compris le debut jusqu a if(!empty($level)) {
Apres je comprends pas ou est le formulaire html
Apres je comprends pas ou est le formulaire html
si $level n'est pas vide c'est que l'on est identifié et je n'affiche qu'un bouton pour me deconnecter.
sinon (else...) j'affiche le form de connection
sinon (else...) j'affiche le form de connection
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
adapte a tes besoins, mais assure toi que ta requete fonctionne.
n'oublie pas de changer les champs $temp['...']
n'oublie pas de changer les champs $temp['...']
Mais y a un truc que je comprends pas :comment tu recuperes les variables login et password et level?
Quand tu ecris :
$login = strtolower($_POST['login']) ;
$password = $_POST['password'] ;
ou tu les recuperes les variables?
$login = strtolower($_POST['login']) ;
$password = $_POST['password'] ;
ou tu les recuperes les variables?
elles viennent tout droit du formulaire...
echo "<form action='".$_SERVER['PHP_SELF']."' method='POST' onsubmit='return (this.login.value.length>0 && this.password.value.length>0);'>\n" ; echo "<table>\n" ; echo "<tr><td>Login :<td><input type='text' name='login'>\n" ; echo "<tr><td>Password :<td><input type='password' name='password' MAXLENGTH='8'>\n" ; echo "<tr><td><td align='center'><a href='./lost.php'><h6><i>Password forgotten ?</i></h6></a>\n" ; echo "</table>\n" ; echo "<input type='submit' name='connect' value='Login'>\n</form>\n" ;
Ok ca commence a marcher mais j ai des messages d erreur:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-82\www\ex3.php:10) in c:\program files\easyphp1-82\www\ex3.php on line 25
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-82\www\ex3.php:10) in c:\program files\easyphp1-82\www\ex3.php on line 25
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-82\www\ex3.php:10) in c:\program files\easyphp1-82\www\ex3.php on line 25
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-82\www\ex3.php:10) in c:\program files\easyphp1-82\www\ex3.php on line 25
lol, tu as de nouveau les memes erreurs...
moi je ne les ai pas !
kelson les lignes 10 et 25 de ton fichier, jarrive pas a compter jai les yeux qui se croisent
moi je ne les ai pas !
kelson les lignes 10 et 25 de ton fichier, jarrive pas a compter jai les yeux qui se croisent
pourquoi <?php est a la ligne 10 ? ca doit etre au tout tout tout debut du fichier, a la ligne1 sans espace avant
voila j ai mis <?php a la ligne 1 et voila le mesage d erreur qu j ai maintenant:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-82\www\config.inc:12) in c:\program files\easyphp1-82\www\ex3.php on line 16
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-82\www\config.inc:12) in c:\program files\easyphp1-82\www\ex3.php on line 16
le config;inc c un fichier que j ai include pour ne plus avoir "undefined index"
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-82\www\config.inc:12) in c:\program files\easyphp1-82\www\ex3.php on line 16
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-82\www\config.inc:12) in c:\program files\easyphp1-82\www\ex3.php on line 16
le config;inc c un fichier que j ai include pour ne plus avoir "undefined index"
il faut absoluement faire ton include apres tout ce qui est 'session_start()' ou 'session_destroy()'
un bon endroit serait juste apres ca :
echo "<html><head>\n";
dailleurs le head est inutile c'est directement le <body>...
de meme qu'a la fin je ferme un balise </div> qui n'est pas ouverte...(copier coller...) pas propre mais bon....
un bon endroit serait juste apres ca :
echo "<html><head>\n";
dailleurs le head est inutile c'est directement le <body>...
de meme qu'a la fin je ferme un balise </div> qui n'est pas ouverte...(copier coller...) pas propre mais bon....
OK MERCI CAM ARCHE T UN MONSTRE ATOMIC!!!!
Mais en core une dernier question :
je veux que pour ouvrir un certain fichier PHP,il y ait cette identification
comment je fais?
Mais en core une dernier question :
je veux que pour ouvrir un certain fichier PHP,il y ait cette identification
comment je fais?
eh bien sur chaque page pour laquelle tu veux une identification tu met (avanttout autre code)
dans mon cas je testais la variable $_SESSION['level'], mais tu peux tres bien faire un autre test
<?php
session_start();
if($_SESSION['un parametre que tu as defini a l'identification'] != 'ce que tu veux...') header("Location: identification.php") ; // ou tout autre page de ton choix... = redirection
?>
<html><head></head><body> ta page !
...
dans mon cas je testais la variable $_SESSION['level'], mais tu peux tres bien faire un autre test