Existence d'un membre. [Réglé]
Savoir si un membre existe, à partir de son identifiant.
Créations de Modules
AiYori Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre AiYori
- Inscrit le : 23/08/2012
J'aimerais savoir, dans le cadre du développement d'un module, si un utilisateur existe, en utilisant son identifiant (user_id).
A regarder dans la documentation relative à classe Member, ainsi que le code qui se trouve dans le répertoire /kernel/framework/members, je n'ai trouvé aucune méthode qui puisse répondre à mes attentes.
J'ai donc essayé d'utiliser une requête SQL. Voici différentes tentatives que j'ai effectuées.
Code PHP :
$result = $Sql->query_while("SELECT * FROM ".PREFIX."member WHERE `user_id` = $userid", __LINE__, __FILE__); $Sql->Close($result); $nbmembers = $Sql->num_rows($result , "SELECT COUNT(*) FROM ".PREFIX."member WHERE `user_id` = $userid");
J'obtiens une erreur Invalid WHILE request à l'exécution, sur la ligne du query_while uniquement lorsque l'identifiant n'existe pas. Analyse personnelle : l'implémentation de query_while (mysql_query([...]) or $this->_error([...])) me laisse supposer qu'un résultat vide de mysql_query conduit à un traitement d'erreur (même s'il n'y en a pas réellement). J'essaie tout de même en changeant query_while par query.
Code PHP :
$result = $Sql->query("SELECT * FROM ".PREFIX."member WHERE `user_id` = $userid", __LINE__, __FILE__); $Sql->Close($result); $nbmembers = $Sql->num_rows($result , "SELECT COUNT(*) FROM ".PREFIX."member WHERE `user_id` = $userid");
J'obtiens le même genre d'erreur (Invalid SQL request) dans le mêmes conditions. J'en tire les mêmes conclusions. Je tente maintenant de modifier ma requête SQL de manière à compter directement le nombre de lignes.
Code PHP :
$result = $Sql->query("SELECT COUNT(*) FROM ".PREFIX."member WHERE `user_id` = $userid", __LINE__, __FILE__); $Sql->Close($result);
J'obtiens la même erreur (Invalid SQL request) dans le mêmes conditions. Je suppose que c'est toujours dû à l'implémentation de query (semblable à celle de query_while) : la sortie de mysql_query est 0 (et non false, mais mène toujours au traitement de l'erreur).
Je fais ensuite un peu de bricolage, au moins à des fins de test. Je rajoute un champ constant dans la recherche, afin que le résultat de la recherche ne soit pas nul.
Code PHP :
$result = $Sql->query("SELECT "a", COUNT(*) FROM ".PREFIX."member WHERE `user_id` = $userid", __LINE__, __FILE__); $Sql->Close($result);
J'obtiens la même erreur (et là je n'arrive pas vraiment à l'expliquer).
Dans mes prochaines tentatives, j'utiliserai directement des primitives de requête, sans passer par le framework de PHPBoost. Mais avant, j'aimerais savoir si certains d'entre vous connaissent des solutions plus simples. Je suis un peu surpris que ce genre de recherche n'ait pas encore été effectuée.
Par ailleurs, je signale que PHPBoost utilise une API obsolète : il serait manifestement préférable (d'après la documentation officielle de PHP tout au moins) d'utiliser MySQLi ou PDO_MySQL.
Par avance, merci de votre aide.
Édité par AiYori Le 26/08/2012 à 10h16
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Ta requête SQL n'est pas valide c'est pour ça que tu as une erreur.
Concernant l'API, tu devrais faire un tour sur la version 4.0, elle a été totalement refaite.
A quel stade en es tu de ton module ? Pourquoi ne pas faire ce module pour la version 4.0 directement ?
AiYori Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre AiYori
- Inscrit le : 23/08/2012
Sais-tu où se trouve l'erreur dans ma requête ? Je l'ai essayée direment dans l'interface MySQL, et elle ma toujours donné les bonnes réponses.
J'en suis au tout début de mon module, et je crois en effet que je vais recommencer avec la 4.0.
Édité par AiYori Le 26/08/2012 à 15h05
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Code SQL :
$Sql->query("SELECT COUNT(*) FROM " . DB_TABLE_MEMBER . " WHERE user_id = '" . $user_id . "'", __LINE__, __FILE__);
enduro35 Membre non connecté
Booster Minigun
-
Booster Minigun
- Voir le profil du membre enduro35
- Inscrit le : 11/07/2011
- Site internet
- Groupes :
Je viens de tomber sur ton poste.
Je ne sais pas si cela va être utile.
Mais, j'ai justement fait un petit module pour savoir si un membre existe ou pas en fonction de son nom ou de son ID.
Voici le lien de téléchargement:
ICI
PS: A ne surtout pas utiliser en production (faille injection SQL)
Édité par enduro35 Le 18/09/2012 à 18h04
Site sur les motos enduros en Ille et Vilaine 35: http://enduro35.fr
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Citation :
PS: A ne surtout pas utiliser en production (faille injection SQL)
Pourquoi ne pas la corriger ?
enduro35 Membre non connecté
Booster Minigun
-
Booster Minigun
- Voir le profil du membre enduro35
- Inscrit le : 11/07/2011
- Site internet
- Groupes :
Désolé, mais J'avais fais le module pour des tests en interne, je n'avais donc pas besoins d'une sécurité optimale.
Site sur les motos enduros en Ille et Vilaine 35: http://enduro35.fr
AiYori Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre AiYori
- Inscrit le : 23/08/2012
Je me suis lancé dans la version 4, et je ne rencontre plus ce problème dorénavant.
Merci encore.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie