Pagination et fichier texte, pour mon forum

anthonydu54
Invité n'ayant pas de compte PHPfrance

08 juin 2010, 15:33

Bonjour, j'ai un problème avec un système de pagination. En effet sur un fichier texte est stocké les messages des membres et j'aimerai limiter l'affichage à 5 résultats par page. Le probleme est que la pagination marche, mais lorsque l'on clique sur n'importe quel numéro de page, tout le fichier texte s'affiche (donc tous les messages).

Voici le code tel qu'il est actuellement : (je le modifie continuellement pour trouver la solution)
$file2=fopen($filename,"r");
while (!feof($file2)) {$line2.=fgets($file2,255);}
$ligne2=explode("<table border=0 cellpadding=0 cellspacing=0 bordercolor=CFCFBB>",$line2);
$limit=count($ligne2)-1;
$nbrepage2=ceil($limit/5); 

echo $line2;

echo"<br><table border=0><tr><td>Page : </td><td width=2></td><td>";
for ($op2=1;$op2<=$nbrepage2;$op2++) {
if ($op2!=$page2) 
{echo "<td width=2></td><td> <a href=read_forum3.php?id=$id&page=$page&page2=$op2&depli=$depli&click=$click>$op2</a> </td><td width=2></td>";}
else {echo"<td width=2></td><td>  <div class=\"header\"><a href=read_forum3.php?id=$id&page=$page&page2=$op2&depli=$depli&click=$click>$op2</a></div> </td><td width=2></td>";}
}
echo "</tr></table><br><br>";
oui le code est moche, mais merci beaucoup de m'aider.

ViPHP
ViPHP | 5462 Messages

08 juin 2010, 15:35

hello, utilise une base de donnée ou 1 fichier par message, sinon ca va être vite la galère

Mammouth du PHP | 672 Messages

08 juin 2010, 15:57

Bonjour.

1. Tu connais la fonction file() ? Ca te simplifierait un peu la vie.
$ligne2 = file($filename); // $ligne2 est un tableau contenant chaque ligne de $filename
2. Sans parler de BDD, c'est un peu osé de stocker ton fichier avec la présentation (c'est ce que je déduis vu le explode() )
Il serait plus judicieux de stocker les messages sous une forme la plus neutre possible, par exemple un fichier CSV qui pourrait en plus contenir plusieurs informations (par exemple : date_message;auteur;contenu)

3. J'ai peut-être râté quelque chose, mais :
if ($op2!=$page2)
Où définis-tu $page2 ?

4. Pareil, je ne vois pas l'endroit où tu affiches le contenu du fichier. $ligne2 te sert à quoi ?

5. C'est sans doute accessoire, mais que se passe-t'il si tu as 6 lignes ?
Réponse :
$limit=count($ligne2)-1; // $limit = 6 - 1 = 5
$nbrepage2=ceil($limit/5); // $nbrepage2 = ceil (5/5) = 1

Petit nouveau ! | 1 Messages

08 juin 2010, 16:24

Merci pour vos réponses,

J'ai modifier mon code en fonction des remarques :
$file2=fopen($filename,"r");
while (!feof($file2)) {$line2.=fgets($file2,255);}
$ligne2=explode("<table border=0 cellpadding=0 cellspacing=0 bordercolor=CFCFBB>",$line2);
$limit=count($ligne2)-1;
$nbrepage2=ceil($limit/5); 
echo $ligne2;

if ($page2!="") {
$taille2=5;
if ($page2==$nbrepage2) {$taille2=$limit-($taille2*($nbrepage2-1));}
$limit=$limit-($page2-1)*5;}

echo"<br><table border=0 cellpadding=0 cellspacing=0><tr><td>Page : </td><td width=2></td><td>";
for ($op2=1;$op2<=$nbrepage2;$op2++) {
if ($op2!=$page2) 
{echo "<td width=2></td><td> <a href=read_forum3.php?id=$id&page=$page&page2=$op2&depli=$depli&click=$click>$op2</a> </td><td width=2></td>";}
else {echo"<td width=2></td><td>  <div class=\"header\"><a href=read_forum3.php?id=$id&page=$page&page2=$op2&depli=$depli&click=$click>$op2</a></div> </td><td width=2></td>";}
}
echo "</tr></table><br><br>";

fclose($file2);
J'affiche le résultat avec :
echo $ligne2;
Mais cela m'affiche comme message d'erreur : "Array"

Avant j'utilisais :
echo $line2;
qui m'affiche tout les messages.

Est ce qu'il faut que je définisse $page2 avec un $_GET ? Car la valeur de la variable est transmise dans l'URL de la page et qui est par défaut égal à 1.

Mammouth du PHP | 672 Messages

10 juin 2010, 10:39

J'affiche le résultat avec :
echo $ligne2;
Mais cela m'affiche comme message d'erreur : "Array"[/php]
#-o
Ce n'est pas un message d'erreur !
explode() :
"explode() retourne un tableau de chaînes, chacune d'elle étant une sous-chaîne du paramètre string extraite en utilisant le séparateur delimiter."
$ligne2 est un Array, un echo dessus ne fonctionne pas...
Est ce qu'il faut que je définisse $page2 avec un $_GET ? Car la valeur de la variable est transmise dans l'URL de la page et qui est par défaut égal à 1.
Si valeur de la variable est transmise dans l'URL (genre ?page=3), tu dois la récupérer par un $_GET.
En fait, pour être plus précis : suivant la configuration de PHP, il est possible que tu puisses récupérer directement la variable, mais ça dépend de la configuration de PHP et ça pose des problèmes de sécurité. Bref, à éviter...

Sinon, le fichier $filename contient bien tous les messages ? Ils sont séparés par le <table ...> ?
=> Il faudrait n'afficher que les messages correspondants à la page demandée, et penser à remettre la balise table (qui est supprimée avec le explode())