Aller au contenu

Connexion sur mon site


Etamine

Messages recommandés

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

Bonjour,

Ayant dans l'idée de créer un jeu en ligne par navigateur, je me suis retrouvé confronté au problème suivant:

Comment pouvoir se connecter sur mon site?

J'ai fais la BDD avec mySQL et on peut dorénavant s'inscrire. Oui mais quelle utilité si on ne peut se connecter? :o°

Question donc:

Comment peut-on vérifier si l'identifiant et le mot de passe correspond bien au même ID?

En espérant avoir été clair :rtfm:

Merci d'avance

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Membre, Forumeur tacheté , 37ans Posté(e)
ElNix Membre 4 891 messages
37ans‚ Forumeur tacheté ,
Posté(e)

Je ne suis pas sur d'avoir compris ton problème. Tu ne sais pas créer les champs pour entrer les identifiants ?

Lien à poster
Partager sur d’autres sites

Membre, Le Dieu Lapin, 36ans Posté(e)
Lapinkiller Membre 10 149 messages
36ans‚ Le Dieu Lapin,
Posté(e)

Bonjour

ultrasimple

il te faut un formulaire de login

dans le traitement du formualrie tu vérifie auprès de la bdd si le couple login/pass existe,

si oui tu recupère les données nécéssaire pour ton site (par exemple l'id)

et tu stocke dans la session php le fait que le membre est connecté

sinon tu affiche un message d'erreur au membre

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

Si bien sur que si. :rtfm:

Mais je ne sais pas comment vérifier si le login et le mot de passe est bien dans la base de donnée et correspond bien au même ID (à la même personne quoi...).

PS: la base de donnée est déjà créée et opérationnelle et on peut s'inscrire.

Merci Lapinkiller,Je saurais le faire d

*dans la théorie. Mais dans la prtaique...^^

pourrais tu m'expliquer le code?

Lien à poster
Partager sur d’autres sites

Membre, 44ans Posté(e)
jfsimon Membre 554 messages
Baby Forumeur‚ 44ans‚
Posté(e)

Cela dépend où est hébergé ton site.

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
Adenora Membre 5 400 messages
Posté(e)

Bonne lecture.

<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion'])) {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

	$login=$_POST['login'];
	$pass=md5($_POST['pass']);

	// Connexion à la base de données
	// $host = la machine sur laquelle le script est hébergé
	// $user = login
	// $mdp = mot de passe
	// $bdd = la base de données
	mysql_connect ($host, $user, $mdp);
	mysql_select_db ($bdd);

	// on teste si une entrée de la base contient ce couple login / pass
	$req=mysql_query("SELECT * FROM membre WHERE login='$login' AND pass_md5='$pass'");
	$ligne = mysql_num_rows($req);
	$data = mysql_fetch_array($req);

	// si on obtient une réponse, alors l'utilisateur est un membre
	if ($ligne==1) {
		session_start();
		$_SESSION['pseudo'] = $login;
		$_SESSION['id'] = $data['id'];
		// mysql_query("UPDATE membre SET connecte=".time()." WHERE login='$login'"); // On met à jour la date de la dernière connexion (facultatif)
		$erreur="Vous êtes maintenant connecté.";
	}
	mysql_close();
	// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
	else {
		$erreur="Vous vous êtes trompé dans le login ou le mot de passe.";
	}
}
else {
	$erreur="Champs vides ou champs inexistants". // A compléter
}
}
else {
$erreur="Vous faites quoi ici ?"; // A modifier
}

echo $erreur;
?>

Je vais manger, donc j'ai vite fait expliqué dans le code.

Lien à poster
Partager sur d’autres sites

Membre, 34ans Posté(e)
ipskey Membre 7 messages
Baby Forumeur‚ 34ans‚
Posté(e)

Salut Etamine,

Je te conseille le tutorial du Site Du Zéro sur le PHP qui t'expliquera tout sur ce langage et entre autre sur les sessions !

Tuto complet : http://www.siteduzero.com/tutoriel-3-14668...p-et-mysql.html

Sessions : http://www.siteduzero.com/tutoriel-3-14563...et-cookies.html

Au fil de cette lecture tu comprendras un peu mieux les systèmes de connexion en général, c'est vrai qu'au début c'est pas vraiment évident !!

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

Merci beaucoup pour toutes vos réponses!

Je vais essayer de voir tout ça.

Mais j'ai déjà lu le cours du site du zéro et je n'avais vu grand chose à ce propos. Je crois qu'il est sortit en livre seulement.

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

Merci Adenora pour ta réponse complète.

Mais cela ne marche pas. On m'indique une 'parse error' à la ligne 37 (qui correspond à la ligne du premier else).

Et j'aurais 2 ou 3 autres question sur ton code:

A quoi correspond $_POST['connexion']?

Et que veut dire la variable $data?

Si quelqu'un peut m'aider... :rtfm:

