[INFO] sur l'utilisation des sessions de phpBB3 sur son site

Ce forum aborde toutes les questions qu'un codeur ou webmaster pourrait se poser, et n'ayant aucun rapport direct avec phpBB.
Tout ce qui peut concerner la récupération des sessions de phpBB sur votre site, doit se faire dans ce forum.

Modérateur: Equipe

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar arthanyx » 21 Jan 2011 à 17:42

Désolé de revenir sur le sujet mais j'ai du mal là
j'essaye de faire en sorte de tester la condition
Code: Tout sélectionner
$auth->acl_get('f_read', $forum_id)

au moment ou l'on récupère les sujets dans la bdd pour ensuite les passer au while du reste du code.
voilà le bout de code en question, la variable $nombre sert à me sortir le nombre de posts voulu en fonction d'un choix de l'utilisateur
Code: Tout sélectionner
$forum_id = request_var('forum_id', 0);
         $where = ($forum_id) ? " WHERE t.forum_id=$forum_id AND f.forum_id=t.forum_id" : ' WHERE f.forum_id=t.forum_id';
         $sql = 'SELECT t.forum_id, t.topic_id, t.topic_time, t.topic_title, t.topic_views, t.topic_replies, t.topic_poster, t.topic_first_poster_name, t.topic_first_poster_colour, t.topic_last_post_id, t.topic_last_poster_id, t.topic_last_poster_name, t.topic_last_poster_colour, t.topic_last_post_time, f.forum_name, f.forum_id
            FROM ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . ' f'
              . $where .
              ' ORDER BY t.topic_time DESC ' .
              ' LIMIT 0 , ' . $nombre . '';
         $result = $db->sql_query($sql);

Comment faire pour que le SELECT ne prenne que les forum_id autorisés par $auth->acl_get('f_read', $forum_id) ?
Sinon la solution serait de récupérer par exemple une centaine de sujet et de refaire un tri dans le résultat pour n'afficher que le nombre qu'on veut parmi ceux autorisés.
Si quelqu'un a des pistes pour m'aider je suis preneur
arthanyx
Posteur néophyte
Posteur néophyte
 
Messages: 29
Inscription: 09 Jan 2011 à 17:50

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar spitfire pat » 21 Jan 2011 à 18:00

Comment faire pour que le SELECT ne prenne que les forum_id autorisés par $auth->acl_get('f_read', $forum_id) ?

le select ne peut pas, tout ce que tu peux faire, suite à la requête sql c'est
Code: Tout sélectionner
while ($row=$db->sql_fetchrow($result))
{
      if($auth->acl_get('f_read', $row['forum_id']))
      {
             //là tu affiches la new
      }
}
Avatar de l’utilisateur
spitfire pat
MOD Contest Winner
MOD Contest Winner
 
Messages: 15313
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar sylver35 » 21 Jan 2011 à 18:04

Une solution de base à phpbb existe:
C'est la fonction sql_in_set() voir un exemple:
Code: Tout sélectionner
    $sql 'SELECT *
            FROM phpbb_xxx
            WHERE ' 
$db->sql_in_set('forum_id'array_keys($auth->acl_getf('f_read'true)));  
La vitesse de la lumière étant supérieure à la vitesse du son, bien des gens paraissent brillants jusqu'au moment où ils ouvrent la bouche.

Image

Nouvelle version du 25/12/2011: Mod Breizh Shoutbox v1.5.0 || Nouvelle version du 22 Mai: Mod Breizh Ajax Checks 1.3.0
Nouvelle version du 04/03/2012: Mod Browser, os & Screen 1.0.0
|| Version du 05/03/2012 -> Erreurs et Notices de débug v1.2.0
Info Sécurité -> Renommer le dossier d'administration adm || Une captcha efficace contre les inscriptions robots || Hébergement breizh hosting (- 15% via Breizh Portal)
Avatar de l’utilisateur
sylver35
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 4571
Inscription: 26 Fév 2008 à 14:58
Localisation: Bretagne

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar arthanyx » 21 Jan 2011 à 18:28

Le souci dans ce cas spitfire pat, c'est que du coup on affichera les posts visibles parmi la liste sortie par la requête.
Si par exemple l'utilisateur demande a avoir 10 news et que dans les 10 derniers messages posté il y en a deux qui sont dans un forum qui lui est caché, alors il n'aura plus que 8 news
tu vois ce que je veux dire ?

sylver35, j'ai du mal à piger ce que tu mets là. Tu peux m'expliquer un peu ce que fait ce code ? Pis surtout si je met ça comme ça, je vais droit à l'erreur. Les simple quote font sortir du code php il me semble non ?
arthanyx
Posteur néophyte
Posteur néophyte
 
Messages: 29
Inscription: 09 Jan 2011 à 17:50

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar sylver35 » 21 Jan 2011 à 22:44

Bon, je vais te mâcher le travail car tu ne semble pas piger ce qui ne sort pas de ton esprit, il faut savoir adapter aux besoins!
Code: Tout sélectionner
$forum_id = request_var('forum_id', 0);
$where = ($forum_id) ? " WHERE t.forum_id = $forum_id AND f.forum_id = t.forum_id" : ' WHERE f.forum_id = t.forum_id';
$sql = 'SELECT t.forum_id, t.topic_id, t.topic_time, t.topic_title, t.topic_views, t.topic_replies, t.topic_poster, t.topic_first_poster_name, t.topic_first_poster_colour, t.topic_last_post_id, t.topic_last_poster_id, t.topic_last_poster_name, t.topic_last_poster_colour, t.topic_last_post_time, f.forum_name, f.forum_id
    FROM '
 . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . " f
        $where
        AND "
 . $db->sql_in_set('f.forum_id', array_keys($auth->acl_getf('f_read', true))) . "
    ORDER BY t.topic_time DESC"
;
$result = $db->sql_query_limit($sql, 10); 

Et apprendre à se servir de la fonction sql_query_limit()
La vitesse de la lumière étant supérieure à la vitesse du son, bien des gens paraissent brillants jusqu'au moment où ils ouvrent la bouche.

Image

Nouvelle version du 25/12/2011: Mod Breizh Shoutbox v1.5.0 || Nouvelle version du 22 Mai: Mod Breizh Ajax Checks 1.3.0
Nouvelle version du 04/03/2012: Mod Browser, os & Screen 1.0.0
|| Version du 05/03/2012 -> Erreurs et Notices de débug v1.2.0
Info Sécurité -> Renommer le dossier d'administration adm || Une captcha efficace contre les inscriptions robots || Hébergement breizh hosting (- 15% via Breizh Portal)
Avatar de l’utilisateur
sylver35
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 4571
Inscription: 26 Fév 2008 à 14:58
Localisation: Bretagne

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar arthanyx » 22 Jan 2011 à 00:46

Un grand merci à toi sylver35 !
ça fonctionne à merveille !

Cela dit, je trouve le ton de ton message assez blessant. Si je poste ici c'est justement parce que j'ai besoin d'aide et dans un souci aussi de partage à des fins d'amélioration.

pour en savoir plus sur la fonction sql_query_limit: http://wiki.phpbb.com/display/DEV/Dbal.sql+query+limit
pour en savoir plus sur les permissions: documentation-phpbb3/sujet159918.html

Je remet en forme le code et je le poste à la suite si quelqu'un est intéressé par la fonctionnalité.
arthanyx
Posteur néophyte
Posteur néophyte
 
Messages: 29
Inscription: 09 Jan 2011 à 17:50

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar arthanyx » 23 Jan 2011 à 18:44

