par
moogli » 11 oct. 2016, 16:00
il faut que tu penses que cela peut ne rien retourner (erreur pseu / email / mot de passe) et dans ce cas $data['rang'] n'existe pas

pour éviter cela test si $data === false => erreur sinon c'est que tu as des données et que donc tu peux tester les droits et autre.
tu peux aussi factoriser ton code la chose qui change c'est le header
un truc dans le genre
<?php
case "connexion":
echo'<form method="POST" action="./connexion.php?action=co">
<table>
<tr><td>Login:</td><td><input type="text" name="ident"></td></tr>
<tr><td>Mot de passe:</td><td><input type="password" name="pwd"></td></tr>
<tr><td>Se souvenir de moi ?</td><td><input type="checkbox" name="souvenir"></td></tr>
</table>
<input type="submit" value="ok">
</form>';
break;
case "co":
if (empty($_POST['ident']) || empty($_POST['pwd']))
{
echo'<p>Vous devez remplir tous les champs</p>';
header ("Refresh: 1;URL=./connexion.php?action=connexion");
}
else //On check le mot de passe
{
$query=$db->prepare('SELECT * FROM utilisateur WHERE login=:login OR email=:email');
$query->bindValue(':login',$_POST['ident'], PDO::PARAM_STR);
$query->bindValue(':email',$_POST['ident'], PDO::PARAM_STR);
$query->execute();
$data=$query->fetch();
if($data !== false)
{
if ($data['pwd'] == md5($_POST['pwd']))
{
$_SESSION['id'] = $data['id'];
$_SESSION['login'] = $data['login'];
$_SESSION['rang'] = $data['rang'];
if (isset($_POST['souvenir']))
{
$expire = time() + 365*24*3600;
setcookie('id', $_SESSION['id'], $expire);
}
$url = '../participant/index.php';
// bon la il vaut mieux tester le code rang pour admin :-)
if($data['rang']!=2){
$url = '../admin/index.php'
}
header ('Location: '.$url);
}
}else {
// Utilisateur ou mot de passe érronée (ne pas donner plus d'info)
}
}
break;
@+
il faut que tu penses que cela peut ne rien retourner (erreur pseu / email / mot de passe) et dans ce cas $data['rang'] n'existe pas :)
pour éviter cela test si $data === false => erreur sinon c'est que tu as des données et que donc tu peux tester les droits et autre.
tu peux aussi factoriser ton code la chose qui change c'est le header
un truc dans le genre
[php]<?php
case "connexion":
echo'<form method="POST" action="./connexion.php?action=co">
<table>
<tr><td>Login:</td><td><input type="text" name="ident"></td></tr>
<tr><td>Mot de passe:</td><td><input type="password" name="pwd"></td></tr>
<tr><td>Se souvenir de moi ?</td><td><input type="checkbox" name="souvenir"></td></tr>
</table>
<input type="submit" value="ok">
</form>';
break;
case "co":
if (empty($_POST['ident']) || empty($_POST['pwd']))
{
echo'<p>Vous devez remplir tous les champs</p>';
header ("Refresh: 1;URL=./connexion.php?action=connexion");
}
else //On check le mot de passe
{
$query=$db->prepare('SELECT * FROM utilisateur WHERE login=:login OR email=:email');
$query->bindValue(':login',$_POST['ident'], PDO::PARAM_STR);
$query->bindValue(':email',$_POST['ident'], PDO::PARAM_STR);
$query->execute();
$data=$query->fetch();
if($data !== false)
{
if ($data['pwd'] == md5($_POST['pwd']))
{
$_SESSION['id'] = $data['id'];
$_SESSION['login'] = $data['login'];
$_SESSION['rang'] = $data['rang'];
if (isset($_POST['souvenir']))
{
$expire = time() + 365*24*3600;
setcookie('id', $_SESSION['id'], $expire);
}
$url = '../participant/index.php';
// bon la il vaut mieux tester le code rang pour admin :-)
if($data['rang']!=2){
$url = '../admin/index.php'
}
header ('Location: '.$url);
}
}else {
// Utilisateur ou mot de passe érronée (ne pas donner plus d'info)
}
}
break;[/php]
@+