Merci d'avance.

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
Adenora Membre 5 400 messages
Posté(e)

Ah oui effectivement, j'ai fait une grosse erreur. :o°

C'est plutôt ça :

	  ...
			  $erreur="Vous êtes maintenant connecté.";
			  mysql_close();
	   }
		 //   si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son   login, soit dans son mot de passe
		 else {
			 $erreur="Vous   vous êtes trompé dans le login ou le mot de passe.";
		   ...

A quoi correspond $_POST['connexion']?

Normalement, dans ton formulaire de connexion, tu dois avoir à un endroit (bouton pour valider) :

<input type="submit" name="connexion" value="Connexion">

Ce qui veut dire : Si tu as appuyé sur le bouton Connexion, alors on peut traiter les informations.

Et que veut dire la variable $data?

"mysql_fetch_array() retourne un tableau qui contient la ligne demandée"

Ce qui veut dire que $data est un tableau qui a une ou plusieurs colonnes tels que login, md5_pass .... (dans ce cas là)

Dans ce tableau, les informations (provenant de la base de données) que tu voulais récupérer y sont stockées, c'est-à-dire l'identifiant par exemple (1, 2 ...), voire d'autres informations.

Cela peut servir, entre autres, pour les variables de sessions.

Je te conseille vivement de les utiliser d'ailleurs.

Je vais devoir aller manger :rtfm: Donc j'ai expliqué comme je pouvais.

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

Cela ne marche toujours pas. :rtfm:

J'obtiens ceci:

capturerqr.jpg

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
Adenora Membre 5 400 messages
Posté(e)

J'ai oublié un ; ici :

else {
	$erreur="Champs vides ou champs inexistants."; // A  compléter
}

Il faut mettre ça :

<?php
session_start();

Et donc enlever le session_start() que l'on trouve plus loin.

Sinon pour ton erreur, et bien, c'est un problème de connexion à ta base de données.

Si j'ai bien compris, tu fais ça en localhost.

Donc si tu n'as pas mis de mot de passe, tu devrais avoir :

mysql_connect ("localhost", "root", "");

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

En fait, ça ne change rien :o°

J'ai résolu le problème du';' et celui de la connexion à la base de données. J'ai mis le session_start() au début.

Mais il y a toujours :

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\jeu\connexion.php on line 23

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\jeu\connexion.php on line 24

Un problème de booléens à ce que j'ai compris. Mais vu que je suis pas très fort en anglais :rtfm: ...

Le problème se situerait donc vers là:

  // on teste si une entrée de la base contient ce couple login / pass
	$req=mysql_query("SELECT * FROM infoscompte WHERE login='$login' AND pass_md5='$pass'");
	$ligne = mysql_num_rows($req);
	$data = mysql_fetch_array($req);

	// si on obtient une réponse, alors l'utilisateur est un membre
	if ($ligne==1) {

Si tu pouvais m'aider encore une fois... :yahoo:

Merci pour tes réponses. :o°

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
Adenora Membre 5 400 messages
Posté(e)

Pour ma part, ça fonctionne chez moi.

Donc pour voir ton erreur, fait ceci (il doit y avoir un soucis avec la requête) :

$req=mysql_query("SELECT * FROM infoscompte  WHERE login='$login' AND pass_md5='$pass'") or die (mysql_error());

Et dis-moi ce qu'il y a d'écrit.

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

J'obtiens ceci:

Unknown column 'pass_md5' in 'where clause'

J'ai essayé de supprimer les 'md5' (Je n'ai pas trop compris à quoi ça sert d'ailleurs...) et ça me marque page web inaccessible.

Voilà! J'espère avoir donné les bonnes indications :o°

Moi je vais me coucher :rtfm:

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
Adenora Membre 5 400 messages
Posté(e)

Cela veut dire qu'il n'existe pas la colonne pass_md5 dans ta base de données.

Donc tu as du nommer ta colonne autrement.

Remplace "nom_colonne_pass" par le nom de la colonne où sont stockés les mots de passe.

$req=mysql_query("SELECT * FROM  infoscompte  WHERE login='$login' AND nom_colonne_pass='$pass'");

Et il ne faut surtout pas toucher au md5 suivant :

$pass=md5($_POST['pass']);

Cela sert à encoder les mots de passe.

A savoir que dans ta page inscription, il faut encoder les mots de passe de la même manière. Sinon, la connexion ne marchera pas.

Lien à poster
Partager sur d’autres sites

Membre, 41ans Posté(e)
Mopral Membre 12 057 messages
Baby Forumeur‚ 41ans‚
Posté(e)

Ah ben ca, c'est marrant, en cherchant comment encoder les mots de passe pour mon site, je tombe sur toi qui m'aide, trop fort :rtfm:

Merci de ton aide, du coup \o/

Lien à poster
Partager sur d’autres sites

Membre, Le Dieu Lapin, 36ans Posté(e)
Lapinkiller Membre 10 149 messages
36ans‚ Le Dieu Lapin,
Posté(e)

tiens te voilà toi XD

Lien à poster
Partager sur d’autres sites

Membre, 31ans Posté(e)
Etamine Membre 92 messages
Baby Forumeur‚ 31ans‚
Posté(e)

Merci, je n'ai plus le problème de booléens. Mais il me met tout le temps:

"Vous vous êtes trompé dans le login ou le mot de passe."

Alors que je suis sûr de ne pas m'être trompé.

Pareil, quand je veux m'inscrire, ça me marque tout le temps que le login ou l'adresse email est déjà pris.

Le problème doit donc être commun aux 2 pages, mais je ne vois pas où.

Je te met le code source des 2 pages. Si tu aurais le temps de regarder... :rtfm::o°

Page inscription:

<?php
$login = $_POST['pseudo'];
$email = $_POST['email'];
$pass = md5($_POST['mdp']);
// Connexion à la base de données
$host = "localhost"; // voir hébergeur
$user = "root"; // vide ou "root" en local
$pass = ""; // vide en local
$bdd = "jeu"; // nom de la BD
// connexion
@mysql_connect($host,$user,$pass)
  or die("Impossible de se connecter");
@mysql_select_db("$bdd")
  or die("Impossible de se connecter");

if ((isset($_POST['pseudo']) && !empty($_POST['pseudo'])) && (isset($_POST['mdp']) && !empty($_POST['mdp'])) &&(isset($_POST['email']) && !empty($_POST['email']))) 
{
	$req = mysql_query("SELECT * FROM infoscompte WHERE login!='.$login.' OR email!='.$email.'") or die(mysql_error());;
	$ligne = mysql_num_rows($req);
	$data = mysql_fetch_array($req);

	// si on obtient une réponse, alors le login ou l'email n'est pas déjà utilisé.
	if ($ligne==1) 
	{
//On insère les informations dans la base de données.		
$req = $bdd->prepare('INSERT INTO infoscompte(login, pass, email) VALUES(:login,:pass, :email)');
$req->execute(array(
			'login' => $login,
			'pass' => $pass,
			'email' => $email,
			));
$req = $bdd->prepare('INSERT INTO infoscompte(pseudo, lvl, force,  agilité, intelligence, constitution, or) VALUES(:pseudo,1, 1, 1, 1, 1, 1000)');
$req->execute(array(
			'pseudo' => $login,

			));			
echo 'Vous avez bien été inscrit à Heroes\'Kingdom!';// à compléter. Il faut ouvrir une session.
	}
	//Si le login ou l'adresse email est déja pris:
	else
	{
	echo 'le login ou l\'adresse e-mail est déjà pris. Veuiller en choisir un autre.<br>

	<a href="inscription.php" title="cliquez ici pour revenir au formulaire de connexion">Retour</a>';

	}
}
else
{
?>
Euh... Il faudrait peut-être remplir tout le formulaire. Non?<br>
<a href="inscription.php" title="cliquez ici pour revenir au formulaire de connexion">Retour</a>
<?php
}

?>

page connexion:

 <?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion'])) {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

	$login=$_POST['login'];
	$pass=md5($_POST['pass']);

	// Connexion à la base de données
	// $host = la machine sur laquelle le script est hébergé
	// $user = login
	// $mdp = mot de passe
	$bdd = "jeu";
	mysql_connect ("localhost","root", "");
	mysql_select_db ($bdd);

	// on teste si une entrée de la base contient ce couple login / pass
	$req = mysql_query("SELECT * FROM infoscompte WHERE login='$login' AND pass='$pass'");
	$ligne = mysql_num_rows($req);
	$data = mysql_fetch_array($req);

	// si on obtient une réponse, alors l'utilisateur est un membre
	if ($ligne==1) {

		$_SESSION['pseudo'] = $login;
		$_SESSION['id'] = $data['id'];
		// mysql_query("UPDATE membre SET connecte=".time()." WHERE login='$login'"); // On met à jour la date de la dernière connexion (facultatif)
		$erreur="Vous êtes maintenant connecté.";
	mysql_close();
	}
	// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
	else 
	{
		$erreur="Vous vous êtes trompé dans le login ou le mot de passe.";
	}
}
else {
	$erreur="Champs vides ou champs inexistants."; // A compléter
}
}
else {
$erreur="Vous faites quoi ici ?"; // A modifier
}

echo $erreur;
?>

Pour la page connexion, j'ai mis le session_start() avant la balise <html>.

Voilà, c'est sûrement un problème tout bête mais je n'arrive pas à le voir. :yahoo:

Merci d'avance.

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
Beni Membre 70 messages
Baby Forumeur‚
Posté(e)

Tu peux te connectés sur ton site avec ton hébergeur, ou FileZilla si tu l'utilises .

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×