Voici une page permettant d'afficher des statistiques détaillées sur votre forum phpBB :
Affiche un tableau de 6 colonnes. Pour chaque colonne, la liste des 30 utilisateurs classés selon le nombre de messages postés (du plus grand au plus petit) selon les périodes suivantes :
sur les dernières 24 heures, la semaine, le mois, le trimestre, le semestre, l'année.
Capture écran en pièce jointe.
Ce code php fonctionne avec php 5.5. (ma version de forum : phpBB 3.1.9)
Il suffit de copier le code ci-dessous, de l'enregistrer dans un fichier.php et de l'upLoader à la racine du forum.
Créer enfin un lien vers cette page.
En donnant un nom particulier à ce fichier php (par exemple : comptage.php) et en ne communiquant le lien qu'à certains responsables du site, on privilégie l'accès à ces informations à l'équipe de modération / administration.
Si cela peut vous être utile
Forumement,
ym_trainz
Code : Tout sélectionner
<?php
/* -------------------------------------------------
code pour calcul de statistiques
par martial B. , MAJ mai 2016 par Yves M. (ym_trainz)
fonctionne avec php 5.5.34 / phpBB 3.1.9
copier puis enregistrer sous [root]/statistique.php
utilisation : à réserver à l'équipe de modération / admin
-----------------------------------------------------
*/
echo'<html><head>
<style type="text/css">
.Style1 {
color: #94BAD6;
font-weight: bold;
font-style: italic;
font-size: 24px;
}
.Style2 {
color: #94BAD6;
font-weight: bold;
font-style: italic;
}
body {
font-family: Arial, "Times New Roman", Times, serif;
}
td {
/* height: 50px; */
vertical-align: top;
font-size: small;
}
</style>
</head>';
if(isset($_POST['nbpost'])){
$nbpost = $_POST['nbpost']; // nombre de meilleurs posteurs
}
else{
$nbpost = 30; // nombre de meilleurs posteurs par défaut
}
echo '<body>
<div align="center">
<a href="index.php"><img src="styles/prosilver/theme/images/site_logo.gif"></a></br>
<span class="Style1">Petite page de statistiques.</span>
<p align="center" class="Style2">
<form action="comptage.php" method="post">
Ces statistiques sont basées sur les <input type="text" style="width:40px; background-color:#DDEB93;" name="nbpost" value="'.$nbpost.'"> meilleurs posteurs.<input name="button_process" type="submit" value="Recalculer">
</form>
<a href="index.php">Retour page Index</a>
</p>
</div>
';
// -------------------------------------------------
include("config.php");
// $db = mysql_connect($dbhost, $dbname, $dbpasswd);
$db = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname);
// mysql_select_db($dbname,$db);
// mysqli_select_db($dbname,$db);
// nomUser : pseudo utilisateur
// nbPost : nombre de posts sur la période donnée
$jour = time() - 86400;
$semaine = time() - 604480;
$mois = time() - 2419200;
$trimestre = time() - 7257600;
$semestre = time() - 14515200;
$annee = time() - 29030400;
$sql = 'SELECT s1.nbPost, s2.nomUser FROM (SELECT poster_id AS idUser, count( * ) AS nbPost FROM phpbb3_posts WHERE phpbb3_posts.post_time >'.$jour.' GROUP BY phpbb3_posts.poster_id)s1 JOIN (SELECT user_id AS idUser, username AS nomUser FROM phpbb3_users)s2 ON s1.idUser = s2.idUser order by nbPost DESC limit '.$nbpost.'';
$req = mysqli_query($db, $sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$sql1 = 'SELECT s1.nbPost1, s2.nomUser1 FROM (SELECT poster_id AS idUser, count( * ) AS nbPost1 FROM phpbb3_posts WHERE phpbb3_posts.post_time >'.$semaine.' GROUP BY phpbb3_posts.poster_id)s1 JOIN (SELECT user_id AS idUser, username AS nomUser1 FROM phpbb3_users)s2 ON s1.idUser = s2.idUser order by nbPost1 DESC limit '.$nbpost.'';
$req1 = mysqli_query($db, $sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
$sql2 = 'SELECT s1.nbPost2, s2.nomUser2 FROM (SELECT poster_id AS idUser, count( * ) AS nbPost2 FROM phpbb3_posts WHERE phpbb3_posts.post_time >'.$mois.' GROUP BY phpbb3_posts.poster_id)s1 JOIN (SELECT user_id AS idUser, username AS nomUser2 FROM phpbb3_users)s2 ON s1.idUser = s2.idUser order by nbPost2 DESC limit '.$nbpost.'';
$req2 = mysqli_query($db, $sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());
$sql3 = 'SELECT s1.nbPost3, s2.nomUser3 FROM (SELECT poster_id AS idUser, count( * ) AS nbPost3 FROM phpbb3_posts WHERE phpbb3_posts.post_time >'.$trimestre.' GROUP BY phpbb3_posts.poster_id)s1 JOIN (SELECT user_id AS idUser, username AS nomUser3 FROM phpbb3_users)s2 ON s1.idUser = s2.idUser order by nbPost3 DESC limit '.$nbpost.'';
$req3 = mysqli_query($db, $sql3) or die('Erreur SQL !<br>'.$sql3.'<br>'.mysql_error());
$sql4 = 'SELECT s1.nbPost4, s2.nomUser4 FROM (SELECT poster_id AS idUser, count( * ) AS nbPost4 FROM phpbb3_posts WHERE phpbb3_posts.post_time >'.$semestre.' GROUP BY phpbb3_posts.poster_id)s1 JOIN (SELECT user_id AS idUser, username AS nomUser4 FROM phpbb3_users)s2 ON s1.idUser = s2.idUser order by nbPost4 DESC limit '.$nbpost.'';
$req4 = mysqli_query($db, $sql4) or die('Erreur SQL !<br>'.$sql4.'<br>'.mysql_error());
$sql5 = 'SELECT s1.nbPost5, s2.nomUser5 FROM (SELECT poster_id AS idUser, count( * ) AS nbPost5 FROM phpbb3_posts WHERE phpbb3_posts.post_time >'.$annee.' GROUP BY phpbb3_posts.poster_id)s1 JOIN (SELECT user_id AS idUser, username AS nomUser5 FROM phpbb3_users)s2 ON s1.idUser = s2.idUser order by nbPost5 DESC limit '.$nbpost.'';
$req5 = mysqli_query($db, $sql5) or die('Erreur SQL !<br>'.$sql5.'<br>'.mysql_error());
echo '<table width="1020" align="center" style="vertical-align:top;">';
echo '<tr>';
echo '<td>';
$output = '<table width="160" bgcolor="#94BAD6" border="1" align="center">';
echo '<table><p align="center" class="Style2"">H-24<br>dernieres 24h.</p></table>';
while($data = mysqli_fetch_assoc($req))
{
$output .= '<tr>';
$output .= '<td>'.$j2=$data['nomUser'].'</td>';
$output .= '<td>'.$j1=$data['nbPost'].'</td>';
$output .= '</tr>';
// on affiche les informations de l'enregistrement en cours
//$j1=$data['nbPost'];
//$j2=$data['nomUser'];
}
$output .= '</table>';
echo $output;
echo '</td>';
echo '<td>';
$output1 = '<table width="160" bgcolor="#6B8AA5" border="1" align="center">';
echo '<table><p align="center" class="Style2"">J-7<br>(1 semaine)</p></table>';
while($data1 = mysqli_fetch_assoc($req1))
{
$output1 .= '<tr>';
$output1 .= '<td>'.$s2=$data1['nomUser1'].'</td>';
$output1 .= '<td>'.$s1=$data1['nbPost1'].'</td>';
$output1 .= '</tr>';
// on affiche les informations de l'enregistrement en cours
//$j1=$data['nbPost'];
//$j2=$data['nomUser'];
}
$output1 .= '</table>';
echo $output1;
echo '</td>';
echo '<td>';
$output2 = '<table width="160" bgcolor="#94BAD6" border="1" align="center">';
echo '<table><p align="center" class="Style2"">J-30<br>(le dernier mois)</p></table>';
while($data2 = mysqli_fetch_assoc($req2))
{
$output2 .= '<tr>';
$output2 .= '<td>'.$s2=$data2['nomUser2'].'</td>';
$output2 .= '<td>'.$s1=$data2['nbPost2'].'</td>';
$output2 .= '</tr>';
// on affiche les informations de l'enregistrement en cours
//$j1=$data['nbPost'];
//$j2=$data['nomUser'];
}
$output2 .= '</table>';
echo $output2;
echo '</td>';
echo '<td>';
$output3 = '<table width="160" bgcolor="#6B8AA5" border="1" align="center">';
echo '<table><p align="center" class="Style2"">le dernier<br>trimestre</p></table>';
while($data3 = mysqli_fetch_assoc($req3))
{
$output3 .= '<tr>';
$output3 .= '<td>'.$s2=$data3['nomUser3'].'</td>';
$output3 .= '<td>'.$s1=$data3['nbPost3'].'</td>';
$output3 .= '</tr>';
// on affiche les informations de l'enregistrement en cours
//$j1=$data['nbPost'];
//$j2=$data['nomUser'];
}
$output3 .= '</table>';
echo $output3;
echo '</td>';
echo '<td>';
$output4 = '<table width="160" bgcolor="#94BAD6" border="1" align="center">';
echo '<table><p align="center" class="Style2"">Le dernier<br>semestre</p></table>';
while($data4 = mysqli_fetch_assoc($req4))
{
$output4 .= '<tr>';
$output4 .= '<td>'.$s2=$data4['nomUser4'].'</td>';
$output4 .= '<td>'.$s1=$data4['nbPost4'].'</td>';
$output4 .= '</tr>';
// on affiche les informations de l'enregistrement en cours
//$j1=$data['nbPost'];
//$j2=$data['nomUser'];
}
$output4 .= '</table>';
echo $output4;
echo '</td>';
echo '<td>';
$output5 = '<table width="160" bgcolor="#6B8AA5" border="1" align="center">';
echo '<table><p align="center" class="Style2"">J-360<br>(une année)</p></table>';
while($data5 = mysqli_fetch_assoc($req5))
{
$output5 .= '<tr>';
$output5 .= '<td>'.$s2=$data5['nomUser5'].'</td>';
$output5 .= '<td>'.$s1=$data5['nbPost5'].'</td>';
$output5 .= '</tr>';
// on affiche les informations de l'enregistrement en cours
//$j1=$data['nbPost'];
//$j2=$data['nomUser'];
}
$output5 .= '</table>';
echo $output5;
echo '</td>';
echo '</tr>';
echo '<table>';
// on ferme la connexion à mysql
mysqli_close($db);
echo '</body></html>';
?>
[EDIT Raphaël]Ajout d’une icône de sujet et harmonisation du titre du sujet.