Voilà, comme promis, je viens vous poser le code en question pour faire une liste des X derniers messages publiés sur le forum avec choix du nombre (x) et respect des autorisation de lecture.
Le code est commenté pour ceux qui souhaitent apporter des modifications
Code: Tout sélectionner
$nombre="0"; //on initialise la variable qui permet de modifier le nombre de messages
// dans la requête qui suit, on va récupérer le réglage personnel de l'utilisateur, cela suppose que l'on a préalablement créé un champ personnalisé appellé pf_lastx, sans oublier de spécifier une valeur par défaut
$sqla = 'SELECT user_id, pf_lastx
   FROM ' . PROFILE_FIELDS_DATA_TABLE . '
   WHERE user_id=' . $user->data['user_id'] .'';
$resa = $db->sql_query($sqla);
while ($row = $db->sql_fetchrow($resa))
{
   $nombre = $row['pf_lastx'];
}
// cette routine permet de ne pas afficher les x derniers messages pour les utilisateurs qui ne sont pas enregistrés ou qui ont réglé le nombre sur 0 (ce n'est pas la peine d'afficher des entête de tableau vide).
// La commande d'afficher ou non se fait par le biais d'un IF dans le template sur la variable TST dans laquelle est stockée $test
if (($nombre=="0") || ($nombre==NULL))
{
   $test="qquechose";
   $nombre="0";
}
//ce qui suit sert pour un interfaçage si jamais l'on souhaite transmettre un forum_id via un formulaire, par exemple pour afficher un forum en particulier à partir d'une autre page         
$forum_id = request_var('forum_id', 0);
$where = ($forum_id) ? " WHERE t.forum_id = $forum_id AND f.forum_id = t.forum_id" : ' WHERE f.forum_id = t.forum_id';
// routine principale d'origine du tuto, modifiée pour n'afficher que les forums autorisés en lecture à l'utilisateur
$sql = 'SELECT t.forum_id, t.topic_id, t.topic_time, t.topic_title, t.topic_views, t.topic_replies, t.topic_poster, t.topic_first_poster_name, t.topic_first_poster_colour, t.topic_last_post_id, t.topic_last_poster_id, t.topic_last_poster_name, t.topic_last_poster_colour, t.topic_last_post_time, f.forum_name, f.forum_id
   FROM ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . " f   $where
   AND " . $db->sql_in_set('f.forum_id', array_keys($auth->acl_getf('f_read', true))) . "
   ORDER BY t.topic_time DESC";
