Connexion d'un membre sur mon site

Fermé
bizerte77 - 28 mai 2009 à 18:07
 bizerte77 - 9 juin 2009 à 21:26
Bonjour,

Je suis en train de créer un site, j'ai mis en place un formulaire d'inscription qui fonctionne très bien. J'aimerai maintenant que l'internaute qui s'est inscrit puisse se connecter. Je suis débutante en php.

C'est là que ça coince... Je ne sais pas comment coder pour que si le pseudo et le mot de passe sont ok, la personne est connecté, sinon on lui affiche un message "erreur de pseudo ou de mot de passe".

Je crois savoir qu'il faut mettre <?php session_start(); ?>

Mais en suite je ne sais pas du tout comment m'y prendre...

Merci pour votre aide précieuse

Bonne journée/soirée
A voir également:

12 réponses

Nirvv Messages postés 25 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 13 juin 2009 1
28 mai 2009 à 18:37
Session_Start(); permet de créer des sessions pour "garder" en quelque sorte l'utilisateur connecté.
Pour vérifier si l'utilisateur a rentré de bons identifiants, il faut que tu fasses un SELECT dans ta BDD.

-La personne s'est inscrite, son pseudo et mot de passe sont enregistrées dans la base de données.
-Il se connecte, tu fais une requete SQL avec un "select" : Selectionner le pseudo et le pass (ou tout les champs avec * , comme tu veux), OU le pseudo = pseudo entré ET le pass = pass entré.
-Tu recupères ensuite ta requete dans un array avec mysql_fetch_array !
-Et personnellement, j'utilise ce test pour voir si la requete SQL a donner un résultat correcte :
if (mysql_num_rows($ta_variable) > 0)
...

La fonction mysql_num_rows retourne le nombre de ligne d'un resultat MySQL. Donc si c'est supérieure a 0, c'est que ta requete a renvoyé plus d'une ligne et donc que c'est correct.
Tu peux ensuite redirigé la personne sur une page et maintenant creer une session.

Je vais te donner un petit exemple concret de tout ce que j'ai dis pour que ce soit clair ^^'.

La personne s'est inscrite.
Il se connecte :


if(isset($_POST['pseudo']) && isset($_POST['pass']))
{
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$pass = mysql_real_escape_string(htmlspecialchars($_POST['pass']));

$requete = mysql_query("SELECT * FROM membres WHERE pseudo='$pseudo' and pass='$pass'") or die(mysql_error());
$connexion = mysql_fetch_array($requete);

if (mysql_num_rows($requete) > 0)
{
$_SESSION['pseudo'] = $_POST['pseudo'];
header('location:espaceprive.php');
}
else
{
?>Pseudo ou mot de passe incorrect.<?php
}
}


Isset : permet de vérifié si les variables existent (donc si l'utilisateur a rentré pseudo/pass)
mysql_real_escape_string et htmlspecialchars permettent d'eviter les injections sql (et j'en profite pour ecrire que la variable $pseudo = pseudo entré ($_POST['pseudo']). Ca simplifie la tache.
Ensuite j'effectue ma requete SQL, en réutilisant les variables $pseudo et $pass. (or die permet de signaler une erreur au cas ou dans la requete).
Bon bin mysql_fetch_array permet de creer un array (donc tableau), de ta requete pour en quelque sorte "organiser" les données reçues par la requete.

mysql_nums_rows je l'ai expliqué plus haut ^^'.

Dans ma condition, si elle est correcte, je creer une variable de type SESSION (faut savoir que SESSION est en quelque sorte un grand "tableau", et qu'entre crochets [] on peut mettre une "variable" et donner un nom a chacune de nos sessions).
J'ecris $_SESSION['pseudo'] = $_POST['pseudo'];
Comme ça dans ta page espaceprive.php (dans mon exemple), si tu ecris : "Bienvenue $_SESSION['pseudo'] !";. Ca affichera le pseudo de la personne connecté !

Ensuite avec header , je redirige l'utilisateur sur une page précise (je pense que t'as compris le fonctionnement :p ).

Dans le ELSE, si le pseudo et pass entré n'est pas trouvé dans la BDD, c'est que les ID sont incorrects : on affiche un mess d'erreur.
Ah oui, tu dois aussi mettre le session_start(); tout en haut de ta page de connexion. (pour pouvoir creer la session :) ).
Ensuite, sur la page "espaceprive.php" tu mets un <?php session_start(); ?> tout au début de ton code ! Meme avant le code html ! (C'est ce que je fais en tout cas !)
Tu peux faire ensuite : SI la variable $_SESSION['pseudo'] existe.. t'ouvre les accolades sur toute la longueur de ton contenu, et tu mets le contenu que l'utilisateur peut voir ! SINON tu affiches par exemple "Vous n'etes pas connecté" !
Mais je te laisse faire ça :o

Voila terminé les explications ^^' (Et mon long post... Je m'étale trop souvent..).
Mais j'espere avoir été clair, vu que tu débutes :)

