Page 1 sur 1

session (encore !)

Posté : 25 avr. 2005, 20:00
par Domdom
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.

Posté : 26 avr. 2005, 00:00
par DarkBlue
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

Posté : 26 avr. 2005, 12:59
par Invité
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.

Posté : 26 avr. 2005, 13:25
par flitox
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 ;)

Posté : 26 avr. 2005, 14:29
par Domdom
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 ?