c'est quoi le mieux?

Eléphant du PHP | 124 Messages

14 mars 2006, 13:29

Bon j'me suis cogné tout phpdebutant.com...ça m'a appris tout un tas de truc tres interressant mais maintenant j'en ai plein la tête...

J'suis en train de chercher a comparer une variable POST['login'] aux champs correspondants de ma DB (login)...
Je pense qu'il faut utiliser une boucle me permettant de définir ligne apres ligne si ma variable est égale au login de la base.
Est ce qu'il vaut mieux créer une nouvelle variable égale aux premier login de ma base puis qui sera incrémentée à chaque tour de boucle (ce que je ne sais pas faire), ou est ce que je peux directement comparer $login aux données de ma table sans avoir à créer une nouvelle variable (ce que je ne sais pas faire non plus)...
help me :(

Mammouth du PHP | 768 Messages

14 mars 2006, 13:49

Je pense qu'il faut utiliser une boucle me permettant de définir ligne apres ligne si ma variable est égale au login de la base.
Pourquoi faire une boucle ?
Dans ta table utilisateur tu dois avoir un champ login et mot de passe.
Il suffit de faire un SELECT de la ligne dont le login et le mot de passe corresponde à ce que le visiteur tape pour se connecter.
Un exemple ci dessous
<?php
$login = $_POST['login']; // login tapé dans le formulaire
$pass = $_POST['pass']; // mot de passe tapé dans le formulaire
$sql = "SELECT champ1, champ2, champ3 FROM table_utilisateur WHERE login = '".$login."' AND pass = '".$pass."'";
$req = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($req) === 1){ // Si la requête retourne 1 enregistrement
   echo 'Bienvenue '.$login;
}
else
{
   echo 'Login inconnu';
}
?>
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphant du PHP | 124 Messages

14 mars 2006, 14:09

je pense faire une boucle tout simplement parcque le nombre de login recensés dans ma base est important et surtout qu'il est variable.
Je n'ai pas l'intention de retourner dans le code tapper "champs x" à chaque nouvelle inscription...

Mon idée de boucle est censée permettre de faire la comparaison de la ligne 1 à la ligne x quelque soit x...
Apres peut être que je me trompe comme je le dit tout le temps je suis débutantdébutant...a ce moment la faudrait me reéxpliquer....svp :wink:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 mars 2006, 14:16

Le SQL est un langage conçu spécialement pour retrouver des informations dans ta base de données. A chaque fois que tu lances une requête, il va parcourir toute la table (c'est pas tout à fait vrai, mais ça ira pour l'exemple ;)) à la recherche des enregistrements qui correspondent à ta recherche.

En gros, c'est directement lui qui va boucler et te retourner les lignes qui vont bien (quand il y en a) :)

Voici ce que donne la requête de Mario en français :
"SELECT champ1, champ2, champ3 " = Sélectionne les champs champ1, champ2 et champ3
"FROM table_utilisateur" = de la table table_utilisateur
"WHERE login = '".$login."'" = pour lesquels le champ login à la valeur de $login
" AND pass = '".$pass."'"; = et le champ pass à la valeur de $pass

Il ne devrait donc te retourner qu'un seul enregistrement (voire pas du tout) et il ne te reste plus qu'à l'exploiter comme bon te semble :)

Eléphant du PHP | 124 Messages

14 mars 2006, 14:31

Ok merci j'ai compris ce que je ne comprenai pas...c'est un grand pas en avant
! j'essaye ça et je reviens au premier problème :wink:

Eléphant du PHP | 124 Messages

14 mars 2006, 14:51

Ok voila la m---e que j'ai réussi à pondre...(j'ai même pas été foutu de vous le mettre en couleur 8-[..comment on fait?)
J'estime qu'il ya entre 10 et 15 errreur 8) ...a vous!
<?php
$login = $_POST['login'];
$password = $_POST['password'];

"SELECT "Login_user", "Password_user";"
"FROM "user";"
"WHERE "Login_user" = "$login" AND "Password_user" = "$password""

if (mysql_num_rows($req) === 1)
{
echo 'Bienvenue '.$login;
}
else
{
echo 'Login inconnu';
}
?>

Mammouth du PHP | 768 Messages

14 mars 2006, 14:56

