Problème connexion membre

Répondre
dark-alexis
le 04/11/2008 à 22:31
dark-alexis
Voila, je viens d'apprendre le cours sur les SESSION de La Globule, les scripts marchent nickel quand on définit soit même les variables login et password, mais, quand je vais pour faire ces opération en me servant de ma BDD, cela ne veut pas fonctionner.
Pourriez-vous m'aider svp smiley

<?php

// on teste si nos variables sont définies
if (isset($_POST['login']) && isset($_POST['pwd']))
{
// On se connnecte
mysql_connect("localhost", "root", "root");
mysql_select_db("bdd");


//On protège les données
$login = mysql_real_escape_string($_POST['login']);
$pwd = mysql_real_escape_string($_POST['pwd']);

$requete1 = mysql_query("SELECT * FROM bdd WHERE login = '$login'") or die (mysql_error());
$reponse = mysql_fetch_array($requete1);

// on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
if ($reponse == $_POST['login'] && $reponse == $_POST['pwd'])
{
// dans ce cas, tout est ok, on peut démarrer notre session

session_start ();
// on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];

// on redirige notre visiteur vers une page de notre section membre
header ('location: page_membre.php');
}
else {
// Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
echo '<body onLoad="alert(\'Membre non reconnu...\')">';
// puis on le redirige vers la page d'accueil
echo '<meta http-equiv="refresh" content="0;URL=index.htm">';
}
}
else {
echo 'Les variables du formulaire ne sont pas déclarées.';
}
?>
LA GLOBULE
le 04/11/2008 à 22:37
LA GLOBULE
if ($reponse == $_POST['login'] && $reponse == $_POST['pwd'])

Ça, cela ne colle pas.
$reponse est un tableau (ta variable provient d'un mysql_fetch_array), et les clés du tableaux dépendent des champs de ta base de données. De ta table bdd plus particulièrement.

Si ton champs SQL stockant le login s'appelle 'login_bdd' et si ton champs contenant le mot de passe s'appelle 'pwd_bdd', alors, tu devras écrire :

if ($reponse['login_bdd'] == $_POST['login'] && $reponse['pwd_bdd'] == $_POST['pwd'])

Autre suggestion : avant de faire ton mysql_fetch_array, fais un mysql_num_rows pour savoir si la requête SQL retourne au moins un résultat, sinon, si l'utilisateur n'est pas trouvé en base de donnée, ton script génèrera une erreur.
dark-alexis
le 04/11/2008 à 22:49
dark-alexis
il faudrait que je mette sa ? :

$requete1 = mysql_query("SELECT * FROM bdd WHERE login_bdd = '$login' && pwd_bdd = '$pwd' ") or die (mysql_error());
$reponse = mysql_fetch_array($requete1);
LA GLOBULE
le 04/11/2008 à 22:55
LA GLOBULE
Non, ce n'est pas du tout ce que j'ai dis.
Laisse ta requête comme elle est.

Ce que je te dis, c'est que $reponse est un tableau indexé en fonction du nom des champs de ta table bdd.

Quand tu veux comparer le login / mot de passe avec ce que tu as en base, tu dois comparer le login POST avec le login que tu as en base, et le mot de passe POST avec le mot de passe que tu as en base.

Bref, $reponse étant un tableau, cela ne se fait pas en faisant :

if ($reponse == $_POST['login'] && $reponse == $_POST['pwd'])

On ne compare pas les choux et les carottes ($reponse est un tableau alors que $_POST['login'] est une chaine de caractères, de même, $reponse est un tableau alors que $_POST['pwd'] est une chaine de caractères).

Donc je me repete :

Si ton champs SQL stockant le login s'appelle 'login_bdd' et si ton champs contenant le mot de passe s'appelle 'pwd_bdd', alors, tu devras écrire :

if ($reponse['login_bdd'] == $_POST['login'] && $reponse['pwd_bdd'] == $_POST['pwd'])


(je te donne un exemple en plus :S a toi de savoir comment tu as appelé tes champs SQL)
dark-alexis
le 04/11/2008 à 23:00
dark-alexis
Ce n'est pas correcte ? ( Dsl de t'avoir fais répéter mais je comprend pas trop ce passage la ^^, je plante toujours la dessus )


