PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Re : Forum Général PHP » affichage page par page » 12-04-2010 06:28:05

Bonjour,
J'ai essayé de mettre en fonction les boutons suivant et précédent en les séparant en 2 fonctions pour les avoir sur la même ligne que les numéros de page, mais ça n'a pas fonctionné. J'ai abandonné.
Je n'ai pas trouvé la méthode pour mettre en surbrillance le numéro de la page active.
Si quelqu'un est arrivé à faire ceci, je lui serais très reconnaissant de m'indiquer comment faire.
Cordialement.

#2 Re : Forum Général PHP » affichage page par page » 12-04-2010 06:28:05

J'ai rajouté $type comme paramètre dans la fonction affichePages.
// Fonction qui affiche les liens vers les pages


function affichePages($nombre,$page,$total,$type) {
        $nbpages=ceil($total/$nombre);
        $numeroPages = 1;
        $compteurPages = 1;
        $limite  = 0;
        echo '<table border = "0" ><tr>'."\n";
        while($numeroPages <= $nbpages) {
      echo '<td ><a href = "'.$page.'?limite='.$limite.'&type='.$type.'"><strong>'.$numeroPages.'</strong>'.'  |  '.'</a></td>'."\n";
      $limite = $limite + $nombre;
      $numeroPages = $numeroPages + 1;
      $compteurPages = $compteurPages + 1;
        if($compteurPages == 10) {
          $compteurPages = 1;
          echo '<br>'."\n";
        }
        }
        echo '</tr></table>'."\n";
}

Et ça ne marchait pas encore la variable $type était bien dans le passage d'URL mais arrivée dans le script, elle était NULL.
Ça provenait de la ligne au début du script qui vidait la variable $type :


$type = isset($_POST['type']) ? $_POST['type'] : '';

Ouf depuis 2 jours !!!!
Merci beaucoup

#3 Re : Forum Général PHP » affichage page par page » 12-04-2010 06:28:05

Merci pour la réponse.
Je vais essayer dans ce sens.
Si je comprend bien ce script 'Page par page' ne permet que de traiter une table entière. C'est un peu dommage car il est très fréquent de n'avoir besoin que d'une partie des enregistrements.
Encore merci.
Cordialement.

#4 Re : Forum Général PHP » affichage page par page » 12-04-2010 06:28:05

Merci de répondre,
Voici le code d'un débutant en PHP
la variable $type provient d'un formulaire et n'a plus de valeur après le 1er affichage des 6 annonces immobilières (page1) en passant à page 2.


<?php
session_start();
include("admin/functions.php"); //fonctions

$code = isset($_SESSION['code']) ? $_SESSION['code'] : '';
$type = isset($_POST['type']) ? $_POST['type'] : '';
$vendu = isset($_REQUEST['vendu']) ? $_REQUEST['vendu'] : '';
$date_vente = isset($_REQUEST['date_vente']) ? $_REQUEST['date_vente'] : '';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<?php
// Début de la programmation de l'affichage page par page
$nombre = 6; // PPP nombre d'enregistrements par page
//$no_annonce = 0; // numéro d'ordre de l'annonce
$no_cadre = 1; // numéro du cadre sur les 6 de la page
//$details = array(); // tableau destiné à collecter les references de chaque annonce

// si on arrive sur la page pour la 1ère fois, on met limite à 0
if(!$limite) $limite = 0; // PPP départ compteur où on se trouve
//echo "limite : ".$limite." - ";

//PPP les 2 lignes de code suivantes permettent de récupérer le nom de la page qui sera utilisée dans les liens
$path_parts = pathinfo ($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];

// PPP Compte le nombre d'enregistrements total de la table
$select = "SELECT COUNT(*) FROM immo_annonces WHERE type='$type'";
$result = mysql_query ($select) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];

// PPP Requête SQL qui ne prend que le nombre d'enregistrements vendu à afficher
$select0 = "SELECT COUNT(*) FROM immo_annonces WHERE type='$type' AND (CURRENT_DATE - date_vente) <= 7 ";
$result0 = mysql_query($select0) or die ('Erreur : '.mysql_error() );
$row0 = mysql_fetch_row($result0);
$tot_vendu_aff = $row0[0];

// PPP Requête SQL qui ne prend que le nombre d'enregistrements vendu à ne plus afficher
$select8 = "SELECT COUNT(*) FROM immo_annonces WHERE type='$type' AND vendu = 'oui' ";
$result8 = mysql_query($select8) or die ('Erreur : '.mysql_error() );
$row8 = mysql_fetch_row($result8);
$tot_vendu_npa = $row8[0];

// Requête SQL qui ne prend que les enregistrements à afficher
$select9 = "SELECT * FROM immo_annonces WHERE type='$type' AND vendu='non' OR (CURRENT_DATE - date_vente) < 7 ORDER BY id_annonce DESC LIMIT ".$limite.",".$nombre;
$result9 = mysql_query($select9) or die ('Erreur : '.mysql_error() );

// PPP total des enregistrements à afficher
$total = $total - $tot_vendu_npa + $tot_vendu_aff;

// PPP On vérifie la validité de notre variable $limite
$verifLimite = verifLimite($limite,$total,$nombre);

// PPP Si la limite passée n'est pas valide on la remet à zéro
if(!$verifLimite) $limite = 0;
 
while ($dt = mysql_fetch_row($result9)) { ?>
  <!-- Type -->
  <div id="txt_114" style="position:absolute; left:40px; top:50px; width:157px; height:19px;-moz-box-sizing:border-box;box-sizing:border-box; overflow:hidden;">
    <p class="Corps-P0"><span class="Corps-C3"><?php echo $dt[2]; ?></span></p>
  </div> <?php
} // fin du     while ($dt = mysql_fetch_row($result))

mysql_free_result($result);

// PPP Si le nombre d'enregistrements à afficher est plus grand que $nombre
if($total > $nombre) {
  // Affichage des liens vers les pages
  affichePages($nombre,$page,$total);
  // Affichage des boutons
  displayNextPreviousButtons($limite,$total,$nombre,$page);
}
?>
</body>
</html>

<?php // ces fonctions sont dans un include
// Fonction qui affiche les boutons précédent/Suivant
function displayNextPreviousButtons($limite,$total,$nombre,$page) {
  $limiteSuivante = $limite + $nombre;
  $limitePrecedente = $limite - $nombre;
  echo  '<table><tr>'."\n";
  if($limite != 0) {
    echo  '<td valign="top">'."\n";
    echo  '<form action="'.$page.'" method="post">'."\n";
    echo  '<input type="submit" value="précédents">'."\n";
    echo  '<input type="hidden" value="'.$limitePrecedente.'" name="limite">'."\n";
    echo  '</form>'."\n";
    echo  '</td>'."\n";
  }
  if($limiteSuivante < $total) {
    echo  '<td valign="top">'."\n";
    echo  '<form action="'.$page.'" method="post">'."\n";
    echo  '<input type="submit" value="suivants">'."\n";
    echo  '<input type="hidden" value="'.$limiteSuivante.'" name="limite">'."\n";
    echo  '</form>'."\n";
    echo  '</td>'."\n";
  }
  echo  '</tr></table>'."\n";
}

// Fonction qui affiche les liens vers les pages
function affichePages($nombre,$page,$total) {
        $nbpages=ceil($total/$nombre);
        $numeroPages = 1;
        $compteurPages = 1;
        $limite  = 0;
        echo '<table border = "0" ><tr>'."\n";
        while($numeroPages <= $nbpages) {
      //echo "numeroPages : ".$numeroPages." - ";
      //echo "compteurPages : ".$compteurPages." - ";
      echo '<td ><a href = "'.$page.'?limite='.$limite.'"><strong>'.$numeroPages.'</strong>'.'  |  '.'</a></td>'."\n";
      $limite = $limite + $nombre;
      $numeroPages = $numeroPages + 1;
      $compteurPages = $compteurPages + 1;
        if($compteurPages == 10) {
          $compteurPages = 1;
          echo '<br>'."\n";
        }
        }
        echo '</tr></table>'."\n";
}

// Fonction qui vérifie la validité de $limite
// récupération de $limite
    if(isset($_GET['limite']))
        $limite=$_GET['limite'];
    else   $limite=0;
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;
}
?>

#5 Forum Général PHP » affichage page par page » 12-04-2010 06:28:05

breloque
Réponses : 6

Bonjour,
J'utilise le script pour afficher une base d'annonces (6 par pages) et tout va bien.
Par contre quand on veut faire une sélection à l'intérieur de la base par requête SQL, cela ne va plus, la 1ère page est  bien affichée , mais les suivantes ne s'affichent plus, car la variable qui sert à faire la sélection a perdue sa valeur. J'ai pensé quand créant une variable session et en lui donnant la valeur de la variable de sélection, je pourrais afficher la page suivante. Ok j'ai eu la page suivante, mais quand j'ai voulu revenir à la précédente, je n'ai rien eu. Je suppose que sur un nombre important de pages et que l'on choisisse une page n'importe où,, ça ne fonctionnera pas.

Si quelqu'un a une idée, je suis preneur, car je galère.

Cordialement.

Pied de page des forums

Propulsé par FluxBB