Fork me on GitHub




(1) 2 »


Page php : info user en fonction du group admin
Aspirant
Inscrit: 21/05/2005 03:01
Messages: 39
Bonjour tout le monde.

Je suis un débutant en php qui essaie d integrer une page php dans mon site xoops.
Je suis parvenu à creer ma page. Celle ci interroge la bdd et affiche les données par ordre de classement ( j ai bidouiller la traduction de user_icq pour qu'elle affiche classement :p )

Mon code :
Citation :

<?php
$link = mysql_connect("xxx", "xxx", "xxx");
mysql_select_db("xxx",$link);
$reponse = mysql_query("SELECT name, uname, uid, user_icq, user_from, user_avatar, user_occ, user_intrest FROM xoops_users ORDER BY user_icq",$link);
echo'<h2>Présentation des HIGHLANDS</h2>';
while ($donnees = mysql_fetch_assoc($reponse) )
{
?>
<table class='joueur' align='center' cellspacing='2' cellpadding='2' >
<tr>
<td width='200' class='present_titre'><b>Pseudo :</b></td>
<td width='200' class='present_infos'><?php echo $donnees['uname']; ?></td>
</tr>
<tr align='center'>
<td width='33%' class='present_titre'><b>Prénom :</b></td>
<td width='33%' class='present_infos'><?php echo $donnees['name']; ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Profession :</b></td>
<td class='present_infos'><?php echo $donnees['user_occ']; ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Hobbys :</b></td>
<td class='present_infos'><?php echo $donnees[user_intrest]; ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Ville :</b></td>
<td class='present_infos'><?php echo $donnees['user_from']; ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Classement :</b></td>
<td class='present_infos'><?php echo $donnees['user_icq']; ?> </td>
</tr>
</table>
<br>
<?php
}
mysql_close($link);
?>


Le defaut principal de cette page est qu'elle prend en compte tous les users et j aimerai rajouter une condition du type, if user appartient a groupe XXXX, affiche infos demandées, sinon rien.

Edit : une seconde condition serait egalement utile, à savoir si le champ user_icq est vide, on n affiche rien, je viens de me rendre compte que si le champ reste vide, cela fausse le classement !!

Edit2 : je souhaiterai que ce fameu champ soit rempli seulement si le user souhaite faire parti de ce classement, donc rendre ce champ obligatoire ne m arrangerait pas trop.

Edit3 : un petit plus, si il etait possible de faire en sorte qu'il n y a que X user par page cela serait vraiment top, j abuse peut etre, je ne me rend pas trop compte de ce que je demande, veuillez m en excuser si c est trop .

Voila, j espere que avoir ete assez clair pour qu'on comprenne ma requete.

Merci de votre attention
Cordialement

Posté le : 11/04/2007 17:04
Partager Twitter Partagez cette article sur GG+
Re: Page php : info user en fonction du group admin
Aspirant
Inscrit: 29/03/2007 21:03
Messages: 93
Bonjour,

Pour reprendre ton code, modifie ta requète :
$reponse mysql_query("SELECT user.name, user.uname, user.uid, user.user_icq, user.user_from, user.user_avatar, user.user_occ, user.user_intrest FROM xoops_users AS user INNER JOIN groups_users_link AS gul ON (gul.uid = user.uid) WHERE gul.groupid = [i][b]id_groupe[/b][/i] ORDER BY user.user_icq",$link);


id_groupe est l'identifiant du groupe d'utilisateur (par défaut : 1 : webmasters, 2 : utilisateurs enregistrés, 3 : anonymes).

Mais cette méthode n'est pas propre : il vaut mieux utiliser l'api de Xoops (tu peux regarder dans /system/admin/users/users.php ou dans s/modules/system/admin/groups/groups.php pour voir comment on fait), ça devrait ressembler à un truc comme ça (pas testé) :
$member_handler =& xoops_gethandler('member');
$members =& $member_handler->getUsersByGroup($groupidfalse);
if (
count($members) > 0) {
   
$member_criteria = new Criteria('uid'"(".implode(','$members).")""IN");
   
$member_criteria->setSort('user_icq');
   
$ulist $member_handler->getUserList($member_criteria);
   
$user_list = array();
   foreach (
$ulist as $m_id => $m_name) {
       
$user_list[] =& $member_handler->getUser($m_id);
   }
}


($groupid étant l'identifiant du groupe)
tu auras la liste des utilisateurs dans $user_list et tu pourras accèder à leurs propriétés comme ça :
$user_list[$i]->getVar('user_icq');


j'espère que ça t'aidera

a+

Posté le : 11/04/2007 17:32

Echange gratuit de bannières publicitaires

Open in new window

www.diadema.fr
Partager Twitter Partagez cette article sur GG+
Re: Page php : info user en fonction du group admin
Aspirant
Inscrit: 21/05/2005 03:01
Messages: 39
J'imagine que ca devrait me donner reponse à toutes mes questions, mais je me trouve devant un pb, je ne sais pas du tout comment integrer cela a mon code.
La methode "pas propre" je la comprend aisement mais pour ce qui est des api xoops ( je ne sais meme pas ce que ca signifie :p ) c'est comme si je lisais de l hebreu

Merci de ton attention, mais il me faudra plus de details stp (help

Posté le : 11/04/2007 17:52
Partager Twitter Partagez cette article sur GG+
Re: Page php : info user en fonction du group admin
Aspirant
Inscrit: 29/03/2007 21:03
Messages: 93
ok, désolé
c'est vrai que j'ai été assez rapide et que je n'ai pas commenté mes exemples
j'essaierai de te répondre plus précisément demain.

a+

Posté le : 11/04/2007 20:08

Echange gratuit de bannières publicitaires

Open in new window

www.diadema.fr
Partager Twitter Partagez cette article sur GG+
Re: Page php : info user en fonction du group admin
Aspirant
Inscrit: 29/03/2007 21:03
Messages: 93
knabis,

Voici ton code, modifié pour utiliser l'api (moteur ) de Xoops (attention : je n'ai pas testé ce code, mais j'ai essayé d'expliquer un peu le fonctionnement

// faire les inclusions nécessaires à l'affichage de la page...

$groupid 1;    // identifiant du groupe WebMasters
$member_handler =& xoops_gethandler('member');  // obtention de l'objet gérant les membres
$members =& $member_handler->getUsersByGroup($groupidfalse);  // récupération des membres (uniquement les uid des membres) correspondant au groupe ayant l'identifiant $groupid
if (count($members) > 0) {
   
// création d'un critère de recherche pour récupérer une liste de membres triés selon la colonne 'user_icq'
   
$member_criteria = new Criteria('uid'"(".implode(','$members).")""IN");  // ça va générer dans la requète de recherche un truc du genre 'WHERE uid IN (2, 3, 5...)' (uid contenu dans la liste précédement obtenue
   
$member_criteria->setSort('user_icq');  // tri par la colonne 'user_icq'
   
$ulist $member_handler->getUserList($member_criteria);  // récupération des utilisateurs (liste sous forme uid/name) correspondant aux critères
   
foreach ($ulist as $m_id => $m_name) {  // parcours de la liste
      
$user $member_handler->getUser($m_id);  // récupération d'un objet utilisateur
      
      // affichage des infos pour l'utilisateur
?>
<table class='joueur' align='center' cellspacing='2' cellpadding='2' >
<tr>
<td width='200' class='present_titre'><b>Pseudo :</b></td>
<td width='200' class='present_infos'><?= $user->uname() ?></td>
</tr>
<tr align='center'>
<td width='33%' class='present_titre'><b>Prénom :</b></td>
<td width='33%' class='present_infos'><?= $user->name() ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Profession :</b></td>
<td class='present_infos'><?= $user->user_occ() ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Hobbys :</b></td>
<td class='present_infos'><?= $user->user_intrest() ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Ville :</b></td>
<td class='present_infos'><?= $user->user_from() ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Classement :</b></td>
<td class='present_infos'><?= $user->user_icq() ?> </td>
</tr>
</table>
<br>
<?      
   }
}



j'espère que ça t'aidera un peu plus
sinon n'hésite pas à me redemander

a+

Posté le : 12/04/2007 11:52

Echange gratuit de bannières publicitaires

Open in new window

www.diadema.fr
Partager Twitter Partagez cette article sur GG+
Re: Page php : info user en fonction du group admin
Aspirant
Inscrit: 21/05/2005 03:01
Messages: 39
Je ne sais comment te remercier, ca fonctionne a merveille

J'abuse peut etre, mais il me reste un petit detail à regler :

Par défaut, le champ user_icq n est pas obligatoire, et c'est tant mieux, cependant, si un user ne remplit pas ce champ, il apparaitra tout de meme dans ce fameux classement et fausse totalement celui ci, puisqu'apperemment pour xoops, un champ vide est inferieur à 0 :p.
Donc si c etait possible d exclure de cette liste les users qui ne remplissent pas ce champ, cela serait parfait.

un truc genre : WHERE user_icq != '' "

Mais version api xoops, je ne sais pas comment le faire

Posté le : 12/04/2007 17:00
Partager Twitter Partagez cette article sur GG+
Re: Page php : info user en fonction du group admin
Aspirant
Inscrit: 29/03/2007 21:03
Messages: 93
Bonjour,

Pour exclure les utilisateurs sans ICQ, rajouter/modifier les lignes en gras :

(...)
$member_criteria = new Criteria('uid'"(".implode(','$members).")""IN");  // ça va générer dans la requète de recherche un truc du genre 'WHERE uid IN (2, 3, 5...)' (uid contenu dans la liste précédement obtenue
$member_criteria->setSort('user_icq');  // tri par la colonne 'user_icq'

[b]$member_icq_criteria = new Criteria('user_icq'"""<>");  // exlusion des utilisateurs sans ICQ

$compo_criteria = new CriteriaCompo();  // création d'une composition (liste)  de critères
$compo_criteria->add($member_criteria);  // ajout du filtre des membres
$compo_criteria->add($member_icq_criteria);  // ajout du filtre sur l'ICQ[/b]


$ulist $member_handler->getUserList([b]$compo_criteria[/b]);  // récupération des utilisateurs (liste sous forme uid/name) correspondant aux critères
(...)


(fait attention a bien remplacer le paramètre de la fonction getUserList() : $member_criteria en $compo_criteria.

En esparant que ça fonctionne (j'ai pas testé ).

a+

Posté le : 13/04/2007 09:24

Echange gratuit de bannières publicitaires

Open in new window

www.diadema.fr
Partager Twitter Partagez cette article sur GG+
Re: Page php : info user en fonction du group admin
Aspirant
Inscrit: 21/05/2005 03:01
Messages: 39
Salut diadema,

Je viens de tester les modifications enoncées plus haut mais cela ne fonctionne pas. Le code doit etre bon, la page s affiche mais, je n ai plus aucun resultat :p

Il s agit peut etre d'une erreur de ma part, donc dans le doute, je colle le code de A à Z:
Citation :

<?php

$link = mysql_connect("xxx", "xxx", "xxx");
mysql_select_db("xxx",$link);

$groupid = 4;
$member_handler =& xoops_gethandler('member');
$members =& $member_handler->getUsersByGroup($groupid, false);

if (count($members) > 0) {

$member_criteria = new Criteria('uid', "(".implode(',', $members).")", "IN");
$member_criteria->setSort('user_icq');
$member_icq_criteria = new Criteria('user_icq', "", "<>");
$compo_criteria = new CriteriaCompo();
$compo_criteria->add($member_criteria);
$compo_criteria->add($member_icq_criteria);

$ulist = $member_handler->getUserList($compo_criteria);
foreach ($ulist as $m_id => $m_name) {
$user = $member_handler->getUser($m_id);


?>
<table class='joueur' align='center' cellspacing='2' cellpadding='2' >
<tr>
<td width='200' class='present_titre'><b>Pseudo :</b></td>
<td width='200' class='present_infos'><?= $user->uname() ?></td>
</tr>
<tr align='center'>
<td width='33%' class='present_titre'><b>Prénom :</b></td>
<td width='33%' class='present_infos'><?= $user->name() ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Profession :</b></td>
<td class='present_infos'><?= $user->user_occ() ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Hobbys :</b></td>
<td class='present_infos'><?= $user->user_intrest() ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Ville :</b></td>
<td class='present_infos'><?= $user->user_from() ?></td>
</tr>
<tr align='center'>
<td class='present_titre'><b>Classement :</b></td>
<td class='present_infos'><?= $user->user_icq() ?> </td>
</tr>
</table>
<br>
<?
}
}



Merci encore de ton aide, mais je me sens impuissant face à ce code, donc je suis totalement dependant de tes conseils

Ps : si jamais ca peut t aider, je te met en pv les infos du site en question, avec logins et mdp et la facon dont j ai integré cette page au reste du site.

Posté le : 13/04/2007 11:41
Partager Twitter Partagez cette article sur GG+
Re: Page php : info user en fonction du group admin
Semi pro
Inscrit: 05/04/2003 19:03
Messages: 1645
Bonjour,

j'ai un de mal à comprendre à quoi va servir cette page, mais pourquoi ne pas utiliser la balise Smarty <{xoops_isadmin}> pour "gérer" l'affichage?

Il suffit de faire un test:
<{if $xoops_isadmin}>
ce que seuls les admins doivent voir
<{else}>
ce que tu veux pour les autres
<{/if}>


@+

Posté le : 13/04/2007 12:50
Partager Twitter Partagez cette article sur GG+
Re: Page php : info user en fonction du group admin
Aspirant
Inscrit: 29/03/2007 21:03
Messages: 93
Bonjour,

D'après ce que j'ai compris, il ne veut pas limiter l'accès au non-admin, mais afficher les données des non-admins (visible par tout le monde).
C'est bien ça knabis?

a+


PS : knabis, j'essaie de corriger le script dès que j'ai un moment

Posté le : 13/04/2007 13:32

Echange gratuit de bannières publicitaires

Open in new window

www.diadema.fr
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant
(1) 2 »



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

104 Personne(s) en ligne (75 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 104 | Plus ...