Si tu as d'autres questions, hésite pas ! (Sur le code ou les explications que j'ai donné, ou autre !)

Bonne continuation
0
Bonjour,

J'ai essayé ce que tu m'as dit mais ça ne fonctionne pas, il ne se passe rien quand je click sur connexion...

Peut-être ai-je fait des erreurs, car je crois que tu ne m'as pas tout écris?

Je ne comprends pas cette ligne :
?>Pseudo ou mot de passe incorrect.<?php 
Tu ferme le php que tu as oublié d'ouvrir et tu ouvre un php qui n'est pas fermé... pourquoi?

Je te remercie pour ton aide

Bonne journée
0
Nirvv Messages postés 25 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 13 juin 2009 1
31 mai 2009 à 16:29
Au sujet du ?> que je ferme, en faite faut considérer qu'il est ouvert avant car je t'ai seulement donné un bout de code.
En faite quand j'ecris du texte je l'écris constamment en html, j'utilise quasiment jamais "echo", apres ça c'est ma façon de programmer ^^'.
Donc en faite ça donne ça :
<?php
.... la partie de code
?> Le texte qui est donc en xhtml <?php
Et je réouvre la balise php pour continuer ma partie de code php.
Si tu fais un echo ça change strictement rien, c'est pareil ^^.

