JeuWeb - Crée ton jeu par navigateur
Connexion - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Connexion (/showthread.php?tid=5182)

Pages : 1 2 3


Connexion - My Airport - 19-01-2011

Bonjour ,

j'ai un petit soucis avec mon code de connexion . L'inscription fonctionne mais après la connexion est impossible .

Voici le code :


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

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

// on teste si une entrée de la base contient ce couple login / pass
$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_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();

// si on obtient une réponse, alors l'utilisateur est un membre
if ($data[0] == 1) {
session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: membre.php');
exit();
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
elseif ($data[0] == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème Smile
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>

Et voici le Formulaire :

<form action="index.php" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
<input type="submit" name="connexion" value="Connexion">
</form>
<a href="inscription.php">Vous inscrire</a>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>

En effet il m'affiche Compte non reconnu ( J'ai pourtant remplier pour la Connexion avec MySQL mais je ne souhaite pas l'afficher )

Voilà
Merci


RE: Connexion - Anthor - 19-01-2011

Debuggage de $data ?


RE: Connexion - Myrina - 19-01-2011

Le mot de passe est stocké de quelle manière à l'inscription ? hash MD5?


RE: Connexion - My Airport - 19-01-2011

Oui avec hash MD5


RE: Connexion - atra27 - 19-01-2011

a quoi sa sert de faire un count?
Fait un select id WHERE pseudo=le pseudo AND password=md5(password) LIMIT 1

Ensuite si ta requete te retoune un $data vide, il n'y a pas de compte joueur associé (mauvais login/mdp), sinon, si l'id est différent de 0 alors t'as directement l'id du joueur pour le stocker en bdd et pour faire tes requetes dans les autres pages (L'index de l'autoincrement est plus rapide qu'un index sur un varchar)

Un count est une auvais méthode parce que mysql a a parcourir TOUTE la table pour trouver les occurences, sachant que tu en aua jamais plus d'une (sinon si ta deux joueurs avec le méme pseudo, c'est que ta des virrif a l'inscription qui manquent et sa va te poser des pb plus tard)


RE: Connexion - My Airport - 19-01-2011

J'ai essayer de le faire cela m'affiche une erreur . J'ai du me tromper quelque part .


RE: Connexion - atra27 - 19-01-2011

Et sans le code ou l'erreur on fait comment?


RE: Connexion - Jeckel - 19-01-2011

Essaie déjà sans le mot de passe, juste en vérifiant le login... histoire d'être sûr que le problème ne vient pas du Hash...

Entre parenthèse le MD5 te génère une chaine "sûr", un mysql_escape_string dessus n'est pas spécialement utile (mais normalement ça ne devrait pas causer de problèmes)


RE: Connexion - Viciousity - 19-01-2011

Fin maintenant avis personnel mais un MD5 c'est vraiment le minimum pour la sécurité :S
Le mieux étant d'utiliser un salt Smile


RE: Connexion - Argorate - 19-01-2011

Un md5 seul, si tu n'as pas une clé "complexe", ça vaut plus rien, il existe des tables de conversion sur le net qui te permettent d'avoir le décryptage assez facilement.
Vaut mieux ajouter quelques barrière de sécurité en plus^^