Problème Notice: Undefined index

Fermé
Von_Kavalier Messages postés 23 Date d'inscription mardi 11 mars 2014 Statut Membre Dernière intervention 21 octobre 2014 - Modifié par Von_Kavalier le 12/03/2014 à 08:09
Von_Kavalier Messages postés 23 Date d'inscription mardi 11 mars 2014 Statut Membre Dernière intervention 21 octobre 2014 - 14 mars 2014 à 18:12
Bonjour, comme beaucoup j'ai cette erreur et je ne sais pas comment la traiter, je suis débutant en php et malgré des recherches je n'arrive pas à résoudre ce problème.
L'erreur se situe à la ligne de vérification de la concordance des mots de passe. Le message qui s'affiche sur la page d'après mon code est : "mauvais mot de passe pour cet utilisateur" et pas un autre. Merci de votre aide.
Voici mon code :

function login() {
$pass= (isset($_POST['pass'])) ? mysql_real_escape_string($_POST['pass']) : NULL;
// Si on a soumit le formulaire (si on a cliqué sur "Se connecter")
if(isset($_POST['go_login'])) {

// Si les deux champs ne sont pas vides
if(!empty($_POST['login']) || !empty($_POST['pass'])) {

// On éxécute une requête pour détecter si le login entré existe dans la base
$query = mysql_query("SELECT * FROM users WHERE login = '".$_POST['login']."'");

// Si on a un résultat => il existe
if(mysql_num_rows($query) == 1) {
$user = mysql_fetch_object($query);


// On vérifie la concordance des mots de passe
if(($_POST['pass']) == $user->pass) {

// Si on arrive jusque ici c'est que le couple login / mot de passe est résolu
// On lance donc la session

session_start();
$_SESSION['id'] = $user->id;
$_SESSION['login'] = $user->login;
echo 'gg le g';

} else {
echo 'Mauvais mot de passe pour cet utilisateur.';
}

} else {
echo 'Ce login n\'existe pas dans notre base.';
}
} else {
echo 'Vous devez remplir tous les champs !';
}
}

}
?>

1 réponse

flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
Modifié par flokocha le 12/03/2014 à 10:59
Salut,

Vu le message d'erreur que tu obtiens, je penche à vue de nez pour deux pistes :
- soit $_POST['pass'] n'est pas défini (au passage, tu crées une variable $pass pour gérer ce cas mais tu ne l'utilises ensuite nulle part dans ton script)
- soit il n'y a pas de colonne nommée 'pass' dans ta table 'users'.

Si ce n'est pas ça, et pour aider à comprendre le problème, donne de manière complète la notice qui s'affiche et que tu as mise en titre de ton post. Elle doit t'indiquer un numéro de ligne et la variable concernée.


PS : Tu réalises un mysql_real_escape_string sur le password, mais c'est le login que tu utilises dans ta requête... Et comme tu utilises de manière brute le $_POST['login'] dans ta requête, elle est vulnérable. Rien à voir avec ton problème, mais je te le signale pour information.
0
Von_Kavalier Messages postés 23 Date d'inscription mardi 11 mars 2014 Statut Membre Dernière intervention 21 octobre 2014 1
12 mars 2014 à 14:47
Merci de ta réponse, il y a bien une colonne 'pass' dans ma table, c'est la premiere chose à laquelle j'ai pensé, je vais essayer de créer la variable puis je te tiendrais au courant.
Pour l'instant j'ai des problemes avec le serveur mais dès que c'est réglé je répondrais.

PS: Niveau sécurité je m'en fiche c'est un projet d'école, et ils iront pas vérifier.
0
Von_Kavalier Messages postés 23 Date d'inscription mardi 11 mars 2014 Statut Membre Dernière intervention 21 octobre 2014 1
14 mars 2014 à 14:01
Non, la création de la variable ne change rien et affiche toujours la même erreur, voilà le message d'erreur complet:

Notice: Undefined index: pass in F:\wamp\www\projet\functions.php on line 23
Call Stack
# Time Memory Function Location
1 0.0010 144592 {main}( ) ..\login.php:0
2 0.0190 156112 login( ) ..\login.php:14



La ligne 23 est celle-ci :
// On vérifie la concordance des mots de passe
if(($_POST['pass']) == $user->pass) {
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
14 mars 2014 à 14:04
On en revient toujours au même point, il faut utiliser $pass et non $_POST['pass'].

Tu as défini $pass à null si $_POST['pass'] n'existe pas, mais ensuite tu ne l'utilises pas...
0
Von_Kavalier Messages postés 23 Date d'inscription mardi 11 mars 2014 Statut Membre Dernière intervention 21 octobre 2014 1
14 mars 2014 à 14:42
Quand je met $pass à la place de $_POST['pass'] je n'ais plus l'erreur mais le message affiché est toujours : "Mauvais mot de passe pour cet utilisateur"
0
Von_Kavalier Messages postés 23 Date d'inscription mardi 11 mars 2014 Statut Membre Dernière intervention 21 octobre 2014 1
14 mars 2014 à 14:58
En utilisant ce code evidemment il en retourne "non"

if (isset($_POST['pass']))
{
echo 'oui';

} else
{
echo 'non';
}
0