Page 1 sur 2

limiter le nombre d'affichage en coupant en plusieurs pages

Posté : 08 févr. 2005, 23:38
par mumulafrite
Bon maintenant j'aimerai pouvoir afficher par exemple 20 extraits par page et avoir un petit lien qui met suivant ou précédent
exemple

http://rikikifunkin.free.fr/extraits/divers.php

Jai vu des aides sur internet mais j'avoue que c'est très mal expliqué (ou alors je comprends pas tout lol)

Posté : 08 févr. 2005, 23:54
par jeff
suffit de faire une boucle for ou while :wink:

Posté : 08 févr. 2005, 23:59
par mumulafrite
Bon je veux pas faire le chiant mais on peut le faire ensemble ?
Voici mon code: (c'est ptete codé à larrache mais bon je debute lol)
		$codecat = 8;  // inserer le code de la catégorie de musique
		$nombase="rikikifunkin";
$id_connex = mysql_connect("sql.free.fr","rikikifunkin","XXXX","rikikifunkin") or die("La connexion à echoué!");
mysql_select_db($nombase,$id_connex);
$id_requete = mysql_query("select * from extrais WHERE cid = $codecat");
$compteur = mysql_query("SELECT * FROM extrais WHERE cid = $codecat",$id_connex);
$compteur1=mysql_num_rows($compteur);
echo '<strong><font color=\"#FFFFFF\">il y à ',$compteur1,' extraits dans divers .</font></strong> ';
if($id_requete)
{

echo '<TABLE WIDTH=100% BORDER=0.9 align="center" CELLPADDING=0 CELLSPACING=0 bordercolor="#000000" bgcolor="#798196">
  <tr background="/images/barre.gif"> 
    <td height="3" colspan="4" background="/images/barre.gif"><div align="left"> <font color="#FFFFFF"><strong>.::Catégorie divers</strong></div></td></tr>'
.'<tr>'
.'<td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Date</div></td>
    <td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Auteur</div></td>
    <td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Titre</div></td>
	<td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Ecouter</div></td>';
While($ligne = mysql_fetch_array ($id_requete)){
echo '<tr>'
.'<td width="15%" height="3" bgcolor="#000000"><div align="center"><font color="#FFFFFF" size="-1">'.$ligne['date'].' </A></td>'
.'<td width="40%" bgcolor="#000000"><div align="center"><font color="#FFFFFF">' .$ligne['auteur'].'</td>'
.'<td width="40%" bgcolor="#000000"><div align="center"><font color="#FFFFFF">' .$ligne['titre'].'</td>'
.'<td width="10%" bgcolor="#000000"><div align="center"><a href="extraits/fichiers/'.$ligne['nomfichier'].'.mp3"><img src="/images/reala.gif" width="15" height="15" border="0"></a></td></tr>';
echo '</tr>';
}
echo '</table>';
mysql_free_result($id_requete);
}
else
{
echo"impossible d'executer la requete";
}

mysql_close();
?>
Merci d'avance

Posté : 09 févr. 2005, 00:01
par jeff
au secour la balise php tu devrai aussi aller voir du coté du css pour le htm :wink:

Posté : 09 févr. 2005, 00:05
par mumulafrite
ouai je sais mais c'est une premiere version qui marche bien, ensuite je vais pofiner tout ca :oops:

Et puis je suis vraiment debutant ...

Posté : 09 févr. 2005, 00:08
par jeff
ouai pour comprendre ton code c'est mieux pour toi et surtout pour nous
edite ton poste et met ton code entre les balise PHP

Posté : 09 févr. 2005, 00:13
par mumulafrite
Voilà, javais pas compris le coup des balises lol dsl

Posté : 09 févr. 2005, 00:16
par jeff
moi je vois un truc comme ca
while($i!=%20)
{
affichage
$i++;
}
mais c'est pas terrible 2 boucles While imbriquer

Posté : 09 févr. 2005, 00:21
par mumulafrite
Jai trouvé ca sur le web
<?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>&nbsp;&nbsp;';
    }
    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.'&nbsp;-&nbsp;';
            }
        }
        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>&nbsp;-&nbsp;";
            }
        }
    }
    
    $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 = '&nbsp;&nbsp;<A HREF="'.$cible.'">>></A>';
    }
    else {
        $lien='';
    }
    $barre .= $lien;

    return $barre;    
}
?>

<html>
<head>
<title>Les livres de la bibliothèque</title>
</head>

</body>
Les différents livres de la bibliothèque :<br /><br />
<?php
// on se connecte à notre base
$base = mysql_connect ('serveur', 'login', 'nom_base');
mysql_select_db ('nom_base', $base);

// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql  = 'SELECT count(*) FROM catalogue';

// 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 'Aucune réponse trouvée';
}
else {
    echo '<table><tr><td><td>Description</td></tr>';
    
    // 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 (!isset($_GET['debut'])) $_GET['debut'] = 0;
    
    $nb_affichage_par_page = 1;
    
    // Préparation de la requête avec le LIMIT
    $sql = 'SELECT titre, description FROM catalogue ORDER BY titre 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 ($data = mysql_fetch_array($req)) {
        // on affiches les résultats dans la <table>
        echo '<tr><td><td>' , stripslashes(htmlentities(trim($data['description']))) , '</td></tr>';
    }

    // on libère l'espace mémoire alloué pour cette requête
    mysql_free_result ($req);
    echo '</table><br />';

    // on affiche enfin notre barre
    echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';
}
// 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 ();
echo '</table><br />';
?>

</body>
</html>
Visible sur http://www.lephpfacile.com/howto/index.php?p=6 mais javoue que c pas phpfacile lol

Posté : 09 févr. 2005, 03:21
par ram2000
Bien trop compliqué pour faire un pauvre affichage de page!

Un truc simple comme ceci fonctionne

function SplitPages($nbrow, $perpage = 20)
{
    //Compte le nombre de pages
    $nbpage = ceil($nbrow/$perpage);
    for($i=0;$i<$nbpage;$i++)
    {
        echo '<a href="page.php?start='.$i*$perpage.'">'.$i+1.'</a>';
    }
}
?>
Dans la fonction le paramètre $perpage est facultatif, 20 par page par défaut si non spécifié.

Et dans ta requête tu ajoute la clause LIMIT 20, $start

Bien sur la fonction est de base, rien n'indique sur quelle page l'utilisateur se trouve, mais c'est pas tellement compliqué à ajouter, un ptit if dans la boucle et voilà ;)

Posté : 09 févr. 2005, 11:30
par mumulafrite
Bon ca marche pas....
jai mis la fonction et rajouté ce que tu mas dit a la requete
$id_requete = mysql_query("select * from extrais WHERE cid = $codecat LIMIT 20, $start ");
Ca me met une erreur de ce type
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in c:\program files\easyphp1-7\www\extraits\divers.php on line 48
à la ligne 48 c'est ca:
        echo '<a href="page.php?start='.$i*$perpage.'">'.$i+1.'</a>';
Voilà si tu peux maider et puis men dire un peu plus pour afficher la page parce que un if je sais ce que c'est mais pas du tout comment le mettre.

Posté : 09 févr. 2005, 11:56
par @rthur
Essaye de remplacer ça:
echo '<a href="page.php?start='.$i*$perpage.'">'.$i+1.'</a>'; 
par:
echo '<a href="page.php?start='.($i*$perpage).'">'.($i+1).'</a>'; 

Posté : 09 févr. 2005, 12:13
par Invité
Non ca marche po, mais ca sameliore un peu
ma requete
$id_requete = mysql_query("select * from extrais WHERE cid = $codecat LIMIT 20, $start ",$id_connex );
Il me met deux messages derreur
Notice: Undefined variable: start in c:\program files\easyphp1-7\www\extraits\divers.php on line 54
et
impossible d'executer la requete
Voilà...

Posté : 09 févr. 2005, 12:58
par @rthur
Il faut utiliser GET/POST et ton message impossible d'exécuter la requète est généré par ton code quelques lignes plus loin je suppose.
Teste ta requète dans phpMyAdmin pour t'assurer qu'elle soit ok.

Voila une modif pour récupérer start correctement et pour afficher l'erreur MySQL si ta requète ne s'exécute pas bien.
$id_requete = mysql_query("select * from extrais WHERE cid = $codecat LIMIT 20, $start ",$id_connex ); 
à remplacer par:
$id_requete = mysql_query("select * from extrais WHERE cid = ".$codecat." LIMIT 20, ".$_GET['start']." ",$id_connex ) or die("Erreur MySQL: ".mysql_error()); 

Posté : 09 févr. 2005, 13:14
par mumulafrite
Oh ca me rend fou!!!
La requete marchait avant que je fasse la modif. Cela maffichait tout ce que je voulais et je voulais limiter un affichage par page...

Bon jai une nouvelle erreur...
je te passe le code e entier pour que tu puisse voir ce qui se trime la dedant:
        <? 
		 function SplitPages($nbrow, $perpage = 20)
{
    //Compte le nombre de pages
    $nbpage = ceil($nbrow/$perpage);
    for($i=0;$i<$nbpage;$i++)
    {
 echo '<a href="page.php?start='.($i*$perpage).'">'.($i+1).'</a>';     }
} 
		$codecat = 8;  // inserer le code de la catégorie de musique
		$nombase="rikikifunkin";
$id_connex = mysql_connect("localhost","root","","rikikifunkin") or die("La connexion à echoué!");
mysql_select_db($nombase,$id_connex);
$id_requete = mysql_query("select * from extrais WHERE cid = ".$codecat." LIMIT 20, ".$_GET['start']." ",$id_connex ) or die("Erreur MySQL: ".mysql_error()); 
$compteur = mysql_query("SELECT * FROM extrais WHERE cid = $codecat",$id_connex);
$compteur1=mysql_num_rows($compteur);
echo '<strong><font color=\"#FFFFFF\">il y à ',$compteur1,' extraits dans divers .</font></strong> ';//affichage du nombre de musique de la catégorie
//affichage de tous les musique de la catégorie
if($id_requete)
{

echo '<TABLE WIDTH=100% BORDER=0.9 align="center" CELLPADDING=0 CELLSPACING=0 bordercolor="#000000" bgcolor="#798196">
  <tr background="/images/barre.gif"> 
    <td height="3" colspan="4" background="/images/barre.gif"><div align="left"> <font color="#FFFFFF"><strong>.::Catégorie divers</strong></div></td></tr>'
.'<tr>'
.'<td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Date</div></td>
    <td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Auteur</div></td>
    <td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Titre</div></td>
	<td height="3" bgcolor="#000000"><div align="center"><font color="#FFFF00">Ecouter</div></td>';
While($ligne = mysql_fetch_array ($id_requete)){
echo '<tr>'
.'<td width="15%" height="3" bgcolor="#000000"><div align="center"><font color="#FFFFFF" size="-1">'.$ligne['date'].' </A></td>'
.'<td width="40%" bgcolor="#000000"><div align="center"><font color="#FFFFFF">' .$ligne['auteur'].'</td>'
.'<td width="40%" bgcolor="#000000"><div align="center"><font color="#FFFFFF">' .$ligne['titre'].'</td>'
.'<td width="10%" bgcolor="#000000"><div align="center"><a href="extraits/fichiers/'.$ligne['nomfichier'].'.mp3"><img src="/images/reala.gif" width="15" height="15" border="0"></a></td></tr>';
echo '</tr>';
}
echo '</table>';
mysql_free_result($id_requete);
}
else
{
echo"impossible d'executer la requete";
}

mysql_close();
?>
Merci d'avance