Apres le bout de code que je t'ai donné, en effet c'est qu'un morceau, mais il y a une bonne partie du "principal".
Peut-être que je pourrais un peu mieux t'expliqué le système sur msn : movy_e@hotmail.fr
(C'est mon adresse).

Car ici, ça va faire un peu long et moins facile de t'expliquer le code que j'ai mis. Si tu ne souhaites pas m'ajouter, dis le moi, j'essayerais de t'expliquer au mieux ici ^^'.

PS :
Si tu prends mon exemple de code, essaye de faire ça pour ton formulaire :
<form method="post">
<label>  Pseudo
<input type="text" name="pseudo" class="form" />
</label>
<br />
<label>  Pass   
<input type="password" name="pass" class="form" />
</label>
<p>
<label>
<input type="submit" name="button" value="Connexion"/>
</label>
</p>
</form>

Quand tu cliques sur le bouton "connexion", comme il n'y a pas d'élément "action" (dans le <form>) : la meme page se recharge.
Or si tu utilises mon code plus haut, SI le pseudo/pass entré est correct, ça redirige vers une page avec un "header: location..." (J'ai expliqué ça dans mon ancien post ^^').

Je sais que je suis pas très claire, mais j'ai un peu du mal a expliqué comme ça, alors hésite pas pour mon msn ^^'.

Bonne journée
0
Bonjour,

Merci mais j'ai toujours de mal à comprendre...

Ce qui m'aiderai si cela ne te dérange pas c'est de m'écrire le code en entier tel qui doit être écrit et m'expliquer les principales lignes... Je comprends mieux quand je vois le code déjà prêt avec quelques explications. C'est même comme ça que j'ai compris pour relier mon formulaire à la base de donnée...

Et si là je ne comprends toujours pas, je te rajouterai sur msn pour plus d'explications...

C'est dur le php quand on débute :o(

Merci

Bonne journée

PS: ma base de donnée s'appelle : gratuit et ma table s'appelle connexion et je suis en local
0

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

Posez votre question
Juste comme ça, Ca ne sert à rien de filer des gros patés de code, les débutants ne saisiront pas le sens du langage ni même le concept.
0
Pour te guider:

Page 1 : Formulaire de connexion, avec un bouton de validation.

Page 2 : Page qui récolte les informations rentrées depuis le formulaire Page 1:
1/ Récupérer les informations (pseudo, mot de passe)
2/ Requête SQL pour déterminer :
-si le pseudo existe dans la base
-si il existe, comparer le mot de passe associé au pseudo dans la Base de données et le mot de passe rentré dans le formulaire Page 1

3/ Si les deux mots de passe sont les mêmes (en gros, si l'utilisateur a rentré le bon mot de passe), on créé une "session", avec comme information d'identification personnel le pseudo.
0
Détails:

Page 1 :
On peut rentrer dans le détail:
-Si l'utilisateur n'est pas connecté (si aucune session n'est établie), on affiche le formulaire de connexion
-Sinon, on affiche la page d'accueil de l'utilisateur.
0
Page 1 :
Savoir faire un formulaire:
<form name="login" action="page2.php" method="POST" >
// Formulaire: input type text/password
</form>

Page 2 :
Savoir récupérer des données depuis un formulaire:
$pseudo= $_POST[pseudo'];
$mdp= $_POST['mdp'];

Savoir faire une requête:
$requete = "SELECT pseudo, motdepasse FROM..."; // Par rapport au pseudo
// blabla MySQL
// Récupérer le pseudo et mdp.
// Si la requête ne renvoie rien, c'est que le pseudo n'existe pas

Tests de login:
Si le pseudo n'existe pas, erreur de login
Sinon, si le mot de passe n'est pas bon, erreur de login
Sinon, si il est bon, login
0
Maintenant que les grandes lignes sont tracées, au boulot. On ne va pas te macher le travail, et on apprend mieux par soi-même qu'en ayant tout. :)
0
Bonjour,

Merci je vais voir ça...si j'ai un problème je reviendrai vous voir...

Bonne journée
0
Bonjour,

Voilà le code que j'ai écris, le problème c'est que si l'internaute entre bien son pseudo et son mot de passe, j'aimerai que la page index.php ( le" formulaire" pour se connecter se trouve dans le header) se recharge et à la place de ce "formulaire" on y trouve : "Bonjour pseudo de l'internaute et déconnexion".

Ou alors si le pseudo et/ ou le mot de passe ne sont pas correct, j'aimerai (et là je vois pas comment faire) qu'au niveau du contenu de ma page (là où le blabla change en fonction du menu :
<div id="contenu">
<?php
if (empty($_GET["contenu"])) include ('pages/accueil.php');
else include('pages/'. $_GET['contenu'].'.php');
?>
</div>

j'espère que c'est clair...)

Donc je voudrai qu'à cet endroit on affiche comme quoi le compte n'est pas reconnu, erreur dans le pseudo et/ ou mot de passe et on affiche en dessous de ce texte le "formulaire" de connexion : identifiant, mot de passe et connexion, et également en dessous de ce formulaire "pseudo ou mot de passe oublié?".

Vous allez voir que mon code ne va pas forcément dans le sens que je veux car je ne sais pas comment m'y prendre...

Si vous connaissez une autre méthode plus simple à faire que ce que je veux n'hésitez pas à m'expliquer

Donc voici mon code:

<?php
if (isset($_POST['connexion']) && $_POST['connexion'] == 'connexion') {
if ((isset($_POST['pseudo']) && !empty($_POST['pseudo'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('gratuit', $base);

$sql = 'SELECT count(*) FROM inscription WHERE pseudo="'.mysql_escape_string($_POST['pseudo']).'" AND pass="'. mysql_escape_string($_POST['pass']).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);

mysql_free_result($req);
mysql_close();

if ($data[0] == 1) {
session_start();
$_SESSION['pseudo'] = $_POST['pseudo'];
exit();
}

elseif ($data[0] == 0) {
$erreur = 'Compte non reconnu.';
}

else {
$erreur = 'Probème dans la base de données.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>

<div style="padding-top:93px; color:#FFF">

<form name="login" action="index.php" method="POST" >

<label for="pseudo" style="padding-left: 5px"> Identifiant </label>
<input type="text" name="pseudo" id="pseudo" maxlength="30"/>

<label for="pass" style="padding-left: 5px;"> Mot de passe </label>
<input type="password" name="pass" id="pass" maxlength="30" />

<input type="submit" name="connexion" id="connexion" value="connexion" />
</form>

</div>

</body>
</html>

Dans le action du formulaire, je ne sais pas s'il faut mettre index.php ou autre chose...

Merci pour votre aide très précieuse...

Bonne journée/ soirée
0
Bonjour,

Il n'y a plus personne pour m'aider :o(

Bonne journée/soirée
0