PHP|Débutant :: Forums

Advertisement

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

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

#1 10-04-2010 10:56:16

breloque
Membre
Inscription : 10-04-2010
Messages : 7

affichage page par page

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.

Hors ligne

#2 10-04-2010 16:32:26

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : affichage page par page

Pourrais-tu poster ton code ?
A priori je pense que tu as modifié la requête de l'exemple mais en supprimant les éléments essentiels de la requête pour le page par page.

Hors ligne

#3 10-04-2010 17:07:38

breloque
Membre
Inscription : 10-04-2010
Messages : 7

Re : affichage page par page

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;
}
?>

Dernière modification par breloque (10-04-2010 18:13:49)

Hors ligne

#4 10-04-2010 21:38:00

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : affichage page par page

Tes requêtes sont bien barbares. Mais je ne me permettrais que d'en faire la remarque car je suis loin d'être maitre et de pouvoir te donner des conseils.
Je préfère passer la main à plus compétent afin de ne pas sortir des absurdités.

Pour ton soucis il faudrait que tu passes la variable $type aux fonctions de gestion de page.
Il y a moyen de les modifier pour que cela ne change en rien leur utilisation :

mafonction($param1, $param2, $param3 = NULL)
{
//traitement
}

//Appel type 1
mafonction($param1, $param2);
//Appel type 2
mafonction($param1, $param2, $param3);

Dans mon premier appel le troisième paramètre prendra la valeur par défaut défini dans la fonction, à savoir NULL.
Dans mon second appel c'est moi même qui le défini.

Tu peux faire de même avec ton paramètre $type.

Hors ligne

#5 10-04-2010 21:51:50

breloque
Membre
Inscription : 10-04-2010
Messages : 7

Re : affichage page par page

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.

Hors ligne

#6 10-04-2010 22:30:57

breloque
Membre
Inscription : 10-04-2010
Messages : 7

Re : affichage page par page

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

Dernière modification par breloque (10-04-2010 22:32:41)

Hors ligne

#7 12-04-2010 06:28:05

breloque
Membre
Inscription : 10-04-2010
Messages : 7

Re : affichage page par page

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.

Hors ligne

Pied de page des forums