<?php
$login = $_POST['login'];
$password = $_POST['password'];

$sql = "SELECT Login_user, Password_user FROM user WHERE Login_user = '".$login."' AND Password_user = '".$password."'";

if (mysql_num_rows($req) === 1)
{
   echo 'Bienvenue '.$login;
}
else
{
   echo 'Login inconnu';
} 
?>
pas besoin de mettre des " entre les nom de champ MySQL.
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphant du PHP | 124 Messages

14 mars 2006, 15:16

merci mario
alors maintenant il n'ya plus d'erreur de syntaxe mais j'ai beau tapper 20 fois un bon login et le pass qui va avec ça m'affiche toujours "login inconnu"!
soit ya une erreur dans la clause if, ce qui m'étonnerait, soit dreamweaver n'envoi pas la requète à ma table parcque la liaison n'est pas faite....pourtant elle est bien affichée dans la fenêtre base de donnée!
hmmm...comprend po!

Mammouth du PHP | 768 Messages

14 mars 2006, 15:17

<?php 
$login = $_POST['login']; 
$password = $_POST['password']; 

$sql = "SELECT Login_user, Password_user FROM user WHERE Login_user = '".$login."' AND Password_user = '".$password."'"; 

$req = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($req) === 1) 
{ 
   echo 'Bienvenue '.$login; 
} 
else 
{ 
   echo 'Login inconnu'; 
} 
?> 
sorry, j'ai oublié d'exécuter la requête (voir ligne mysql_query)
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphant du PHP | 124 Messages

14 mars 2006, 15:28

...alors maintenant ça me met:
Access denied for user 'ODBC'@'localhost' (using password: NO)

....comment ça j'ai pas le droit c'est MOOOAAAA THE big boss

Au passage si vous pouviez me dire comment on colle un bout de code en couleur...merki

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

14 mars 2006, 15:36

Ok voila la m---e que j'ai réussi à pondre...(j'ai même pas été foutu de vous le mettre en couleur 8-[..comment on fait?)
J'estime qu'il ya entre 10 et 15 errreur 8) ...a vous!
<?php
$login = $_POST['login'];
$password = $_POST['password'];

"SELECT "Login_user", "Password_user";"
"FROM "user";" 
"WHERE "Login_user" = "$login" AND "Password_user" = "$password""

if (mysql_num_rows($req) === 1)
{
   echo 'Bienvenue '.$login;
}
else
{
   echo 'Login inconnu';
} 
?>
Pour les couleurs, c'est le bouton PHP, entre Quote et Code (ou mettre les BBCode [ php ] ton code [ /php ]

Sinon mario a raison, l'ordre est :

1- On récupère les infos du formulaire.
2- On construit la requête.
2bis - En phase de dév on affiche la requête et on la copie-colle dans PHPMyAdmin.
3- On pose la requête au serveur MySQL.
4- On exploite les résultats.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

14 mars 2006, 15:53

...alors maintenant ça me met:
Access denied for user 'ODBC'@'localhost' (using password: NO)
....comment ça j'ai pas le droit c'est MOOOAAAA THE big boss
Comment lui as tu dit qui se connectait à la BDD ? (login, pass, etc...)
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 124 Messages

14 mars 2006, 16:07

ben...je lui ai pas dit que je voulai que qui que ce soit se connecte...je veux juste comparer les données du formulaire avec celles de ma base pour vérifier les login/password..

Et dreamweaver reconnait bien ma base puisque j'y accede a partir de dreamweaver!!

j'ai pas mis autre chose que le bout de code donné par mario

Jcomprend pas! :shock:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

14 mars 2006, 16:23

Dans DMW tu as paramétré le login/pass pour ta base de données?

Vérifie.
Affiche ta requête (avec echo $requete;)
Teste la toute seule.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 124 Messages

14 mars 2006, 16:42

ok je vai faire tout ça mais avant pourriez vous m'expliquer les deux lignes suivantes:
$req = mysql_query($sql)or die(mysql_error());
if (mysql_num_rows($req) === 1)
je déteste bidouiller des trucs que je comprend pas!

Autre chose, le serveur qui héberge ma base est protégé par mot de passe...peut être que le problème vient de la...comment faire pour indiquer le bon mot de passe dans le code...si c'est possible bien sur..?