Page 1 sur 1
formulaire de connexion avec choix email ou login
Posté : 10 oct. 2016, 15:37
par juvamine
bonjour,
je cherche à créer un formulaire de connexion avec choix de mettre login ou email en id.
si vous avez un tuto ou un site qui l'explique bien je suis preneur.
merci
Re: formulaire de connexion avec choix email ou login
Posté : 10 oct. 2016, 15:44
par moogli
salut,
c'est simple à faire
select les,infos from table utilisateur where pseudo = 'la saisie' or email = 'la saisie';
tu peux faire un peu mieux en validant l'entrée
<?php
$sql = 'select les,infos from table utilisateur where ';
if (!empty($_POST['login_value']) && filter_var($_POST['login_value'], FILTER_VALIDATE_EMAIL)) {
$sql .= ' email=\''.$_POST['login_value'].'\'';
} else {
$sql .= ' pseudo=\''.$_POST['login_value'].'\'';
}
// exec
c'est pas à utiliser telquel parce que c'est une belle faille xss.
tu as juste a adapter à ton mode de connexion au serveur sql
@+
Re: formulaire de connexion avec choix email ou login
Posté : 10 oct. 2016, 15:50
par juvamine
yes cool merci moogli tu es au top toi tu répond du tac-au-tac

Re: [RESOLU] formulaire de connexion avec choix email ou login
Posté : 10 oct. 2016, 17:20
par moogli
de rien, la c'est facile pour le coup :=)~
après y a pleind 'autr epossibilités, tu peux te penser sur les sso avec les comptes fb, google et autres.
il existe aussi le projet openid
http://openid.net/
mais ceci sort un peu de la question
@+
Re: [RESOLU] formulaire de connexion avec choix email ou login
Posté : 11 oct. 2016, 14:36
par juvamine
la req que tu m'as donné plus haut fonctionne pour le même input?
Re: [RESOLU] formulaire de connexion avec choix email ou login
Posté : 11 oct. 2016, 14:56
par juvamine
oui c'est tout bon j'ai compris le truc merci.
Re: [RESOLU] formulaire de connexion avec choix email ou login
Posté : 11 oct. 2016, 15:09
par moogli
de rien

Re: [RESOLU] formulaire de connexion avec choix email ou login
Posté : 11 oct. 2016, 15:18
par juvamine
du coup j'ai fait comme ceci
Code : Tout sélectionner
<?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['rang']==2)
{
if ($data['pwd'] == md5($_POST['pwd']))
{
$_SESSION['id'] = $data['id'];
$_SESSION['login'] = $data['login'];
$_SESSION['rang'] = $data['rang'];
header ("Location:../participant/index.php");
if (isset($_POST['souvenir']))
{
$expire = time() + 365*24*3600;
setcookie('id', $_SESSION['id'], $expire);
}
}
}
else
{
if ($data['pwd'] == md5($_POST['pwd']))
{
$_SESSION['id'] = $data['id'];
$_SESSION['login'] = $data['login'];
$_SESSION['rang'] = $data['rang'];
header ("Location:../admin/index.php");
if (isset($_POST['souvenir']))
{
$expire = time() + 365*24*3600;
setcookie('id', $_SESSION['id'], $expire);
}
}
}
}
break;
?>
Re: [RESOLU] formulaire de connexion avec choix email ou login
Posté : 11 oct. 2016, 16:00
par moogli
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;
@+
Re: [RESOLU] formulaire de connexion avec choix email ou login
Posté : 11 oct. 2016, 16:54
par juvamine
yep ça fonctionne bien comme ça aussi

merci.