Portail PHP

Forum de discussion et d'aide au php

Vous n'êtes pas identifié.

Annonce

Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides.
FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans.
Proposez vos news : si vous avez un evenement à annoncer
le chat : venez discuter de php.
 

#1 23-12-2007 18:33:20

dechichulien
Membre
Lieu: strasbourg
Date d'inscription: 29-11-2007
Messages: 67
Site web

Listage D'un Repertoire

Salut a tous,
j'ai encor besoin d'aide!
Je sui entrain d'écrir un script de livre d'or qui fonctionne pour l'instant, mais mon problème c'est que les message qui s'affiche sont trier dans l'ordre dans lequel il on été posté!
moi je voudrait que le dernier message soit affiché en premier et non en dernier!!!
(ps: pour chaque message, il y a un fichier texte, et ces fichier son contenue dans le dossier "code", et le nom des fichier est calculer automatiquement avec un compteur que j'ai modifier c'est a dir : "1.txt" "2.txt" "3.txt"...etc
de cette façon, il ne risque pas de se mélanger!!)
Voici le code qui me permet de lister le répertoire et d'afficher les message :


<?php
$dossier = 'code';

if(isset($_COOKIE['affichage'])){
$cookie = $_COOKIE['affichage'];
$val=split('[;.-]',$cookie);
if(is_numeric($val[0]) && strlen($val[0]) < 5){
$max_messages = addslashes($val[0]);
}
else{
$requette = $val[0];

}
if(is_numeric($val[1]) && strlen($val[1]) < 5){
}
else{
$requette = $val[1];

}
}
else{
$max_messages = 10;
}
?>
<table width="800">
<tr><td class="tableau" width="800" valign="middle">
<form method="get" action="">
<p>
nombre de message par page : <select name="nombre" size="1" id="select1">
<option>2</option>
<option>5</option>
<option selected>10</option>
<option>20</option>
<option>50</option>
<option>100</option>
</select>
<input type="submit" value="Valider">
</p>
</form>
<?php
if(isset($_GET['nombre'])){
if(is_numeric($_GET['nombre']) && strlen($_GET['nombre']) < 5){
$max_messages = addslashes($_GET['nombre']);
}
else{
$requette = $_GET['nombre'];

}
}

if(!isset($_GET['messages'])){
$affichage = 0;
$index = $affichage/$max_messages+1;
}
else{
$affichage = addslashes($_GET['messages']);
if(is_numeric($affichage) && strlen($_GET['messages']) < 5){
$index = $affichage/$max_messages+1;
}
else{
$requette = $_GET['messages'];

}
}
if(!isset($_GET['pages'])){
}
else{
$page = addslashes($_GET['pages']);
if(is_numeric($page) && strlen($_GET['pages']) < 5){
$affichage = $page*$max_messages;
$index = $page+1;
}
else{
$requette = $_GET['pages'];

}
}
echo '
</td></tr><tr><td width="800" align="left">';
$tableau = array();
if(is_dir($dossier)) {
$dir = opendir($dossier) or die('Impossible d\'ouvrir le dossier');
while (false !== ($file = readdir($dir))) {
if ($file != '.' && $file != '..') {
$tableau[] = $file;
}
}
}
$total = count($tableau);
if($total == 0 ){
     echo'AUCUN MESSAGE,PROFFITEZ-EN POUR ECRIRE LE PREMIER !';
     exit();
}
closedir($dir);
if($total < $max_messages){
$unique = 1;
}
$max = $max_messages;
$suivant = $affichage+$max;
$precedent = $affichage-$max;
for ($i=$affichage; $i<$suivant; $i++){
if($i < $total){
include ("$dossier/$tableau[$i]");
}
else{
$fin = 'fin';
break;
}
}
if(!isset($fin)){
$url = $_SERVER['PHP_SELF'].'?messages=';
$pointeur = $suivant;
$suivant='<a class="lien1" href="'.$url.$pointeur.'&amp;nombre='.$max.'"><img class="image" src="../images/suivant.jpg" alt="suivant"></a>';
}
else{
$suivant='';
$suite = $suivant;
}
if($precedent >= 0){
$url2 = $_SERVER['PHP_SELF'].'?messages=';
$pointeur2 = $precedent;
$precedent = '<a class="lien1" href="'.$url2.$pointeur2.'&amp;nombre='.$max.'"><img class="image" src="../images/precedent.jpg" alt="precedent"></a>';
}
else{
$precedent = '';
}
if(!isset($unique)){
$retour = $precedent;
$suite = $suivant;                                         
echo '<tr><td class="tableau" align="center" valign="middle"><p>'.$retour;
}

$pages = ceil($total/$max);
$index2 = $index-4;
if($index2 < 0){
$index2 = 0;
}
$index3 = $index+4;
if($index3 > $pages){
$index3 = $pages;
}
for ($j=$index2; $j<$index3; $j++){
$url3 = $_SERVER['PHP_SELF'].'?pages=';
$pointeur3 = $j;
$numero = $j+1;
$numero1 = ereg_replace(''.$index.'','<b><font size="5">'.$index.'</font></b>',$numero);
$pagination = '<a href="'.$url3.$pointeur3.'&amp;nombre='.$max.'&amp;taille='.$miniatures.'">'.$numero1.'|</a>';
if(!isset($unique)){
echo $pagination;                                                                    //
}
}
echo $suite;
?>

que doi je modifier pour afficher le résultat dans le sens inverse?
merci de votre aide

Hors ligne

 

#2 28-12-2007 09:42:44

dechichulien
Membre
Lieu: strasbourg
Date d'inscription: 29-11-2007
Messages: 67
Site web

Re: Listage D'un Repertoire

Personne pour m'aider?

Hors ligne

 

#3 28-12-2007 10:38:37

lolo3129
Membre
Lieu: Paris
Date d'inscription: 10-05-2005
Messages: 496
Site web

Re: Listage D'un Repertoire

hello,

visiblement, c'est cette partie là du code qui affiche les fichiers

Code:

for ($i=$affichage; $i<$suivant; $i++){
if($i < $total){
include ("$dossier/$tableau[$i]");
}

je te suggère d'afficher les fichiers en partant de la fin de ton tableau :

Code:

for ($i=$affichage; $i<$suivant; $i++){
if($i < $total){
include ("$dossier/$tableau[$total-1 - $i]");
}

mais sinon, une base de données, c'est plus pratique !!

une remarque en passant, je ne suis pas sûr que ça contunue de fonctioner à partir de 10 messages, puisque 1.txt > 11.txt quand on veut trier par nom de fichier. peut être qu'en mettant l'heure dans tes noms de fichier, tu pourrais ensuite les trier comme tu veux avec les fonctions de php

++

Hors ligne

 

#4 28-12-2007 11:40:46

dechichulien
Membre
Lieu: strasbourg
Date d'inscription: 29-11-2007
Messages: 67
Site web

Re: Listage D'un Repertoire

Merci pour ta reponse,
Pour la bdd c vrait, j'y ai pensé mais je m'y connait encors mois que en php!
Je préfère apprendre d'abord ce langage et ensuite je m'interresserai au sql!
Pour le trie, je pence avoire résolue le problème, maintenant le nom des fichier est comme ceci :
"2-jj-mm-aa-pseudo.txt","3-jj-mm-aa-pseudo.txt"etc...
et pour les réponse, c'est "2.2-jj-mm-aa-pseudo.txt","3.3-jj-mm-aa-pseudo.txt"etc...
Je commence a compter a partire de 2!
C'est un peut plus casse tête mais sa fonctionne!
Encors une petit question, si je créer un fichier par message, au bout de 200 ou 1000 ou même 10000 message, sa risque pas de bugger?
C'est peut être mieu de tout mêtre dans un seul fichier texte?

A oui au faite, pour ton code, je l'ai placer comme tu m'a dis et j'ais un message d'erreur :

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ']' in d:\www\************************\teste.php on line 103

La ligne 103 correspond a ceci :

include ("$dossier/$tableau[$total-1 - $i]");

Merci encors pour ton aide

Hors ligne

 

#5 28-12-2007 12:12:35

lolo3129
Membre
Lieu: Paris
Date d'inscription: 10-05-2005
Messages: 496
Site web

Re: Listage D'un Repertoire

je te conseille vraiment de te mettre au SQL, tu vas passer de pas mal de ligne de code à en gros 4... en faisant tous les tris que tu veux. Il y a déjà des tutos très bien faits sur ce site : cf http://www.phportail.net/articles/

effectivement, petite boulette !

Code:

include ("$dossier/$tableau[". ($total-1 - $i) ."]");

vu les formats de nom de tes fichiers, la date n'est pas très utile (il faudrait plutôt aaaa-mm-jj, et en tête de fichier pour le tri par date sur les messages soit effectif, mais à ce moment là, tu perds le tri par thread de message) et tu n'as pas vraiment réglé le pb du nombre de message > 10 (enfin bon, ça tient jusqu'à 19 maintenant wink)

Hors ligne

 

#6 29-12-2007 11:00:56

dechichulien
Membre
Lieu: strasbourg
Date d'inscription: 29-11-2007
Messages: 67
Site web

Re: Listage D'un Repertoire

g essayé comme tu mas dis, et sa ne fonctionné pas, il y avait encors un message d'erreur a cause des "" donc je les modifier comme ceci :
closedir($dir);
$bidule = ($total-1 - $i);
if($total < $max_messages){
$unique = 1;
}
$max = $max_messages;
$suivant = $affichage+$max;
$precedent = $affichage-$max;
for ($i=$affichage; $i<$suivant; $i++){
if($i < $total){
include ("$dossier/$tableau[$bidule]");
}
Le problème maintenant, c'est que sa m'affiche le dernier message fois le nombre de message présent dans le livre!
On va y arrivé mrd!
encors merci de ton aide
Je vais jeter un coup d'oeil sur les bdd mais bon sa voudrait dir que je devrait tout recommencer du début, car mon projet serait de fait un script de site complet qui proposerais divers fonction comme livre d'or, télécargement de musique, visionnage de clip, page partenaire... le tout administrable et la g presque tout finis et sa m'emmerde un peut de tout recommencer!
enfin on verra je vais déjea finire sans bdd et après je le referais peut être!
On aprend toujours, c'est sa qui est cool!
en tout cas tout se que je sait, c'est grace a des forum comme celui-ci, continuez, c'est cool

Hors ligne

 

#7 06-01-2008 13:08:50

dechichulien
Membre
Lieu: strasbourg
Date d'inscription: 29-11-2007
Messages: 67
Site web

Re: Listage D'un Repertoire

Plus rien? snif

Hors ligne

 

#8 07-01-2008 03:16:09

lolo3129
Membre
Lieu: Paris
Date d'inscription: 10-05-2005
Messages: 496
Site web

Re: Listage D'un Repertoire

il faut faire le calcul de $bidule dans ta boucle, sinon, effectivement, c'est toujours le même message qui sera affiché !

Hors ligne

 

#9 12-01-2008 12:17:15

dechichulien
Membre
Lieu: strasbourg
Date d'inscription: 29-11-2007
Messages: 67
Site web

Re: Listage D'un Repertoire

Je vous remerci pour toutes les réponse!
Dzl de ne pas avoire répondu plus tot mais vu que tu ma parlé des bdd, je me sui mis a lire les cours du site du zéro qui sont très interressant, et la c bon g compris, tu avait réson, les bdd c moin de ligne a écrire, et c beaucoup plus simple que les fichier texte!
Je recommence tout mon script en bdd!!
merci et dzl de t'avoir fait perdre ton temps, se sujet a été écrit pour rien vue que je repar sur une nouvelle base!
encors dzl et merci!

Lien pour ce qui veulent progresser comme moi :

http://www.siteduzero.com/

Hors ligne