Pagination pour mon forum
Résolu
younesase
Messages postés
80
Date d'inscription
Statut
Membre
Dernière intervention
-
h4ckkids Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
h4ckkids Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai créer un forum ou j'ai mis plusieurs catégorie et dans chaque catégorie il y a les sujets que l'utilisateur écrit mais mon problème et que si il y a plusieurs sujets dans une catégorie par exemple 100 je veux pas qu'il soient tous dans une pages , c'est pour ça que je veut créer un système de pagination pour mon forum , merci de m'aider
Voila ma la table topics de ma base de donné:
CREATE TABLE 'topics' (
'parent' smallint(6) NOT NULL,
'id' int(11) NOT NULL,
'id2' int(11) NOT NULL,
'title' varchar(256) NOT NULL,
'message' longtext NOT NULL,
'authorid' int(11) NOT NULL,
'timestamp' int(11) NOT NULL,
'timestamp2' int(11) NOT NULL,
PRIMARY KEY ('id','id2')
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
----------------------------------------------------------------------------------
Voila mon code
La page list_topics.php :
<?php
//Cette page permet d'afficher la liste des sujets d'une categorie de forum
include('config.php');
if(isset($_GET['parent']))
{
$id = intval($_GET['parent']);
$dn1 = mysql_fetch_array(mysql_query('select count(c.id) as nb1, c.name,count(t.id) as topics from categories as c left join topics as t on t.parent="'.$id.'" where c.id="'.$id.'" group by c.id'));
if($dn1['nb1']>0)
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="<?php echo $design; ?>/style.css" rel="stylesheet" title="Style" />
<title><?php echo htmlentities($dn1['name'], ENT_QUOTES, 'UTF-8'); ?> - Forum</title>
</head>
<body>
<header>
<?php
include 'header.php';
?>
</header>
<?php
if(isset($_SESSION['username']))
{
$nb_new_pm = mysql_fetch_array(mysql_query('select count(*) as nb_new_pm from pm where ((user1="'.$_SESSION['userid'].'" and user1read="no") or (user2="'.$_SESSION['userid'].'" and user2read="no")) and id2="1"'));
$nb_new_pm = $nb_new_pm['nb_new_pm'];
?>
<div class="box">
<div class="box_left">
<a href="<?php echo $url_home; ?>">Index du Forum</a> > <a href="list_topics.php?parent=<?php echo $id; ?>"><?php echo htmlentities($dn1['name'], ENT_QUOTES, 'UTF-8'); ?></a>
</div>
<div class="box_right">
<a href="list_pm.php">Vos messages(<?php echo $nb_new_pm; ?>)</a> - <a href="profile.php?id=<?php echo $_SESSION['userid']; ?>"><?php echo htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8'); ?></a> (<a href="login.php">Déconnexion</a>)
</div>
<div class="clean"></div>
</div>
<?php
}
else
{
?>
<div class="box">
<div class="box_left">
<a href="<?php echo $url_home; ?>">Index du Forum</a> > <a href="list_topics.php?parent=<?php echo $id; ?>"><?php echo htmlentities($dn1['name'], ENT_QUOTES, 'UTF-8'); ?></a>
</div>
<div class="box_right">
<a href="signup.php">Inscription</a> - <a href="login.php">Connexion</a>
</div>
<div class="clean"></div>
</div>
<?php
}
if(isset($_SESSION['username']))
{
?>
<a href="new_topic.php?parent=<?php echo $id; ?>" class="button">Nouveau Sujet</a>
<?php
}
$dn2 = mysql_query('select t.id, t.title, t.authorid, u.username as author, count(r.id) as replies from topics as t left join topics as r on r.parent="'.$id.'" and r.id=t.id and r.id2!=1 left join users as u on u.id=t.authorid where t.parent="'.$id.'" and t.id2=1 group by t.id order by t.timestamp2 desc');
if(mysql_num_rows($dn2)>0)
{
?>
<table class="topics_table" name="topics">
<tr>
<th class="forum_tops">Sujet</th>
<th class="forum_auth">Auteur</th>
<th class="forum_nrep">Réponses</th>
<?php
if(isset($_SESSION['username']) and $_SESSION['username']==$admin)
{
?>
<th class="forum_act">Action</th>
<?php
}
?>
</tr>
<?php
while($dnn2 = mysql_fetch_array($dn2))
{
?>
<tr>
<td class="forum_tops"><a href="read_topic.php?id=<?php echo $dnn2['id']; ?>"><?php echo htmlentities($dnn2['title'], ENT_QUOTES, 'UTF-8'); ?></a></td>
<td><a href="profile.php?id=<?php echo $dnn2['authorid']; ?>"><?php echo htmlentities($dnn2['author'], ENT_QUOTES, 'UTF-8'); ?></a></td>
<td><?php echo $dnn2['replies']; ?></td>
<?php
if(isset($_SESSION['username']) and $_SESSION['username']==$admin)
{
?>
<td><a href="delete_topic.php?id=<?php echo $dnn2['id']; ?>"><img src="<?php echo $design; ?>/images/delete.png" alt="Delete" /></a></td>
<?php
}
?>
</tr>
<?php
}
?>
</table>
<?php
}
else
{
?>
<div class="message">Cette catégorie ne contient aucun sujet.</div>
<?php
}
if(isset($_SESSION['username']))
{
?>
<a href="new_topic.php?parent=<?php echo $id; ?>" class="button">Nouveau Sujet</a>
<?php
}
else
{
?>
<div class="box_login">
<form action="login.php" method="post">
<label for="username">Nom d'utilisateur</label><input type="text" name="username" id="username" /><br />
<label for="password">Mot de passe</label><input type="password" name="password" id="password" /><br />
<label for="memorize">Se souvenir</label><input type="checkbox" name="memorize" id="memorize" value="yes" />
<div class="center">
<input type="submit" value="Login" /> <input type="button" onclick="javascript:document.location='signup.php';" value="S'inscrire" />
</div>
</form>
</div>
<?php
}
?>
</body>
</html>
<?php
}
else
{
echo '<h2>La catégorie que vous désirez visiter n\'existe pas.</h2>';
}
}
else
{
echo '<h2>L\'identifiant de la catégorie que vous désirez visiter n\'est pas défini.</h2>';
}
?>
<?php
include 'footer.php';
?>
J'ai créer un forum ou j'ai mis plusieurs catégorie et dans chaque catégorie il y a les sujets que l'utilisateur écrit mais mon problème et que si il y a plusieurs sujets dans une catégorie par exemple 100 je veux pas qu'il soient tous dans une pages , c'est pour ça que je veut créer un système de pagination pour mon forum , merci de m'aider
Voila ma la table topics de ma base de donné:
CREATE TABLE 'topics' (
'parent' smallint(6) NOT NULL,
'id' int(11) NOT NULL,
'id2' int(11) NOT NULL,
'title' varchar(256) NOT NULL,
'message' longtext NOT NULL,
'authorid' int(11) NOT NULL,
'timestamp' int(11) NOT NULL,
'timestamp2' int(11) NOT NULL,
PRIMARY KEY ('id','id2')
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
----------------------------------------------------------------------------------
Voila mon code
La page list_topics.php :
<?php
//Cette page permet d'afficher la liste des sujets d'une categorie de forum
include('config.php');
if(isset($_GET['parent']))
{
$id = intval($_GET['parent']);
$dn1 = mysql_fetch_array(mysql_query('select count(c.id) as nb1, c.name,count(t.id) as topics from categories as c left join topics as t on t.parent="'.$id.'" where c.id="'.$id.'" group by c.id'));
if($dn1['nb1']>0)
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="<?php echo $design; ?>/style.css" rel="stylesheet" title="Style" />
<title><?php echo htmlentities($dn1['name'], ENT_QUOTES, 'UTF-8'); ?> - Forum</title>
</head>
<body>
<header>
<?php
include 'header.php';
?>
</header>
<?php
if(isset($_SESSION['username']))
{
$nb_new_pm = mysql_fetch_array(mysql_query('select count(*) as nb_new_pm from pm where ((user1="'.$_SESSION['userid'].'" and user1read="no") or (user2="'.$_SESSION['userid'].'" and user2read="no")) and id2="1"'));
$nb_new_pm = $nb_new_pm['nb_new_pm'];
?>
<div class="box">
<div class="box_left">
<a href="<?php echo $url_home; ?>">Index du Forum</a> > <a href="list_topics.php?parent=<?php echo $id; ?>"><?php echo htmlentities($dn1['name'], ENT_QUOTES, 'UTF-8'); ?></a>
</div>
<div class="box_right">
<a href="list_pm.php">Vos messages(<?php echo $nb_new_pm; ?>)</a> - <a href="profile.php?id=<?php echo $_SESSION['userid']; ?>"><?php echo htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8'); ?></a> (<a href="login.php">Déconnexion</a>)
</div>
<div class="clean"></div>
</div>
<?php
}
else
{
?>
<div class="box">
<div class="box_left">
<a href="<?php echo $url_home; ?>">Index du Forum</a> > <a href="list_topics.php?parent=<?php echo $id; ?>"><?php echo htmlentities($dn1['name'], ENT_QUOTES, 'UTF-8'); ?></a>
</div>
<div class="box_right">
<a href="signup.php">Inscription</a> - <a href="login.php">Connexion</a>
</div>
<div class="clean"></div>
</div>
<?php
}
if(isset($_SESSION['username']))
{
?>
<a href="new_topic.php?parent=<?php echo $id; ?>" class="button">Nouveau Sujet</a>
<?php
}
$dn2 = mysql_query('select t.id, t.title, t.authorid, u.username as author, count(r.id) as replies from topics as t left join topics as r on r.parent="'.$id.'" and r.id=t.id and r.id2!=1 left join users as u on u.id=t.authorid where t.parent="'.$id.'" and t.id2=1 group by t.id order by t.timestamp2 desc');
if(mysql_num_rows($dn2)>0)
{
?>
<table class="topics_table" name="topics">
<tr>
<th class="forum_tops">Sujet</th>
<th class="forum_auth">Auteur</th>
<th class="forum_nrep">Réponses</th>
<?php
if(isset($_SESSION['username']) and $_SESSION['username']==$admin)
{
?>
<th class="forum_act">Action</th>
<?php
}
?>
</tr>
<?php
while($dnn2 = mysql_fetch_array($dn2))
{
?>
<tr>
<td class="forum_tops"><a href="read_topic.php?id=<?php echo $dnn2['id']; ?>"><?php echo htmlentities($dnn2['title'], ENT_QUOTES, 'UTF-8'); ?></a></td>
<td><a href="profile.php?id=<?php echo $dnn2['authorid']; ?>"><?php echo htmlentities($dnn2['author'], ENT_QUOTES, 'UTF-8'); ?></a></td>
<td><?php echo $dnn2['replies']; ?></td>
<?php
if(isset($_SESSION['username']) and $_SESSION['username']==$admin)
{
?>
<td><a href="delete_topic.php?id=<?php echo $dnn2['id']; ?>"><img src="<?php echo $design; ?>/images/delete.png" alt="Delete" /></a></td>
<?php
}
?>
</tr>
<?php
}
?>
</table>
<?php
}
else
{
?>
<div class="message">Cette catégorie ne contient aucun sujet.</div>
<?php
}
if(isset($_SESSION['username']))
{
?>
<a href="new_topic.php?parent=<?php echo $id; ?>" class="button">Nouveau Sujet</a>
<?php
}
else
{
?>
<div class="box_login">
<form action="login.php" method="post">
<label for="username">Nom d'utilisateur</label><input type="text" name="username" id="username" /><br />
<label for="password">Mot de passe</label><input type="password" name="password" id="password" /><br />
<label for="memorize">Se souvenir</label><input type="checkbox" name="memorize" id="memorize" value="yes" />
<div class="center">
<input type="submit" value="Login" /> <input type="button" onclick="javascript:document.location='signup.php';" value="S'inscrire" />
</div>
</form>
</div>
<?php
}
?>
</body>
</html>
<?php
}
else
{
echo '<h2>La catégorie que vous désirez visiter n\'existe pas.</h2>';
}
}
else
{
echo '<h2>L\'identifiant de la catégorie que vous désirez visiter n\'est pas défini.</h2>';
}
?>
<?php
include 'footer.php';
?>
A voir également:
- Pagination pour mon forum
- Pagination powerpoint - Guide
- Abonnement iptv illegaal forum - Forum TV & Vidéo
- Abonnements IPTV moin chère - Forum Box et Streaming vidéo
- Plinko avis forum ✓ - Forum Vos droits sur internet
- Iptv bug forum ✓ - Forum Box et Streaming vidéo
1 réponse
Salut younesase, j'ai eu le même problème à une époque, et j'ai trouvé la solution alors je te donne le code, mais il te faudra l'adapter à ton code évidemment.
D'abord, la fonction a simplement copier coller.
Ensuite, tu devras adapter ceci.
Je réponds à toutes tes questions en cas de besoin ;)
(si tu veux voir un exemple, sur le site dans ma signature c'est ce code qui est utilisé.
D'abord, la fonction a simplement copier coller.
<?php function barre_navigation ($nb_total, $nb_affichage_par_page, $debut, $nb_liens_dans_la_barre) { $barre = ''; // on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT if ($_SERVER['QUERY_STRING'] == "") { $query = $_SERVER['PHP_SELF'].'?debut='; } else { $tableau = explode ("debut=", $_SERVER['QUERY_STRING']); $nb_element = count ($tableau); if ($nb_element == 1) { $query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut='; } else { if ($tableau[0] == "") { $query = $_SERVER['PHP_SELF'].'?debut='; } else { $query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut='; } } } // on calcul le numéro de la page active $page_active = floor(($debut/$nb_affichage_par_page)+1); // on calcul le nombre de pages total que va prendre notre affichage $nb_pages_total = ceil($nb_total/$nb_affichage_par_page); // on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin) // exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11 if ($nb_liens_dans_la_barre%2==0) { $cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1; $cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2); } else { $cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2)); $cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2)); } if ($cpt_deb1 <= 1) { $cpt_deb = 1; $cpt_fin = $nb_liens_dans_la_barre; } elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) { $cpt_deb = $cpt_deb1; $cpt_fin = $cpt_fin1; } else { $cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1; $cpt_fin = $nb_pages_total; } if ($nb_pages_total <= $nb_liens_dans_la_barre) { $cpt_deb=1; $cpt_fin=$nb_pages_total; } // si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page if ($cpt_deb != 1) { $cible = $query.(0); $lien = '<A HREF="'.$cible.'"><<</A> '; } else { $lien=''; } $barre .= $lien; // on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) { if ($cpt == $page_active) { if ($cpt == $nb_pages_total) { $barre .= $cpt; } else { $barre .= $cpt.' - '; } } else { if ($cpt == $cpt_fin) { $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page); $barre .= "'>".$cpt."</A>"; } else { $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page); $barre .= "'>".$cpt."</A> - "; } } } $fin = ($nb_total - ($nb_total % $nb_affichage_par_page)); if (($nb_total % $nb_affichage_par_page) == 0) { $fin = $fin - $nb_affichage_par_page; } // si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation if ($cpt_fin != $nb_pages_total) { $cible = $query.$fin; $lien = ' <A HREF="'.$cible.'">>></A>'; } else { $lien=''; } $barre .= $lien; return $barre; } ?>
Ensuite, tu devras adapter ceci.
// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages // Avec des if else if j'avais prévu toutes les requêtes sql en fonctions des $_GET pour compter le nombre de textes. $sql='SELECT COUNT(*) as nombre FROM histoires' ; // on exécute cette requête $resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on récupère le nombre d'éléments à afficher $nb_total = mysql_fetch_array($resultat); // on teste si ce nombre de vaut pas 0 if (($nb_total = $nb_total[0]) == 0) { echo '<div class="aucune">Aucune histoire ne correspond à votre recherche.</div>'; } else { // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0 if (empty($_GET['debut']) || (!mb_ereg("^[0-9]+$", $_GET['debut'])) || $_GET['debut'] < 0){ $_GET['debut'] = 0;} //Si debut n'est pas un nombre ou qu'il est inférieur à 0, on va l'initié à 0. $nb_affichage_par_page = 15; // Préparation de la requête avec le LIMIT //On prépare la requête sql pour l'affichage des textes. if(isset($_GET['type']) && ($_GET['type']) != '' && isset($_GET['sujet']) && ($_GET['sujet']) != '' && isset($_GET['auteur']) && ($_GET['auteur']) != '') { $sql=' SELECT * FROM histoires WHERE sujet = \''.$_GET['sujet'].'\' AND type = \''.$_GET['type'].'\' AND pseudo_auteur = \''.$_GET['auteur'].'\' ORDER BY id_histoire DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page; } else { $sql='SELECT * FROM histoires ORDER BY vue ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page; } // on exécute la requête $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on va scanner tous les tuples un par un while ($donnees = mysql_fetch_array($req)) { ?> <div><hr color=grey size=1px></hr> <?php //Maintenant, on affiche les histoires que l'on veut. echo '<p class="histoire"> <a href="texte.php?texte='.htmlspecialchars($donnees['id_histoire']).'"><span style="font-size: 1.1em;">' . str_replace('\\\'','\'', htmlspecialchars($donnees['titre'])).'</span><br /><span class="titre">Thème:</span> '.htmlspecialchars($donnees['sujet']).'<br /><span class="titre">Résumé:</span> '.htmlspecialchars($donnees['resume']).'<br /><span class="titre">Publié par:</span> '.htmlspecialchars($donnees['pseudo_auteur']).' le '.htmlspecialchars($donnees['date_ecriture']).'<br /></a><br /></p>'; if(isset($_SESSION['page_supp'])) { echo'<a href="confirm_supp_text.php?id='.htmlspecialchars($donnees['id_histoire']).'">Supprimer ' . $donnees['titre'] . '</a><br /> <a href="modif_texte.php?id='.htmlspecialchars($donnees['id_histoire']).'">Modifier '.htmlspecialchars($donnees['titre']).'</a></p> ';} ?> </div> <?php } // on libère l'espace mémoire alloué pour cette requête mysql_free_result ($req); // on affiche enfin notre barre, en utilisant la fonction qui est déclarée au dessus. echo '<div class="barre">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 10).'</div>'; } // on libère l'espace mémoire alloué pour cette requête mysql_free_result ($resultat); // on ferme la connexion à la base de données. mysql_close (); ?> </body> </html>
Je réponds à toutes tes questions en cas de besoin ;)
(si tu veux voir un exemple, sur le site dans ma signature c'est ce code qui est utilisé.