Création d' un login php sql

Résolu/Fermé
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 - 7 janv. 2011 à 16:34
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 - 10 janv. 2011 à 21:43
Bonjour,



J' aimerai crée un login membre avec un cokie garder le compte actif mais j' ai un peu de mal avec tout ca car je ne comprend pas tout, voila a quoi ressemble mon code pour le moment:

mysql_connect("localhost","root", "")  OR die('Erreur de connexion à la base'); 
mysql_select_db("myphone"); 

$email = isset($_POST['email']) ? (mysql_real_escape_string($_POST['email'])) : ''; 
$Votremotdepasse = isset($_POST['Votremotdepasse']) ? trim(md5(mysql_real_escape_string($_POST['Votremotdepasse']))) : '';


$result = mysql_query("SELECT mail, Votremotdepasse FROM membres WHERE email = '" . $_POST["email"] . "'");
if(!$result)
{
$message = "Une erreur est survenue lors de la tentative de connexion";
}
else
{
// Si aucun utilisateur n'a été trouvé
if(mysql_num_rows($result) == 0)
{
$message = "Le nom d'utilisateur " . $_POST["email"] . " n'existe pas";
}
else
{
 // Récupération des données
$row = mysql_fetch_array($result);
 // Vérification du mot de passe
if(md5($_POST["Votremotdepasse"]) != $row["Votremotdepasse"])
{
$message = "Votre mot de passe est incorrect";
}
else
{
 // Définition du temps d'expiration des cookies
 $expiration = empty($_POST["CB_Connexion_Automatique"]) ? 0 : time() + 90 * 24 * 60 * 60;
// Création des cookies
 setcookie("ID", $row["ID"], $expiration, "/");
setcookie("email", $row["email"], $expiration, "/");
 // Fermeture de la connexion à la base de données
 mysql_close();
// Redirection de l'utilisateur
header("Location: index.php");



Merci pour votre aide :)
A voir également:

7 réponses

avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
7 janv. 2011 à 18:43
Salut.

J'ai fait quelques changements dans ton code.
https://gist.github.com/90c9f78c093d2d2efed0

J'ai commenté les setcookie() car avec la technique que tu comptes utilisé, tu vas créer une belle faille.

Je suppose que tu as l'intention de récupérer l'ID du membre depuis le cookie et directement l'identifier ?
Sache qu'il est possible de créer soi-même des cookies pour n'importe quel site, sans passer par le serveur. Il suffirait donc de créer un cookie nommé ID et contenant l'id d'un membre ou d'un administrateur.

Je te conseille de stocker l'email et le mot de passe (en md5) dans les cookies.
Et grâce à un script inclus dans toutes les pages, il faudra procéder aux mêmes vérifications qu'avec les variables POST, sauf que ça sera les COOKIE (il ne faudra plus réappliquer md5() sur le mot de passe).
1
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
8 janv. 2011 à 12:13
Merci de m' avoir fais cette remarque car je ne savais pas que l' édition de cookie soi-même était possible,donc effectivement vos mieux prendre le mail et le mode passe en md5 :)

Par contre j' ai tester ton code et merci pour celui ci ;) mais je ne trouve plus ma page de traitement php alors qu avec mon ancien code je la trouve sans problème, je me suis pas encore pencher sur le pour quoi du comment ^^ car je lis la bible du php pour mieux comprendre le php :)
0
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
7 janv. 2011 à 17:22
Salut.
Et quelle est la question ?
0
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
7 janv. 2011 à 17:30
j' aimerai s' avoir se que tu pense du code car il est pas fonctionnel pour le moment :s
0
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
9 janv. 2011 à 13:01
Bon j' ai du mal a crée le login que j' aimerai faire,si quel qu' un pourrai m' aider ça serai sympa :)

Voila se que je cherche a faire :

- vérification si le couple mail, mot de passe existe et si ils sont correcte
- en option un chexbox avec la création d' un cookie pour garder la session active, donc que ca se connecte directement a chaque connexion sur le site
- redirection sur la page qui contrôle si le log est bien présent.
je block sur tout sur la création du cookie et sur la session, par contre je sais pas si ma vérification du couple est trés propre mais ça fonctionne.



Voila mon code pour le moment :

<?php
mysql_connect("localhost","root", "") OR die('Erreur de connexion à la base');
mysql_select_db("myphone");

$email = isset($_POST['email']) ? (mysql_real_escape_string($_POST['email'])) : '';
$Votremotdepasse = isset($_POST['Votremotdepasse']) ? (mysql_real_escape_string(trim($_POST['Votremotdepasse']))) : '';

$result = mysql_query("SELECT email, Votremotdepasse FROM membres WHERE email = '" . $email . "'");
$row = mysql_fetch_array($result);
 if(md5($Votremotdepasse) != $row["Votremotdepasse"])

$result = mysql_query("SELECT email, Votremotdepasse FROM membres WHERE Votremotdepasse = '" . $Votremotdepasse . "'");
$row = mysql_fetch_array($result);
 if(md5($Votremotdepasse) != $row["Votremotdepasse"]) 
 

$errors = array(); 

