PHP|Débutant :: Forums

Advertisement

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

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

#1 15-06-2010 14:45:31

frlobe
Membre
Lieu : Nouméa - 98
Inscription : 03-05-2010
Messages : 14

Commande SELECT avec LIMIT: pas le bon nombre de résultats

Bonjour
je cherche à limiter l'affichage par page du résultat de ma requête. Vu que çe ne fonctionnait pas avec des variables, je suis revenu à la méthode de base.
Mon code est le suivant:

$req = $bdd->prepare('SELECT * FROM jos_annonces LIMIT 0, 3');
$req->execute(array());
$nb_resultats = $req->rowCount();
print $nb_resultats

Le problème est $nb_resultat=3 alors que ma BdD contient 6 lignes. Je ne vois pas où est le souci ...
Merci d'avance de vos lumières.

Hors ligne

#2 15-06-2010 14:55:51

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Commande SELECT avec LIMIT: pas le bon nombre de résultats

moi, je vois bien ou est le sousci wink
si tu lui demande dans la requete de te retourner 3 enreg dans le tuple   avec le mot cle LIMIT 0,3

c'est normal que req->rowCount() soir egal a 3 wink

enleve l option limit et plus de probleme wink


mieu encore :

SELECT COUNT(*) as nb FROM tatable règlerai encore mieux ton problème, et ce, de façon beaucoup plus propre wink

a++

Hors ligne

#3 15-06-2010 15:10:18

frlobe
Membre
Lieu : Nouméa - 98
Inscription : 03-05-2010
Messages : 14

Re : Commande SELECT avec LIMIT: pas le bon nombre de résultats

oups, OK je vois mon erreur.
Je dois donc avoir un problème dans mon code global alors car je n'arrive pas à afficher mes résultats sur plusieurs pages.

Mon code réel est le suivant:

$req = $bdd->prepare('SELECT * FROM jos_annonces LIMIT '.$_GET['debut'].','.$nb_affichage_par_page);
$req->execute(array());
$nb_resultats = $req->rowCount();

nb_affichage_par_page est initialisé à 3 --> sensé me limiter le nombre d'affichage par page à 3 lignes
$_GET['debut'] --> c'est la valeur du premier enrégistrement de chaque page (pour la page 1 => 0; pour la page 2 => 3; etc ...)

Le $nb_resultat est toujours 3, ce qui semble logique vu ton message. Comment calculer le nombre résultat de ma commande SELECT ET gérer l'affichage à 3 lignes par page ? C'est ça que je je n'arrive pas à faire

PS: je te fais grace du code de ma fonction fonction de calcul pour la page à afficher ...

Hors ligne

#4 15-06-2010 15:15:12

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Commande SELECT avec LIMIT: pas le bon nombre de résultats

>>Comment calculer le nombre résultat de ma commande SELECT
relis bien mon post, tu as la réponse wink

a++

Hors ligne

#5 15-06-2010 22:31:55

frlobe
Membre
Lieu : Nouméa - 98
Inscription : 03-05-2010
Messages : 14

Re : Commande SELECT avec LIMIT: pas le bon nombre de résultats

oui, j'ai la réponse pour calculer le nb de ligne (ça ne fonctionne pas encore mais ça ve venir hmm) mais pour l'affichage.
Je te mets mon code à tout hasard finalement big_smile

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 calcule le numéro de la page active
  $page_active = floor(($debut/$nb_affichage_par_page)+1);
  // on calcule le nombre de pages total que va prendre notre affichage
  $nb_pages_total = ceil($nb_total/$nb_affichage_par_page);

  // on calcule 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>  ';
  }
  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.' - ';
      }
    }
    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> - ";
      }
    }
  }

  $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 = '  <A HREF="'.$cible.'">>></A>';
  }
  else
  {
    $lien='';
  }
  $barre .= $lien;

  return $barre;
}

Hors ligne

Pied de page des forums