// les résultats de la routine listés en fonction du nombre définit par l'utilisateur
$result = $db->sql_query_limit($sql, $nombre);
// on template les valeurs fixe
$template->set_filenames(array('bodylastx' => 'lastxposts.html'));
$template->assign_vars(array(
   'LAST_POST_IMG'       => $user->img('icon_topic_latest', 'VIEW_LATEST_POST'),
   'TST'      => $test
));
// la boucle qui crée le tableau et template les valeurs variables
while($row = $db->sql_fetchrow($result))
{
   $topic_id = $row['topic_id'];
   $forum_name = $row['forum_name'];
   $view_topic_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . (($row['forum_id']) ? $row['forum_id'] : $forum_id) . '&t=' . $topic_id);
   $view_forum_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . (($row['forum_id']) ? $row['forum_id'] : $forum_id));
   $template->assign_block_vars('topicrow', array(
      'FIRST_POST_TIME'   => $user->format_date($row['topic_time']),
      'LAST_POST_AUTHOR'=> get_username_string('full', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
      'LAST_POST_TIME'   => $user->format_date($row['topic_last_post_time']),
      'REPLIES'      => $row['topic_replies'],
      'TOPIC_AUTHOR'   => get_username_string('full', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
      'TOPIC_TITLE'   => censor_text($row['topic_title']),
      'FORUM_NAME'   => $row['forum_name'],
      'U_LAST_POST'   => $view_topic_url . '&p=' . $row['topic_last_post_id'] . '#p' . $row['topic_last_post_id'],
      'U_VIEW_TOPIC'   => $view_topic_url,
      'U_VIEW_FORUM'   => $view_forum_url,
      'VIEWS'      => $row['topic_views']
   ));
}


et le fichier template lastxposts.html qui est sur une base subsilver2 mais que vous pouvez adapter si cela vous intéresse.
Code: Tout sélectionner
<!-- IF not TST -->
<div align="center">
<table class="tablebg" width="100%" align="center" border="1" cellspacing="0">
   <tr>
     <th colspan="6" style="border: 0em">Les {NOMBRE} derniers messages du forum</th>
   </tr>
   <tr>
      <td class="cat" border="0">{L_TOPICS}</td>
     <td class="cat" border="0">{L_FORUM}</td>
     <td class="cat" border="0">{L_REPLIES}</td>
      <td class="cat" border="0">{L_POST_BY_AUTHOR}</td>
     <td class="cat" border="0">{L_VIEWS}</td>
      <td class="cat" border="0">{L_LAST_POST}</td>
   </tr>
   <!-- BEGIN topicrow -->
   <tr>
      <td class=""  style="border: 0em" align="left"><a href="{topicrow.U_LAST_POST}" class="topictitle">{topicrow.TOPIC_TITLE}</a></td>
     <td class=""  style="border: 0em" align="left"><a href="{topicrow.U_VIEW_FORUM}" class="forumtitle">{topicrow.FORUM_NAME}</a></td>
      <td class=""  style="border: 0em">{topicrow.REPLIES}</td>
      <td class=""  style="border: 0em">{topicrow.LAST_POST_AUTHOR}</td>
     <td class=""  style="border: 0em">{topicrow.VIEWS}</td>
      <td class=""  style="border: 0em">{topicrow.LAST_POST_TIME}
      </td>
   </tr>
   <!-- END topicrow -->
</table>
</div>
<!-- ENDIF -->
<!-- les variables suivantes ne sont pas utilisées dans ce template -->
<!--{L_POSTED_ON_DATE}{L_POST_BY_AUTHOR}{topicrow.TOPIC_AUTHOR}{L_POSTED_ON_DATE}{topicrow.FIRST_POST_TIME}{topicrow.U_VIEW_TOPIC}<a href="{topicrow.U_LAST_POST}">{LAST_POST_IMG}</a>-->

Libre a vous de présenter ça différemment, c'est pour cela que j'ai laissé en commentaire à la fin celles qui ne m'intéressaient pas d'afficher mais que vous pouvez reprendre et utiliser.

Merci a ceux qui ont contribués a la création de ce petit "mod", s'il en est un, en particulier à silver35 et spitfire pat et en espérant que ça puisse servir à d'autres. Libre à vous d'en faire ce que bon vous semble.
Pour ma part je me sert de cela pour afficher les x derniers messages du forum sur la page d'accueil du site ainsi que sur l'index du forum. J'ai déjà cette fonction depuis plus de dix ans sur le forum phpbb2, elle plait beaucoup puisque lorsque j'ai annoncé sa disparition j'ai eu énormément de retours des users comme quoi ils étaient déçus.
arthanyx
Posteur néophyte
Posteur néophyte
 
Messages: 29
Inscription: 09 Jan 2011 à 17:50

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar PeteHagor » 01 Fév 2011 à 18:06

Salut,

Comment puis-je faire pour reprendre un sondage en cours sur les pages de mon site ?

Je veux prendre le dernier en date et l'afficher sur les pages du site.


Merci d'avance.
PeteHagor
Posteur néophyte
Posteur néophyte
 
Messages: 37
Inscription: 23 Fév 2010 à 15:32

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar spitfire pat » 02 Fév 2011 à 07:12

si tu veux afficher le dernier sondage, tu peux utiliser cette requête sql
Code: Tout sélectionner
SELECT po . * , t.poll_title
FROM phpbb_poll_options po
JOIN phpbb_topics t ON t.topic_id = po.topic_id
WHERE po.topic_id = (
SELECT max( topic_id )FROM phpbb_poll_options );


le souci est que le dernier sondage n'est peut être pas expiré et qu'alors un utilisateur pourrait voir les résultats avant d'avoir voté
Avatar de l’utilisateur
spitfire pat
MOD Contest Winner
MOD Contest Winner
 
Messages: 15313
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar PeteHagor » 02 Fév 2011 à 10:03

Merci.

Aucun problème si le sondage n'est pas fini.
Le but c'est que justement, ils puissent même voter sur le site.

Si tu as ça sous la main aussi ? Ce serait cool :)
PeteHagor
Posteur néophyte
Posteur néophyte
 