if(!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = 'L\'adresse email est invalide'; 
if(strlen($Votremotdepasse) < 5) $errors[] = 'Votre mot de passe doit contenir au moins 5 caractères'; 
if(mysql_num_rows($result) == 0) $errors[] = 'Compte non reconnu'; 


if(count($errors) > 0) {
	echo '<div class="errors">';
	echo 'Il y a '.count($errors).' erreur(s) :<br/>';
	foreach($errors as $error){
		echo '- '.$error.'<br/>';
	}
	echo '</div>'; 
} 

?>
0
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
9 janv. 2011 à 14:17
Essaye avec ce code :
https://gist.github.com/a6a4476645958a110a93


Il y avait des vérifications inutiles dans ton code.

Par exemple, le filtre de l'adresse email. Si la syntaxe est incorrecte, on peut être sur qu'aucun compte correspondant à $email existe, et plus loin, on vérifie s'il y a au moins 1 compte dans le résultat.

Pareil pour le mot de passe. Si lors de l'inscription l'utilisateur est obligé d'indiquer un mot de passe de 5 caractères, alors tu peux être sûr que celui dans la base de données fait la même longueur. Lors de la connexion, si on entre un mot de passe ayant une longueur inférieure à 5 caractères, on est sûr qu'il est mauvais, et il y a une condition qui vérifie ça.
0

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

Posez votre question
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
Modifié par ced3E le 9/01/2011 à 15:17
Merci, par contre le cookie est valable que xx jour dans cette configuration est il possible de le faire sans limite ? On ne stocke le mot de passe en md5 dans le cookie ?

Pour se qui est de la redirection mon index est directement la page avec le formulaire, donc une page utile seulement au moment de l' inscription donc je vais faire une redirection sur la page voulu mais je comprend pas ça ne charge pas la page, je pense qu' il y a une condition a mettre sur celle ci non ?
0
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
9 janv. 2011 à 15:45
Tu ne peux pas créer définitivement un cookie, tu es obligé de préciser une date d'expiration, ou bien alors, il est supprimé à la fin de la session (à la fermeture du navigateur). Mais tu peux mettre une date d'expiration lointaine.
J'ai oublié de mettre la fonction md5() pour le cookie. C'est corrigé

Pour la redirection, il ne faut aucun code dans la page à part le code PHP.
Donc « <?php » doivent être les premiers caractères du fichier.
Si tu es en UTF-8, vérifie que ce soit sans DOM.

Pour afficher un message d'erreur, tu peux ajouter des données dans l'URL (GET).
Par exemple : header('Location: /index.php?login=success');
Dans index.php, tu pourras afficher un message d'erreur si la variable existe.
<?php if(isset($_GET['login']) && $_GET['login'] == 'success') : ?>
<div class="success" id="login_success">
    Vous êtes connecté en tant que <?php echo $_SESSION['email']; ?><br/>
    <a href="#" id="hide_login_success">Cacher</a>
</div>
<script type="text/javascript">
document.getElementById('hide_login_success').onclick = function() {
    document.getElementById('login_success').style.display = 'none';
    return false;
};
</script>
<?php endif; ?>
0
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
10 janv. 2011 à 03:55
Alors aprés avoir chercher le problème, il faut passé par l' index avant de charger la page se qui donne : header('Location: /nom de l index/nom de la page');

Pour se qui est de la session si j' ai bien compris elle reste active mais je ne comprend pas trop sont fonctionnement . Ou sont stocké les données pour identifier sur chaque page?

Pour se qui est du cookie comment faire en sorte que le visiteur tombe sur la page charger aprés le login sans passé par l' index comme il est log par le cookie( j' ai mis le header dans le cookie) je sais pas si c est comme ça que l ' ont fais.

Me reste plus qu a mettre le contrôle sur la page type :)
0
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
10 janv. 2011 à 16:15
Pour savoir si l'utilisateur est connecté, il suffit de vérifier l'existance de la variable $_SESSION['email'].
Grâce à cette variable superglobale, tu peux récupérer les autres informations depuis la base de données.

Pour les cookies et la connexion automatique, il va falloir inclure un script dans toutes les pages.
Ce script vérifiera si l'utilisateur est connecté.
S'il ne l'est pas et que les deux cookies existe (email et mot de passe en md5), alors il suffit de procéder aux mêmes opérations que via le formulaire, et si l'adresse email et le mot de passe en cookies sont OK, alors tu stockes l'adresse email en session.
0
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
Modifié par ced3E le 10/01/2011 à 17:17
Ok meri ca donne :

<?php
session_start();
if (isset($_SESSION['email'])) {
header ('Location: index.php');
exit();
}
?>

on utilise pas le mot de passe pour la vérification ? dans la session
0
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
10 janv. 2011 à 21:05
Non, puis pour stocker l'email dans la variable $_SESSION['email'], la vérification a déjà été faite, donc, c'est sûr.
0
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
10 janv. 2011 à 21:08
ok mais je comprend pas comment blocké la page si tu peu faire un exemple merci,
0
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
10 janv. 2011 à 21:43
<?php
if(isset($_SESSION['email'])) {

} else {
header('Location: index.php');
}
?>

Donc si c est ok on fais rien on laisse la page, si c est pas ok on fais un retour a la page index.

mais aprés le log j ai que le retour index
0