[RESOLU] Problème de requête et mysql_num_rows

Problème de requête et mysql_num_rows [RESOLU] - PHP - Programmation

Marsh Posté le 27-07-2009 à 10:49:48    

Bonjour à tous,
 
Voilà, j'ai un petit souci que j'ai du mal à comprendre.
 
J'ai une requête toute simple qui est la suivante :
 
$requete  = 'SELECT AUTORISATION, ETAT, ID_USER, STATUT FROM '.$table1.' ';
$requete .= 'WHERE LOGIN = \''.mysql_escape($login).'\' AND PASSWORD = \''.$pass.'\' ';
 
$table1 est définie dans mon fichier de configuration, $login et $pass sont les valeurs de champs que je post.
 
Lorsque j'effectue cette requête, le mysql_num_rows ne passe pas et j'ai le droit à cette erreur à priori assez commune qui est : Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource.
 
Bon jusqu'ici ok. Sauf que, quand j'affiche la requête et que je la copie dans mon phpMyAdmin, il me renvoie bien le résultat...et le mysql_error sur l'erreur provoquée me renvoie une chaîne vide...
 
Auriez-vous une petite idée sur ce qui cause ce problème?
 
Merci d'avance :)


Message édité par rahan44 le 27-07-2009 à 13:07:04
Reply

Marsh Posté le 27-07-2009 à 10:49:48   

Reply

Marsh Posté le 27-07-2009 à 11:12:13    

Déjà ta requete est déclarée bizarrement. Il est inutile de concaténer des espaces...  
Ensuite si tu veux séparer le select et le where, tu peux très bien passer à la ligne sans casser ta chaine.
 

$requete  = 'SELECT AUTORISATION, ETAT, ID_USER, STATUT FROM '.$table1.'
            WHERE LOGIN = \''.mysql_escape($login).'\' AND PASSWORD = \''.$pass;


Si tu l'affiche et que ca fonctionne quand tu la copies/colles, c'est que soit:
1- l'erreur vient du mysql_escape()
2- l'erreur est masquée par l'interprétation de ton navigateur html. Essaye de copier-coller le code lui-même.
 
Peux-tu nous montrer la requete générée par php ?


Message édité par Pascal le nain le 27-07-2009 à 11:13:08
Reply

Marsh Posté le 27-07-2009 à 11:12:44    

J'espère que tu ne fais pas directement le mysql_num_rows sur $requete, oublie pas qu'il faut l'exécuter :

Code :
  1. $result = mysql_query($requete);
  2. if(!$result) {
  3.  throw new Exception(mysql_error());
  4. }
  5.  

Reply

Marsh Posté le 27-07-2009 à 11:21:49    

Pour FlorentG, non je fais bien mon $resultat = mysql_query($requete,$connexion) avec ensuite mon mysql_num_rows sur $resultat.
 
Pour Pascal le nain, mon mysql_escape est une petite fonction qui protège ma variable avec un mysql_real_escape_string et un stripslashes avant si besoin.
 
Voilà l'echo de la requête obtenu :
 
SELECT AUTORISATION, ETAT, ID_USER, STATUT FROM USER WHERE LOGIN = 'rahan44' AND PASSWORD = '31e06d85039d7e260628fbc26c39e717'  
 
Merci d'essayer de m'aider en tout cas ;-)


Message édité par rahan44 le 27-07-2009 à 11:22:13
Reply

Marsh Posté le 27-07-2009 à 11:28:39    

Tu as regardé dans le code source ?
Si dans le code source, la requete contient un \' ton navigateur va afficher ' mais mysql va bloquer sur le \

Reply

Marsh Posté le 27-07-2009 à 11:40:50    

Et bien mon code source c'est celui posté tout en haut, et il n'y a pas de \' à part pour entourer les variables...
 
Le souci, c'est que mon navigateur affiche la requête, et que cette même requête me retourne bien un résultat quand je la copie/colle dans mon phpMyAdmin, mais me retourne une erreur via mon navigateur...et le mysql_error contient une chaîne vide...
 
C'est pour cela que je suis un peu perdu...

Reply

Marsh Posté le 27-07-2009 à 12:02:30    

Je vais manger mais je reste attentif à vos réponses dès mon retour !

Reply

Marsh Posté le 27-07-2009 à 12:03:52    

Je parlais du code source de la page html renvoyée du serveur à ton navigateur. Dans firefox, Ctrl+U.
 
Peux-tu nous montrer ton code source (cette fois du php) depuis la requete jusqu'au mysql_num_rows ?

Reply

Marsh Posté le 27-07-2009 à 13:02:01    

Ah ok.
 
Voilà mon code php de ma requête au mysql_num_rows :
 
$requete  = 'SELECT AUTORISATION, ETAT, ID_USER, STATUT FROM USER  
                 WHERE LOGIN = \''.mysql_escape($login).'\' AND PASSWORD = \''.$pass.'\' ';
$resultat = mysql_query($requete,$connexion);
 
if($resultat && mysql_num_rows($resultat)>0)
{
...
}

Reply

Marsh Posté le 27-07-2009 à 13:06:33    

Bon j'ai trouvé en fait.
 
J'ai modifié mon fichier de configuration il y a peu et il semblerait que j'ai tout bêtement effacé ma variable $connexion...
 
Ca marche beaucoup mieux maintenant...
 
J'ai honte...lol
 
Merci quand même de votre aide et à bientôt pour des problèmes plus sérieux !!!

Reply

Marsh Posté le 27-07-2009 à 13:06:33   

Reply

Marsh Posté le 27-07-2009 à 20:22:13    

tu devrais faire comme ca, ca serai plus propre

Code :
  1. $login = mysql_real_escape_string($login);
  2. $pass = mysql_real_escape_string($pass);
  3. $request = "SELECT `autorisation`, `etat`, `id_user`, `status` FROM `user` WHERE `login`='$login' AND `password`='$pass'";
  4. $resultat = mysql_query($requete,$connexion) or die( echo mysql_error() );
  5. if(mysql_num_rows($resultat)){
  6. //
  7. }


 
mais bon pareil tout ca date de 10 ans,  si ta moyen utilise PDO, c'est pas plus compliquer mais c'est beaucoup plus propre, et plus securiser.
 
http://www.siteduzero.com/tutoriel [...] x-bdd.html
 
bon courage ;)
 
 
 

Reply

Sujets relatifs:

Leave a Replay

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