Messages: 37
Inscription: 23 Fév 2010 à 15:32

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar spitfire pat » 02 Fév 2011 à 16:28

ou la la, c'est long à écrire :?
je te promet rien avant la fin de la semaine
Avatar de l’utilisateur
spitfire pat
MOD Contest Winner
MOD Contest Winner
 
Messages: 15313
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar sylver35 » 02 Fév 2011 à 18:43

Le meilleur moyen est de prendre quelque chose de déjà fait, prendre un mod portail contenant un bloc sondages et reprendre ce code.
De plus, tu a ainsi les parties php et html...
La vitesse de la lumière étant supérieure à la vitesse du son, bien des gens paraissent brillants jusqu'au moment où ils ouvrent la bouche.

Image

Nouvelle version du 25/12/2011: Mod Breizh Shoutbox v1.5.0 || Nouvelle version du 22 Mai: Mod Breizh Ajax Checks 1.3.0
Nouvelle version du 04/03/2012: Mod Browser, os & Screen 1.0.0
|| Version du 05/03/2012 -> Erreurs et Notices de débug v1.2.0
Info Sécurité -> Renommer le dossier d'administration adm || Une captcha efficace contre les inscriptions robots || Hébergement breizh hosting (- 15% via Breizh Portal)
Avatar de l’utilisateur
sylver35
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 4571
Inscription: 26 Fév 2008 à 14:58
Localisation: Bretagne

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar shelby » 28 Fév 2011 à 16:43

Bonjour,

Je me permet de posté suite à un problème rencontrer lors de l'utilisation du code sur mon site. Le problème rencontré c'est que au lieu d'avoir mon pseudo shelby et bien sa marque Anonymous. voici les codes :

Code: Tout sélectionner
<?php
session_start();

define('IN_PHPBB', true);
$phpbb_root_path = './labs/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);
$user->setup();


?>



Code: Tout sélectionner
<p>Bienvenue <?php echo $user->data['username']; ?></p>



Comment puis je résoudre ce problème?

merci d'avance Shelby.
shelby
Posteur néophyte
Posteur néophyte
 
Messages: 7
Inscription: 28 Fév 2011 à 16:39

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar lolovoisin » 28 Fév 2011 à 16:48

bonjour,
déjà ceci
Code: Tout sélectionner
session_start();
n'a rien à faire là.
le code de base est donné dans le tuto, faites un simple copier coller ou lisez le.
Ceux qui échouent trouvent des excuses, ceux qui réussissent trouvent les moyens
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Avatar de l’utilisateur
lolovoisin
Rugbix ³
 
Messages: 37352
Inscription: 04 Mai 2006 à 12:16
Localisation: Dans la BDD ...

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar shelby » 28 Fév 2011 à 16:51

Sa ne change rien que soit avec ou sans session_start();
shelby
Posteur néophyte
Posteur néophyte
 
Messages: 7
Inscription: 28 Fév 2011 à 16:39

PrécédenteSuivante

Retourner vers Coding, Webmastering et Sécurité informatique

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités

Partenaires : phpBBHacks.com • phpBB-Seo.com • EzCom-fr.com • phpBB3 Styles • phpBB podpora • phpBB Portugal    Liens : Net Avenir • PromoBenef • Ticket Gagnant