Page 1 sur 1

Problème avec mysql_numrows()

Posté : 16 juil. 2005, 18:13
par Rabver
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

Posté : 16 juil. 2005, 19:17
par ouckileou
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."'"; 

Posté : 18 juil. 2005, 09:44
par raptor
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 :)

Posté : 18 juil. 2005, 09:46
par ouckileou
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
;)

Posté : 18 juil. 2005, 09:49
par zeus
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."'";