//On protège les données
$login = mysql_real_escape_string($_POST['login']);
$pwd = mysql_real_escape_string($_POST['pwd']);

$requete1 = mysql_query("SELECT * FROM bdd WHERE login_bdd = '$login'") or die (mysql_error());
$reponse = mysql_fetch_array($requete1);

// on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe

if ($reponse['login_bdd'] == $_POST['login'] && $reponse['pwd_bdd'] == $_POST['pwd'])
{
// dans ce cas, tout est ok, on peut démarrer notre session

session_start ();
// on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];
LA GLOBULE
le 04/11/2008 à 23:02
LA GLOBULE
On va faire basique.

Remplace ca :
if ($reponse == $_POST['login'] && $reponse == $_POST['pwd'])

Par :
if ($reponse['login_bdd'] == $_POST['login'] && $reponse['pwd_bdd'] == $_POST['pwd'])

(mais en ne mettant pas 'login_bdd' et 'pwd_bdd', il faut que tu mettes le nom de tes champs SQL)
dark-alexis
le 04/11/2008 à 23:04
dark-alexis
c'est deja un "petit peu mieux" ^^

Ca me met : Unknown column 'login' in 'where clause'

( quand j'ai rentré mon login et pwd dans le formulaire html )
LA GLOBULE
le 04/11/2008 à 23:36
LA GLOBULE
Quel est le rapport entre ma réponse et l'erreur SQL que tu viens de nous paster ??

Tout à l'heure, tu ne l'avais pas l'erreur ? Moi je pense que si. Ou alors tout à l'heure, tu n'avais pas encore testé ton script.

Ton erreur dit que ta table SQL ne comporte pas de champ login. Par conséquent, il faut en ajouter un, ou bien si il existe et qu'il se nomme différemment, tu dois modifier en conséquence le code de ta requête.
dark-alexis
le 04/11/2008 à 23:53
dark-alexis
regarde, je fais un screen de ma bdd
et je te redonne le code que j'ai modifier :

<?php

// on teste si nos variables sont définies
if (isset($_POST['login']) && isset($_POST['pwd']))
{
// On se connnecte
mysql_connect("localhost", "root", "root");
mysql_select_db("bdd");


//On protège les données
$login = mysql_real_escape_string($_POST['login']);
$pwd = mysql_real_escape_string($_POST['pwd']);

$requete1 = mysql_query("SELECT * FROM bdd WHERE login_bdd = '$login'") or die (mysql_error());
$reponse = mysql_fetch_array($requete1);

// on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe

if ($reponse['login_bdd'] == $_POST['login'] && $reponse['pwd_bdd'] == $_POST['pwd'])
{
// dans ce cas, tout est ok, on peut démarrer notre session

session_start ();
// on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];

// on redirige notre visiteur vers une page de notre section membre
header ('location: page_membre.php');
}
else {
// Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
echo '<body onLoad="alert(\'Membre non reconnu...\')">';
// puis on le redirige vers la page d'accueil
echo '<meta http-equiv="refresh" content="0;URL=index.htm">';
}
}
else {
echo 'Les variables du formulaire ne sont pas declarees.';
}
?>



et l'image :

http://img518.imageshack.us/my.php?image=image7mp1.png
dark-alexis
le 04/11/2008 à 23:57
dark-alexis
Ooups

Je suis vraiment dsl, mais vraiment.

lors de l'enregistrement de login et pwd, je cripté le pwd avec md5
et dans les vérifications y'a aucune chose avec aucun lien avec md5

Je suis vraiment dsl smiley

Et encore merci pour ton aide et ton temps que je t'ai pris.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours