[RESOLU] Pagination et fichier texte

Eléphanteau du PHP | 33 Messages

24 janv. 2013, 12:31

Bonjour à tous,

J'utilise un script très simple (peut être trop simple) qui enregistre le pseudo, le courriel et le message des visiteurs directement en ligne codée intégrant du html dans un fichier texte grâce à la fonction fopen

Je souhaiterais créer une pagination : au bout de 5 message par page on créer une nouvelle page accessible par lien cliquable.

Pour cela j'ai utilisé explode en repérant les fins de messages <hr /> et fopen
Pour l'instant je n'ai réussi qu'à faire des script très simples et je n'avance vraiment sur celui ci. Pourriez vous me venir en aide en organisant les informations par des tableaux pour créer cette pagination s'il vous plait.

Huitre
Invité n'ayant pas de compte PHPfrance

24 janv. 2013, 14:27

OOOooh lalalalala! Répondez moi s'il vous plait! SI je n'envoies pas le script ce soir ils vont éliminer toute ma famille retenue en otage :cry:

ViPHP
xTG
ViPHP | 7331 Messages

24 janv. 2013, 15:03

Beh j'ai bien lu ton message mais je n'ai pas trouvé de question...
Pourriez vous me venir en aide en organisant les informations par des tableaux pour créer cette pagination s'il vous plait.
Moi je n'y interprète que "je cherche quelqu'un pour me fournir un code".
Et là je pourrai répondre comme à d'autres, c'est dans la catégorie Emploi qu'il faut poster. :)

Mais sinon cela peut être intéressant un bon repas, les repas de fête se font loin déjà. 8-)

Eléphanteau du PHP | 33 Messages

24 janv. 2013, 17:36

Les ravisseurs m'ont laissés 24h supplémentaires
Voila ce que j'ai commencé rapidement
<?php
   $nb = 5; // Nombre d'affichage par page

	$file = "messages/messages.txt";
    if (file_exists($file))   
	// Ouverture en lecture seul!
    $axfile = fopen($file, "r" ); 
    else { echo "Mauvais chemin de fichier on stoppe tout!"; exit(); }
    $table = array();
    $i=0 ;
    // lecture complète du fichier
    while(!feof($axfile))
    {
    // Pompage d'infos    
    $ligne = fgets($axfile,4096); // Récupération     
    $nbmsg = explode("<hr />",$ligne);
    }

    $nbritem=count($table); 
	echo $nbritem;
	// Nombre de résultats par page
?>
Sinon comme je l'ai dit en début de poste, j'écris dans un fichier texte le contenu ou $data que voici:
// Récupération du pseudonyme et du message.
$data = '<u><i><b><a href="mailto:'.($_POST['courriel']).'">'.($_POST['pseudo']).'</a></i></b></u> a laissé ce message le <b>'.date($cfg['format_date']).'</b></p><p>'.clean($_POST["message"]).'</p><hr />';
Mes questions: Comment dois je procéder pour créer une pagination des informations de ce fichier texte ?
Est ce bien parti : problèmes de sécurité par exemple? Si oui comment y remédier

ViPHP
xTG
ViPHP | 7331 Messages

24 janv. 2013, 17:46

Il te manque un fclose() dans ton code.
Mais sinon le plus simple est d'utiliser un file_get_contents() pour récupérer tout le contenu du fichier dans un buffer.

Tu as donc ton array avec les différents messages.
Il ne te manque donc pas grand chose. Un peu de math et de mise en pratique de la récupération d'infos.
Savoir quelle est la page courante et appliquer un petit calcul pour aller jusqu'au message et ensuite afficher les X messages suivants.

Code : Tout sélectionner

pageCourante = 0; // ou sinon on prend une valeur passée en GET nbParPage = 5; // disons qu'on affichage 5 messages par page indexMin = pageCourante * nbParPage; // calcul de l'index du premier message à afficher indexMax = pageCourante * nbParPage + nbParPage; Si indexMin < 0 || indexMin > count(table) Alors // on est hors tableau là ! Sinon TantQue indexMin < indexMax Faire Afficher table[indexMin]; indexMin++; FinTanQue FinSi
Et hop on a notre page. ;)
Pour lister la liste des pages et faire des liens avec :

Code : Tout sélectionner

index = 0; TantQue nbrItem < (index +1) * nbParPage Faire Afficher index; // numéro de page commençant à 0 index++; FinTantQue

ViPHP
AB
ViPHP | 5818 Messages

24 janv. 2013, 18:33

xTG t'a donné le principe, mais je me demande si tu devrais continuer dans cette voie d'utiliser un fichier texte. Cela ne va pas te faciliter les choses par la suite surtout si tu veux faire du tri, des recherches etc. Si ton volume de données devient important et/ou si tu veux des fonctionnalités avancées, il vaudrait mieux te tourner vers une base de donnée.

Eléphanteau du PHP | 33 Messages

24 janv. 2013, 18:38

Avant > :) Après> :shock:

Moui ça j'ai lu sur internet mais c'est pour la récupération d'informations et ce foutu tableau j'ai l'impression que ça ne fonctionne pas il m'affiche des choses aberrantes même en trifouillant.

Pour ce qui est du get_file_contents j'ai lu les informations sur cette balise et je ne vois pas du tout comment l'exploiter.
Je suis beaucoup plus à l'aise avec du langage css ou html qu'avec du Peup

ViPHP
AB
ViPHP | 5818 Messages

24 janv. 2013, 18:52

Avant > :)
Pour ce qui est du get_file_contents j'ai lu les informations sur cette balise et je ne vois pas du tout comment l'exploiter.
Je suis beaucoup plus à l'aise avec du langage css ou html qu'avec du Peup
Ben suffit de regarder la doc. get_file_contents t'évites la litanie des fopen,fget, fclose...

Et donc il te suffit de faire
$file = "messages/messages.txt";
    if (file_exists($file))   
{
$text = get_file_contents($file);

// dans $text tu as maintenant tout le contenu du fichier texte
}
et si tu préfère avoir un tableau correspondant à tes lignes tu peux utiliser la fonction file()

Eléphanteau du PHP | 33 Messages

25 janv. 2013, 15:32

Pas de base de données non

J'ai fais des tones d'essais en local mais y'a rien à faire. Get_file_content survole l'ensemble du fichier texte mais ne peut compter le nombre de messages mis en vrac.

En observant d'autres script type " flat" j'observe qu'ils se limitent pour la plupart à à deux liens "Messages suivants" et "précédents"

ViPHP
xTG
ViPHP | 7331 Messages

25 janv. 2013, 15:35

get_file_content() ne compte en effet pas les lignes puisqu'il ne fait que récupérer le contenu du fichier !
Il remplace juste dans ton script : fopen(), ta boucle sur fgets() et fclose().
Après il faut bien utiliser un explode et un count. ;)

Eléphanteau du PHP | 33 Messages

26 janv. 2013, 13:12

C'est bon j'ai trouvé de quoi résoudre mon problème et c'est aussi grâce à vous. Un grand merci