Probleme Php&Mysql

Probleme Php&Mysql - PHP - Programmation

Marsh Posté le 07-08-2002 à 11:26:51    

Bonjour à tous,
 
J'ai quelques questions de débutant à propos de PHP et MySQL. J'essaye de faire un système d'authentification sur une page Web avec une base MySQL derrière. Elle contient plusieurs tables dont une qui se charge de stocker les logins et passwords des utilisateurs.
 
Pour commencer, je récupère les données du formulaire d?authentification avec la variable $_POST et je les affecte  à $login et $passwd. Je me connecte au serveur MySQL et je sélectionne la base concernée. Ensuite, je fais la requête ci-dessous :
 
$result = mysql_query('SELECT login, passwd FROM compte WHERE login = \'', $login, '\' AND passwd = \'', $passwd, '\';';) or die("Echec durant la requête à la base MySQL" );
 
A l?aide de la fonction mysql_num_row(), je peux  savoir le nombre de ligne retourné par la requête. Si le nombre de ligne est 0, l?authentification est incorrecte. Si c?est 1, l?authentification est un succès. Sinon c?est qu?il y a des doublons, ce qui n?est, en théorie , pas possible comme le champ login est une clé primaire.
 
Le problème c?est que MySQL répond avec l?erreur :
 
Warning: Wrong parameter count for mysql_query() in /Library/WebServer/Documents/checkid.php on line 11
Echec durant la requête à la base MySQL
 
J?ai beau essayer de chercher à résoudre le problème mais je n?ai rien trouvé de concret. Si une âme charitable pourrai m?aider, ce serai vraiment (très) sympa.
 
Mise à par cela, que pensez-vous de ce système d?authentification rudimentaire? Est-ce qu?il y a une meilleure méthode pour l?implémenter ?
 
Merci d?avance.
 
Ma configuration :
 
Apache 1.3.26
PHP 4.2.2 (en DSO)
MySQL 3.23.51

Reply

Marsh Posté le 07-08-2002 à 11:26:51   

Reply

Marsh Posté le 07-08-2002 à 11:33:03    

fait voir le script surtout au environs de la ligne  
(+- 3 lignes ! )

Reply

Marsh Posté le 07-08-2002 à 11:42:19    

voili, je le met en entier, pour les autres qui vont lire, c'est pas top secret  :) j?ai juste « aéré » le tout pour une meilleure lecture, le numéro de ligne ne va plus jouer. Si jammais, la ligne 11 se trouve être la requête MySQL (mysql_query).
 
<html>
<body>
 
<?php
 
include 'config.php';
 
if (isset($_POST[LOGIN_INPUT_NAME]) &&
isset($_POST[PASSWORD_INPUT_NAME])) {
 
$login = $_POST[LOGIN_INPUT_NAME];
$passwd = $_POST[PASSWORD_INPUT_NAME];
 
$mid =  @ mysql_connect(SQL_HOTE, SQL_LOGIN, SQL_PASSWORD) or die("Echec durant la connexion au serveur MySQL" );
 
mysql_select_db(DATABASE_NAME) or
die("Echec durant la sélection de la base MySQL" );
 
$result = mysql_query('SELECT login, passwd FROM compte WHERE login = \'', $login, '\' AND passwd = \'', $passwd, '\';';) or
die("Echec durant la requête à la base MySQL" );
 
if (mysql_num_rows($result)) echo "Authentifcation correcte!";
else echo "Authentifcation incorrecte!";
 
mysql_close();
 
} else {
 
echo "Entrée(s) incorrecte(s)!\n";
 
}
 
?>
 
</body>
</html>


Message édité par ar2k le 07-08-2002 à 11:53:54
Reply

Marsh Posté le 07-08-2002 à 12:08:34    

ta query est fausse :
$result = mysql_query(
   'SELECT login, passwd FROM compte WHERE login = \'' . $login . '\' AND passwd = \'' . $passwd . '\';';)  
 
ce sont les points qui concatènent, pas les virgules.


---------------
...oups kernel error...
Reply

Marsh Posté le 07-08-2002 à 12:45:57    

Merci beaucoup ! Je croyais que ça fonctionnait comme les chaînes de caractères avec echo.   :pt1cable:

Reply

Marsh Posté le 07-08-2002 à 12:57:55    

Le problème ne vient pas de là : la fction mysql_query requiert 2 paramètres : la requètes et l'identification de connexion.
 
Exemple :  
 

Code :
  1. $dbi=mysql_connect($dbbase,$dbuser,$dbpass);
  2. $q=mysql_query("SELECT machin FROM truc WHERE chose='5'",$dbi);


Message édité par Ez4Me2KU le 07-08-2002 à 12:58:21

---------------
Toute l'actu des jeux vidéos sur http://www.ajeux.fr
Reply

Marsh Posté le 07-08-2002 à 13:12:19    

La source avec la correction fonctionne impec.
 
Si on omet de spécifier l'identification de connexion, il prend la dernière connexion effectuée.


Message édité par ar2k le 07-08-2002 à 13:13:02
Reply

Marsh Posté le 07-08-2002 à 14:32:27    

ben voila ....

Reply

Marsh Posté le 07-08-2002 à 14:47:50    

Code :
  1. $result = mysql_query('SELECT login, passwd FROM compte WHERE login = \'', $login, '\' AND passwd = \'', $passwd, '\';') or die("Echec durant la requête à la base MySQL" );


 
tu devrais utiliser plutôt les double quote pour une meilleure lecture de ta requete
 

Code :
  1. $qry = "SELECT login, passwd FROM compte WHERE login = '$login' AND passwd = '$passwd'";
  2. $result = mysql_query($qry) or die("Echec durant la requête à la base MySQL" );


 
et pendant que tu y es :
je te conseille l'utilisation de la fonction PASSWORD() avec MySQL :  

Code :
  1. $qry = "SELECT login, passwd FROM compte WHERE login = '$login' AND passwd = PASSWORD('$passwd')";


 
mais n'oublie pas de le crypter aussi à l'enregistrement  :D  
 
 :hello:  


---------------
JeuxVideo.Records.Mame
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed