Petit problème d'affichage page par page

Eléphanteau du PHP | 35 Messages

13 août 2005, 19:54

Bonjour,
Voila je cherche à mettre en place un système de navigation du même type que celui qui se trouve sur ce forum "Aller à la page...

J'a cherché sur différent site des tuto et rien que je suis arrivé à mettre en place
Je vous mets le code afin de vous permettre de comprendre la manière dont j'ai créé mon fichier jusqu'à présent en sachant que l'accès à la BdD est déjà ouvert.

Voila je suis sur, que c'est simplissime, mais moi je bute sur ça je ne l'ai jamais fait :cry:

Merci d'avance
<?
include ("__environnement/_variable.php");

?>
<html>
<head>
<title><? echo "$titre_site"; ?></title>
</head>

<body>
<table width="768" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><? include "top.php"; ?></td>
  </tr>
</table>
  &nbsp;<br>
<table width="768" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="180" align="left" valign="top"><? include "menu.php"; ?></td>
    <td valign="top"><table width="570" border="0" align="center" cellpadding="0" cellspacing="0">
      <tr align="center">
        <td width="570" class="tableau_menu3">Les recettes</td>
        </tr>
      <tr>
        <td>
          <table width="580" border="0" align="center" cellpadding="0" cellspacing="0" class="defaut">
            <tr>
              <td colspan="5">&nbsp;</td>
            </tr>
            <tr>
              <td width="70" align="center" nowrap class="titre_petit_non_souligne">&nbsp;</td>
              <td width="10" class="titre_petit_non_souligne">&nbsp;</td>
              <td width="190" class="titre_non_souligne_centre">&nbsp; Pratique</td>
              <td width="20" class="titre_petit_non_souligne">&nbsp;</td>
              <td width="290" class="titre_non_souligne_centre">&nbsp; &nbsp;Recette</td>
              </tr>
            <tr>
              <td height="1" colspan="5">
                <?php 
$table0="recettes"; 
// s&eacute;lectionne toutes les fiches de la table $table 
$query1 = "SELECT * FROM ". $table0 ." ORDER BY `ref` DESC LIMIT 0 , 15 "; 
$result1 = mysql_query($query1); 
// tant qu'il y a des fiches 
while ($val = mysql_fetch_array($result1)) 
{ 
    ?>
                
                <a href="_detail_recettes.php?idrecettes=<?php echo $val["ref"]; ?>" class="TOrange1"><?php echo $val["titre"]; ?></a> </td>
            </tr>
            <tr>
              <td width="70" align="center" valign="top"><img src="img/recettesimg/<?php echo $val["img1"]; ?>" width="50"></td>
              <td width="10" align="left" valign="top">&nbsp;</td>
              <td width="190" align="left" valign="top"><?php echo $val["sousTitre"]; ?><br><span class="TOrange"><?php echo $val["difficulte"]; ?></span></td>
              <td width="20" align="left" valign="top">&nbsp;</td>
              <td width="290" align="left" valign="top"><?php 
    //Fonction r&eacute;sum&eacute; de texte 
    { 
        $nbmots = '20'; 
        $resword = split(" ", $val["texte"], ($nbmots+1)); 
        for($i=0 ; $i < $nbmots ; $i++) 
        { 
            print "$resword[$i] "; 
        } 
        echo"..."; 
    } 

?></td>
              </tr>
            <tr>
              <td height="1" colspan="5"><hr align="center" width="90%" size="1" class="barre_Orange"></td>
            </tr>
            <tr>
              <td colspan="5" class="menu_pixel"><?php 
} 
mysql_close(); 
?>
              </td>
            </tr>
          </table>
</td>
      </tr>
    </table></td>
  </tr>
</table>
&nbsp;<br>
<table width="768" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</html>
Modifié en dernier par Tomcat92fr le 15 août 2005, 18:42, modifié 1 fois.
Apprendre à connaître, c'est refuser de détester sans savoir pourquoi.

Mammouth du PHP | 19672 Messages

13 août 2005, 19:55

As-tu regardé le tuto de phpdebutant :?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 35 Messages

13 août 2005, 20:01

oui, mais en essayant l'exemple je me retrouve avec des erreurs à n'en plus finir et la je craque ça doit faire 2 heures que je me prends la tete.

Ca à été mon premier reflexe, mon second est de me tourner vers les pros du codage
Apprendre à connaître, c'est refuser de détester sans savoir pourquoi.

Mammouth du PHP | 19672 Messages

13 août 2005, 20:18

Ce n'est pas en envoyant tout le code en vrac que tu résoudras ton problème. Isole les points qui te causent des difficultés, ça ira beaucoup mieux et les réponses t'avanceront beaucoup plus.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 35 Messages

13 août 2005, 21:09

Ok alors voila le code qui me pose problème
<?php 
// NOMBRE DE RESULTATS PAR PAGE

// information pour la connection à le DB
//=========================================
function verifLimite($limite,$total,$nombre) 
{
// je verifie si limite est un nombre.
if(is_numeric($limite)) 
{
// si $limite est entre 0 et $total, $limite est ok
// sinon $limite n'est pas valide.
if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) 
{
// j'assigne 1 à $valide si $limite est entre 0 et $max
$valide = 1;
}    
else 
{
// sinon j'assigne 0 à $valide
$valide = 0;
}
}
else 
{
// si $limite n'est pas numérique j'assigne 0 à $valide
$valide = 0;
}
// je renvois $valide
return $valide;
}
//=========================================
// initialisation des variables 
//=========================================
// on va afficher 5 résultats par page.
// $nombre = $ch_nombre; 
$nombre = 10;  
// si limite n'existe pas on l'initialise à Zéro
if (!$limite) $limite = 0; 
// on cherche le nom de la page.    
$path_parts = pathinfo($PHP_SELF);
$page = $path_parts["basename"];

$table0="recettes"; 
//=========================================    
// connection à la DB
//=========================================
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($bdd) or die ('Erreur :'.mysql_error());
//=========================================    
// requête SQL qui compte le nombre total 
// d'enregistrement dans la table.
//=========================================
$select 	= "SELECT count(ref) FROM recettes";

$result 	= mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$row 		= mysql_fetch_row($result);
$total 		= $row[0];// s&eacute;lectionne toutes les fiches de la table $table 

//=========================================
// vérifier la validité de notre variable 
// $limite;
//=========================================
$verifLimite	= verifLimite($limite,$total,$nombre);
// si la limite passée n'est pas valide on la remet à Zéro
if(!$verifLimite)  
{
    $limite = 0;
}
//=========================================
// requête SQL qui ne prend que le nombre 
// d'enregistrement necessaire à l'affichage.
//=========================================
$select = "select * FROM recettes ORDER BY ref DESC limit ".$limite.','.$nombre;
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
//=========================================    
// si on a récupéré un resultat on l'affiche.
//=========================================
if($total) 
{
while($val = mysql_fetch_array($result)) 
{
{ 
    ?>
                
                <a href="_detail_recettes.php?idrecettes=<?php echo $val["ref"]; ?>" class="TOrange1"><?php echo $val["titre"]; ?></a> </td>
            </tr>
            <tr>
              <td width="70" align="center" valign="top"><img src="img/recettesimg/<?php echo $val["img1"]; ?>" width="50"></td>
              <td width="10" align="left" valign="top">&nbsp;</td>
              <td width="190" align="left" valign="top"><?php echo $val["sousTitre"]; ?><br><span class="TOrange"><?php echo $val["difficulte"]; ?></span></td>
              <td width="20" align="left" valign="top">&nbsp;</td>
              <td width="290" align="left" valign="top">                <?php 
    //Fonction r&eacute;sum&eacute; de texte 
    { 
        $nbmots = '20'; 
        $resword = split(" ", $val["texte"], ($nbmots+1)); 
        for($i=0 ; $i < $nbmots ; $i++) 
        { 
            print "$resword[$i] "; 
        } 
        echo"..."; 
    } 

?>
Apprendre à connaître, c'est refuser de détester sans savoir pourquoi.

Mammouth du PHP | 19672 Messages

13 août 2005, 21:34

Je pense que tu as mal interprété ce que j'ai dit : on ne te refera pas tout ton code: la philosophie générale du forum, c'est de t'aider à trouver toi-même la réponse, certainement pas de recoder le truc à ta place. Si tu ne comprends pas le code que tu écris, tu as un drôle de problème sur les bras.

Pour isoler un problème, il faut être logique en permanence. Si un effet recherché ne se produit pas, c'est qu'il y a une erreur ou encore qu'il manque un élément.

Si tu veux obtenir un système d'affichage page par page, il faut créer une requête qui va récupérer une partie seulement d'une liste d'éléments. Il te faut connaitre le nombre total d'éléments contenus dans ta base pour pouvoir déterminer le nombre de pages. Et il te faut savoir à quelle page tu en es pour pouvoir afficher ou non les liens [Précédent] et/ou [Suivant]. Réfléchis en gardant à l'esprit qu'un ordinateur est d'une stupidité sans nom et qu'il ne fait qu'exécuter les instructions que tu lui donnes. S'il ne te retourne pas le résultat voulu, c'est parce que ces instructions sont incomplètes ou erronées.

Note bien ce que j'ai mis en gras, c'est la base fondamentale d'un système page-par-page.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 35 Messages

13 août 2005, 21:48

J'ai bien compris ce qu'est l'esprit d'un forum, je suis moi même dans plusieurs forums, et j'aide pas mal les personnes en reprenant des portions de code ou en modifiant le code.

Ce qu'il y a de plus désagréable dans un langage c'est quand tu n'arrives pas à comprendre ce que tu fais. Et la je suis perdu, et j'aimerai que l'on me dise où pourquoi et comment.

Je ne suis pas un codeur de PHP je suis plus sur du Flash dans les CSS et dans le graphisme. mais dois je pour autant baissé les bras ??? Je ne le pense pas.

Si tu as une méthode simple, compréhensible et adaptable pour faire ce que je suis en train de faire, je suis preneur. Je comprends rapidement, mais il faut que les choses soient compréhensibles et là je patauge grave. Voilà l'étendue du problème.

Alors de deux choses l'une soit toi ou une autre personne acceptez de me guider dans ce que je fais ou je me débrouillerai, mais dans ce second cas je ne suis pas sûr que je comprendrais ce que je fais, alors que si on m'explique comment faire avec un exemple simple je saurai le refaire.
Apprendre à connaître, c'est refuser de détester sans savoir pourquoi.

Mammouth du PHP | 19672 Messages

13 août 2005, 22:03

Regarde bien ton code, le dernier envoyé : tu as une variable $limite qui te sert de point de départ dans ta requête: comment l'initialiser pour aller à la page suivante par exemple : si tu as ton nombre de pages, tu peux savoir comment calculer ce point: page 2 => $limite x Numéro de page, que ce soit pour la page en cours, la suivante ou la précédente. Donc, par défaut lors de la première ouverture, on est à la page 0 (et non 1 bien entendu) .

Tu as fixé $nombre à 10 pour 10 résultats par pages.

$limite doit donc être Numéro de page x $nombre.

Comment savoir le numéro de page. Par défaut à l'ouverture, c'est 0, mais il faut que tu crées un paramètre récupérable pour indiquer au rechargement que tu es sur la page 1 ou 3 ou 25. Comment faire : dans l'url du bouton [Suivant], ajoute donc un paramètre que tu auras au préalable défini dans une variable qui sera par exemple $suivant = $page + 1 et tu fais la même chose avec $page - 1 pour [Précédent]

Maintenant, au début de ton script, avant de définir $limit à 0, initialise là de manière différente:
$page = isset($_GET['page']) ? $_GET['page'] : 0;
$limite = $nombre * $page;
C'est tout.

Il te reste ensuite à déterminer si tu es sur la première ou la dernière page pour savoir si tu dois faire afficher le bouton [Précédent] ou [Suivant] ou non.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 35 Messages

13 août 2005, 22:17

Ok bon j'arrête je vais me reposer un peu, car la j'ai la tete dans un étau.


Si quelqu'un à un peu de temps pour me donner une solution que je puisse adapter. je lui en serais très reconnaissant.

Merci
Apprendre à connaître, c'est refuser de détester sans savoir pourquoi.

Eléphanteau du PHP | 35 Messages

15 août 2005, 17:37

Bon j'ai modifié toute ma page tant que je n'insère pas mon tableau tout se passe bien mais une fois mon tableau inséré ca bloque ci dessous mon script si quelqu'un a une idée merci d'avance


<?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></title>
</head>

</body>
<br />
<br />
<table width="580" border="0" align="center" cellpadding="0" cellspacing="0" class="defaut">
      <tr>
        <td colspan="5">&nbsp;</td>
      </tr>
      <tr>
        <td width="70" align="center" nowrap class="titre_petit_non_souligne">&nbsp;</td>
        <td width="10" class="titre_petit_non_souligne">&nbsp;</td>
        <td width="190" class="titre_non_souligne_centre">&nbsp; Pratique</td>
        <td width="20" class="titre_petit_non_souligne">&nbsp;</td>
        <td width="290" class="titre_non_souligne_centre">&nbsp; &nbsp;Recette</td>
      </tr>
      <tr>
        <td height="1" colspan="5">
          <?php
// on se connecte à notre base 
$base = mysql_connect ('localhost', 'root', 'admin');
mysql_select_db ('cuisine', $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 recettes';

// 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 {;
 // 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 = 3;
    
    // Préparation de la requête avec le LIMIT
    $sql = 'SELECT * FROM recettes ORDER BY ref DESC 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)) { ?>
      <a href="_detail_recettes.php?idrecettes=<?php echo $val["ref"]; ?>" class="TOrange1"><?php echo $data["titre"]; ?></a> </td>
      </tr>
      <tr>
        <td width="70" align="center" valign="top"><img src="img/recettesimg/<?php echo $data["img1"]; ?>" width="50"></td>
        <td width="10" align="left" valign="top">&nbsp;</td>
        <td width="190" align="left" valign="top"><?php echo $data["sousTitre"]; ?><br>
            <span class="TOrange"><?php echo $data["difficulte"]; ?></span></td>
        <td width="20" align="left" valign="top">&nbsp;</td>
        <td width="290" align="left" valign="top">
          <?php 
    //Fonction r&eacute;sum&eacute; de texte 
    { 
        $nbmots = '20'; 
        $resword = split(" ", $data["texte"], ($nbmots+1)); 
        for($i=0 ; $i < $nbmots ; $i++) 
        { 
            print "$resword[$i] "; 
        } 
        echo"..."; 
    } 

?></td>
      </tr>
      <tr>
        <td height="1" colspan="5"><hr align="center" width="90%" size="1" class="barre_Orange"></td>
      </tr>
      <tr>
        <td colspan="5" class="menu_pixel"><?php 
		
		
		/* on affiches les résultats dans la <table>
        echo '<tr><td><td>' , stripslashes(htmlentities(trim($data['sousTitre']))) , '</td></tr>';
    } */

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

    // 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 (); 
?></td>
      </tr>
    </table>

</body>
</html>
Apprendre à connaître, c'est refuser de détester sans savoir pourquoi.

Mammouth du PHP | 19672 Messages

15 août 2005, 18:02

Tu as un découpage de tableau bizarre avec notament un while qui doit te générer un genre de tableau html des plus exotiques. Voici ton code ré-indenté proprement: regarde l'échelonnement et essayes d'imaginer ce que ça va générer en html à chaque tour: des lignes fermées jamais ouvertes par exemple.

Ensuite, : c'est quoi les accollades aux lignes 201 et 210 (du code que je mets ci-dessous.) Tu mets en commentaire qu'il s'agit d'une fonction, mais tu ne commences pas par function xyz(). De toutes façon, une fonction n'a pas sa place dans une boucle: à cet endroit, on fait appel éventuellement à une fonction extérieure à la boucle en lui envoyant le paramètre récupéré lors du tour de boucle en cours.

Enfin, il manque une accollade fermante que j'ai rajoutée ligne 233.

Repositionne ton html, à mon avis, ce sera déjà un notable progrès et ensuite on verra l'histoire du changement de page.
<?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></title>
</head>
</body>
<br />
<br />
<table width="580" border="0" align="center" cellpadding="0" cellspacing="0" class="defaut">
  <tr>
    <td colspan="5">&nbsp;</td>
  </tr>
  <tr>
    <td width="70" align="center" nowrap class="titre_petit_non_souligne">&nbsp;</td>
    <td width="10" class="titre_petit_non_souligne">&nbsp;</td>
    <td width="190" class="titre_non_souligne_centre">&nbsp; Pratique</td>
    <td width="20" class="titre_petit_non_souligne">&nbsp;</td>
    <td width="290" class="titre_non_souligne_centre">&nbsp; &nbsp;Recette</td>
  </tr>
  <tr>
    <td height="1" colspan="5">
<?php
// on se connecte à notre base
$base = mysql_connect ('localhost', 'root', 'admin');
mysql_select_db ('cuisine', $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 recettes';

// 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
{
    // 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 = 3;

    // Préparation de la requête avec le LIMIT
    $sql = 'SELECT * FROM recettes ORDER BY ref DESC 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))
    {
        ?><a href="_detail_recettes.php?idrecettes=<?php echo $val["ref"]; ?>" class="TOrange1"><?php echo $data["titre"]; ?></a> </td>
  </tr>
  <tr>
    <td width="70" align="center" valign="top"><img src="img/recettesimg/<?php echo $data["img1"]; ?>" width="50"></td>
    <td width="10" align="left" valign="top">&nbsp;</td>
    <td width="190" align="left" valign="top">
      <?php echo $data["sousTitre"]; ?><br>
      <span class="TOrange"><?php echo $data["difficulte"]; ?></span>
    </td>
    <td width="20" align="left" valign="top">&nbsp;</td>
    <td width="290" align="left" valign="top">
        <?php
        {
            //Fonction résumé de texte
            $nbmots = '20';
            $resword = split(" ", $data["texte"], ($nbmots+1));
            for($i=0 ; $i < $nbmots ; $i++)
            {
                print "$resword[$i] ";
            }
            echo"...";
        }
?>    </td>
  </tr>
  <tr>
    <td height="1" colspan="5"><hr align="center" width="90%" size="1" class="barre_Orange"></td>
  </tr>
  <tr>
    <td colspan="5" class="menu_pixel">
<?php
/* on affiche les résultats dans la <table>
echo '<tr><td><td>' , stripslashes(htmlentities(trim($data['sousTitre']))) , '</td></tr>';
} */

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

// 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 ();
    }
?>
    </td>
  </tr>
</table>
</body>
</html>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

15 août 2005, 18:40

Bon alors après différentes petites modifications et remise en forme ça fonctionne il me reste maintenant à tout redécouper et le réintégrer dans la page.
Ce que je mets aux lignes 201 et 210 c'est une fonction pour limiter le texte en taille
Le while a pour fonction de mettre les différents enregistrements et comme je fais des tableaux qui ne sont pas sur une seule ligne je préfère ne pas les incrémenter par du code PHP, mais au contraire intégrer le PHP dans le code.
Merci pour le coup de main

Ci dessous le codage final pour ceux qui le souhaiteront.

Et si tu as une idée pour alléger le code à ta convenance je suis à l'écoute :wink:
<?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></title> 
</head> 
</body> 
<br /> 
<br /> 
<table width="580" border="0" align="center" cellpadding="0" cellspacing="0" class="defaut"> 
  <tr> 
    <td colspan="5">&nbsp;</td> 
  </tr> 
  <tr> 
    <td width="70" align="center" nowrap class="titre_petit_non_souligne">&nbsp;</td> 
    <td width="10" class="titre_petit_non_souligne">&nbsp;</td> 
    <td width="190" class="titre_non_souligne_centre">&nbsp; Pratique</td> 
    <td width="20" class="titre_petit_non_souligne">&nbsp;</td> 
    <td width="290" class="titre_non_souligne_centre">&nbsp; &nbsp;Recette</td> 
  </tr> 
  <tr> 
    <td height="1" colspan="5"> 
<?php 
// on se connecte à notre base 
$base = mysql_connect ('localhost', 'root', 'admin'); 
mysql_select_db ('cuisine', $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 recettes'; 

// 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 
{ 
    // 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 = 5; 

    // Préparation de la requête avec le LIMIT 
    $sql = 'SELECT * FROM recettes ORDER BY ref DESC 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)) 
{ 
 //while ($data = mysql_fetch_array($req)) 
    //{ 
        ?><a href="_detail_recettes.php?idrecettes=<?php echo $val["ref"]; ?>" class="TOrange1"><?php echo $data["titre"]; ?></a> </td> 
  </tr> 
  <tr> 
    <td width="70" align="center" valign="top"><img src="img/recettesimg/<?php echo $data["img1"]; ?>" width="50"></td> 
    <td width="10" align="left" valign="top">&nbsp;</td> 
    <td width="190" align="left" valign="top"> 
      <?php echo $data["sousTitre"]; ?><br> 
      <span class="TOrange"><?php echo $data["difficulte"]; ?></span> 
    </td> 
    <td width="20" align="left" valign="top">&nbsp;</td> 
    <td width="290" align="left" valign="top"> 
        <?php 
        { 
            //Fonction résumé de texte 
            $nbmots = '20'; 
            $resword = split(" ", $data["texte"], ($nbmots+1)); 
            for($i=0 ; $i < $nbmots ; $i++) 
            { 
                print "$resword[$i] "; 
            } 
            echo"..."; 
        } 
?>    </td> 
  </tr> 
  <tr> 
    <td height="1" colspan="5"><hr align="center" width="90%" size="1" class="barre_Orange"></td> 
  </tr> 
  <tr> 
    <td colspan="5" class="menu_pixel"> 
      <?php  
    } 
?> <?php 
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>'; 
        } ?>
    </td> 
  </tr> 
</table> 
<?php 
mysql_close(); 
?>
</body> 
</html>