session (encore !)

Domdom
Invité n'ayant pas de compte PHPfrance

25 avr. 2005, 20:00

Bonjour.

Je souhaite protéger mon forum par identification.

D'une part mon fichier identification qui se charge d'afficher soit le formulaire d'identification ou le formulaire de post selon si la session à démarré ou non :
<?php
if(!session_is_registered('identifiant'))
{
include ('login_reponse.php');
}
else
{
include ('insert_reponse.php');
}
?>

D'autre part, le formulaire d'identification, login_reponse.php :
<form method="POST" name="formulaire" action="lire_message.php?id_sujet_a_lire=<? echo ($dat['id']); ?>">
<table cellspacing="6" align=center>
<tr>
<td align="right"><p>Identifiant :</p></td>
<td><input type="text" name="identifiant" value="<?php echo $_COOKIE['identifiant']; ?>"></td>
<td rowspan="2"><img src="images/cles.gif"></td>
</tr>
<tr>
<td align=right><p>Mot de passe :</p></td>
<td><input type="password" name="motdepasse" value="<?php echo $_COOKIE['motdepasse']; ?>"><input type="hidden" name="id_sujet" value="<? echo $id_sujet; ?>"></td>
</tr>
<tr>
<td colspan=3 align=center><input type="submit" value=" Accès "></td>
</tr>
</table>
</form>

Et pour finir, la page lire_message :
<?php
session_start();
require ('../inc/config.php');
mysql_connect($serveur,$login,$pass);
mysql_select_db ($base);
// on recupère le password de la table qui correspond au login du visiteur
$sql = "select pwd from forum_user where login='".$identifiant."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);
if($data['pwd'] == $motdepasse)
{
$expire = 365*24*3600;
setcookie("identifiant",$_POST['identifiant'],time()+$expire);
setcookie("motdepasse",$_POST['motdepasse'],time()+$expire);
$_SESSION['identifiant'] = $identifiant;
}
?>
<html>
<head>
<title>Forum</title>
</head>
<body>
...
<?php include ('identification.php') ?>
...
</body>
</html>

Le soucis que je rencontre est qu'en allant donc sur la page lire_message?id_sujet_a_lire=xx, j'ai directement le forumlaire de poste au lieu d'avoir le formulaire d'identification.

Où est le problème ?

Merci d'avance.

Eléphant du PHP | 440 Messages

26 avr. 2005, 00:00

huuuummm je te conseil de redonner ton code en utilisant la jolie balise PHP parce que du texte comme ça , àa donne pas envie de le lire !
Merci a toi

Invité
Invité n'ayant pas de compte PHPfrance

26 avr. 2005, 12:59

Bonjour.

Je souhaite protéger mon forum par identification.

D'une part mon fichier identification qui se charge d'afficher soit le formulaire d'identification ou le formulaire de post selon si la session à démarré ou non :
<?php 
if(!session_is_registered('identifiant')) 
{ 
include ('login_reponse.php'); 
} 
else 
{ 
include ('insert_reponse.php'); 
} 
?>
D'autre part, le formulaire d'identification, login_reponse.php :
<form method="POST" name="formulaire" action="lire_message.php?id_sujet_a_lire=<? echo ($dat['id']); ?>"> 
<table cellspacing="6" align=center> 
<tr> 
<td align="right"><p>Identifiant :</p></td> 
<td><input type="text" name="identifiant" value="<?php echo $_COOKIE['identifiant']; ?>"></td> 
<td rowspan="2"><img src="images/cles.gif"></td> 
</tr> 
<tr> 
<td align=right><p>Mot de passe :</p></td> 
<td><input type="password" name="motdepasse" value="<?php echo $_COOKIE['motdepasse']; ?>"><input type="hidden" name="id_sujet" value="<? echo $id_sujet; ?>"></td> 
</tr> 
<tr> 
<td colspan=3 align=center><input type="submit" value=" Accès "></td> 
</tr> 
</table> 
</form>
Et pour finir, la page lire_message :
<?php 
session_start(); 
require ('../inc/config.php'); 
mysql_connect($serveur,$login,$pass); 
mysql_select_db ($base); 
// on recupère le password de la table qui correspond au login du visiteur 
$sql = "select pwd from forum_user where login='".$identifiant."'"; 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
$data = mysql_fetch_assoc($req); 
if($data['pwd'] == $motdepasse) 
{ 
$expire = 365*24*3600; 
setcookie("identifiant",$_POST['identifiant'],time()+$expire); 
setcookie("motdepasse",$_POST['motdepasse'],time()+$expire); 
$_SESSION['identifiant'] = $identifiant; 
} 
?> 
<html> 
<head> 
<title>Forum</title> 
</head> 
<body> 
... 
<?php include ('identification.php') ?> 
... 
</body> 
</html>
Le soucis que je rencontre est qu'en allant donc sur la page lire_message?id_sujet_a_lire=xx, j'ai directement le forumlaire de poste au lieu d'avoir le formulaire d'identification.

Où est le problème ?

Merci d'avance.

Mammouth du PHP | 859 Messages

26 avr. 2005, 13:25

Oublie déjà session_is_registered et utilise :
<?php
if(!isset($_SESSION['identifiant']))
{ 
include ('login_reponse.php'); 
} 
else 
{ 
include ('insert_reponse.php'); 
} 
?>
D'autre part, tu as laissé des parenthèses dans <? echo ($dat['id']); ?>

Et enfin je mettrais également :
$sql = "select pwd from forum_user where login='".$_POST['identifiant']."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);
if($data['pwd'] == $_POST['motdepasse'])
1 correction par page ;)

Domdom
Invité n'ayant pas de compte PHPfrance

26 avr. 2005, 14:29

Bonjour flitox,

Bon, avec ton code, il y a des améliorations :

Lorsque j'arrive sur le forum, j'ai bien le formulaire d'identification, si je saisi un mauvais login/pwd, je reste bien sur ce formulaire.
Par contre, quand je m'identifie correctement, j'ai encore le formulaire d'identification, avec les bonnes valeurs dans les <input type="text"...> et non le formulaire de post.

Le problème doit venir de :
<?php 
session_start(); 
require ('../inc/config.php'); 
mysql_connect($serveur,$login,$pass); 
mysql_select_db ($base); 
// on recupère le password de la table qui correspond au login du visiteur 
$sql = "select pwd from forum_user where login='".$identifiant."'"; 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
$data = mysql_fetch_assoc($req); 
if($data['pwd'] == $motdepasse) 
{ 
$expire = 365*24*3600; 
setcookie("identifiant",$_POST['identifiant'],time()+$expire); 
setcookie("motdepasse",$_POST['motdepasse'],time()+$expire); 
$_SESSION['identifiant'] = $identifiant; 
} 
?> 
<html> 
<head> 
...mais je ne voit pas ce que je dois modifier.

Qu'en penses-tu ?