Problème avec mysql_numrows()

Rabver
Invité n'ayant pas de compte PHPfrance

16 juil. 2005, 18:13

Bonjour,
J'ai créé pour mon site un système de session dont voici le code :

--> config.php :
<?
// A definir 
$nom_serveur         = "xxxxxx"; 
$utilisateur_serveur = "xxxxxx"; 
$motdepasse_serveur  = "xxxxxx"; 
$basededonnee		 = "xxxxxx";
?>
--> auhentification.php :
<?PHP
// Infos base
require ("config.php"); 

// Connection SQL 
mysql_connect($nom_serveur,$utilisateur_serveur,$motdepasse_serveur); 
mysql_select_db($basededonnee); 

// On selectionne quand les champs correspondants aux entrées sql + index.php
$sql = "SELECT * FROM membres WHERE login=$login and pass=$pass"; 

// On execute la requête de selection 
$res = mysql_query($sql); 

// On compte le nombre de ligne des resultats : 1 si correspondance 0 sinon
$exist = mysql_numrows($res); 

// Si la variable =0 : erreur à un endroit
if(!$exist) { 
    
// On inclut le formulaire d'identification 
    include("secure/index.php"); 
} 

// Sinon, si le login et pass sont valides 
else {

// On ouvre la session 
session_start(); 
    
// On affiche un lien vers une page
include("include/files/cs.php.php"); 
     
// Possibilité de se deconnecter 
echo "<a href=\"deconexion.php\">Deconnection</a>"; 
} 
?>
Voici l'erreur qui s'affiche lorsque j'utilise le code :

J'en ai marre de le relire, si quelqu'un peut m'aider.... :lol:
Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/8/a/scipately/include/secure/autentification.php on line 20
Unknown column 'admin' in 'where clause'
(admin étant mon pseudo dans la base de donnée. Elle est composée de :
membre{id;pseudo;pass})

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

16 juil. 2005, 19:17

déjà moi je ne connais pas la fonction mysql_numrows() par contre je connais mysql_num_rows() :roll:

ensuite, tu trouverais facilement ton erreur si tu lisais le message d'erreur et que tu essayais de voir ce que ça peut vouloir dire vraiment ;)

le fait qu'il dise "colonne 'admin' inconnue" alors que 'admin' est ton pseudo, donc une donnée ne t'interpelle pas ?

cela veut simplement dire qu'il prend ce 'admin' (donc $login) pour une colonne de ta table. Normal : pour les données de type chaines de caractères on met des guillemets simples autour

et de plus, sépare les variables de la chaine elle-même, ce sera plus lisible :
$sql = "SELECT * FROM membres WHERE login='".$login."' and pass=''".$pass."'"; 

Mammouth du PHP | 543 Messages

18 juil. 2005, 09:44

Au dela de la lisibilité, la requete était fausse de toute façon.
En effet, les valeur non numériques doivent etre entre quotes.
Or login et pass ne sont pas numériques a mon avis, donc quotes :)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 juil. 2005, 09:46

cela veut simplement dire qu'il prend ce 'admin' (donc $login) pour une colonne de ta table. Normal : pour les données de type chaines de caractères on met des guillemets simples autour
;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 juil. 2005, 09:49

J'irais même plus loin en te disant que si tu teste l'égalité avec des valeurs non numériques, il faut utiliser LIKE et non pas =
$sql = "SELECT * FROM membres WHERE login LIKE '".$login."' and pass LIKE ''".$pass."'";
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer