Pb de header:comment faire une authentificati

Résolu
ethan55 Messages postés 42 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 ...

71 réponses

ethan55
 
les formulaires +recuperation de donnees aucun probleme je sais faire
0
Timon1102 Messages postés 354 Statut Membre 109
 
ok
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
0
ethan55
 
Ok j ai compris le debut jusqu a if(!empty($level)) {
Apres je comprends pas ou est le formulaire html
0
Timon1102 Messages postés 354 Statut Membre 109
 
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
0

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

Posez votre question
ethan55
 
Je remets le code comme tu l as ecrit et je change ma requete comme moi je veux???
0
Timon1102 Messages postés 354 Statut Membre 109
 
adapte a tes besoins, mais assure toi que ta requete fonctionne.
n'oublie pas de changer les champs $temp['...']
0
ethan55
 
Mais y a un truc que je comprends pas :comment tu recuperes les variables login et password et level?
0
Timon1102 Messages postés 354 Statut Membre 109
 
euh, a quel moment ?
0
ethan55
 
Quand tu ecris :
$login = strtolower($_POST['login']) ;
$password = $_POST['password'] ;
ou tu les recuperes les variables?
0
Timon1102 Messages postés 354 Statut Membre 109
 
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" ;
0
ethan55
 
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
0
Timon1102 Messages postés 354 Statut Membre 109
 
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
0
ethan55
 
ligne10:<?php
ligne 25:session_start();
0
Timon1102 Messages postés 354 Statut Membre 109
 
pourquoi <?php est a la ligne 10 ? ca doit etre au tout tout tout debut du fichier, a la ligne1 sans espace avant
0
ethan55
 
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"
0
Timon1102 Messages postés 354 Statut Membre 109
 
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....
0
ethan55
 
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?
0
Timon1102 Messages postés 354 Statut Membre 109
 
eh bien sur chaque page pour laquelle tu veux une identification tu met (avanttout autre code)
<?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
0
ethan55
 
Jai pas compris:qu est ce que le mets dans 'un parametre que tu as defini a l'identification' et dans 'ce que tu veux...'
???
0
Timon1102 Messages postés 354 Statut Membre 109
 
moi dans mon test je testais si $_SESSION['level'] etait compris entre 1 et 3. si tu faire un autre test rien ne t'en empeche
0