Bonjour à tous, voila j'ai fait un petit moteur de recherche, il fonctionne trés bien et m'affiche les bons resultats ....
Je suis en train de faire une pagination pour les resultats mais je bloque sur un truc.

exemple : Je fait un recherche ou il y'a 10 résultat ca devrait m'afficher 4 resultats par page pour 3 page.
Ca m'affiche bien les 4 premiers resultat sur la premiere page mais pour le nombre de page ca m'affiche 1

$perPage = 4;
$cPage = 1 ;
// Requette pour le moteur de recherche
$query = ("SELECT * From annonce 
LEFT JOIN type_annonce ON annonce.type_annonce = type_annonce.id
LEFT JOIN type_annonceur ON annonce.vous_etes = type_annonceur.id   
LEFT JOIN categorie ON annonce.id_categorie = categorie.id  
LEFT JOIN villes ON annonce.id_ville = villes.id
LEFT JOIN departement ON villes.departement = departement.code
LEFT JOIN region ON departement.id_region = region.id_region
WHERE activer_annonce=1 ");
    $f=explode(',', $_GET'area']); 
    foreach($f as $fe) 
        if (isset($_GET'area']) != ""){ $query .= " AND region.id_region LIKE '%$fe%'"; } 
    $q=explode(',', $_GET'dep']); 
    foreach($q as $depart) 
        if (isset($_GET'area']) != ""){ $query .= " AND code LIKE '%$depart%'"; }  
    $s=explode(" ",$t);
    foreach($s as $mot)
        if ($mot != ""){ $query .= " and titre_annonce LIKE '%$mot%' "; }

        if (isset($_GET'a']) != ""){ $query .= " AND vous_etes LIKE '%$a%'"; }

    $z=explode(" ",$c); 
    foreach($z as $all)
        if (isset($_GET'c']) != ""){ $query .= " AND id_categorie LIKE '%$c%'"; }

    $e=explode(" ",$cp); 
    foreach($e as $code_postal)
        if (isset($_GET'cp']) != ""){ $query .= " AND villes.code_postal LIKE '%$code_postal'"; }
        if (isset($_GET'offres']) != ""){ $query .= " AND type_annonce LIKE '$type'"; } 

$query .= " ORDER BY id_annonce DESC LIMIT ".(($cPage-1)/$perPage)." ,$perPage";
$result1 = mysql_query($query, $cnx);
$nb_resultats1 = mysql_num_rows($result1);  

$nbPage = $nb_resultats1/$perPage;
echo $nbPage;

7 réponses


moza2409
Auteur

Personne n'a d'idée ?

Tu fais une erreur dans ton raisonnement, dans ta requête tu demande à afficher les "$perPage" annonces de la page "$cPage".
Il est donc normal que si tu compte le nombre de résultat avec mysql_num_rows(), que tu obtiennes un nombre qui égal à "$perPage", dans ton cas, il y aura toujours un total de 4 annonces, ce qui correspond bien à une seule page.

Pour régler le problème, tu dois créer une deuxième requête pour compter le nombre total d'annonce,
$query_count = "SELECT count(id) AS count FROM annonce WHERE activer_annonce=1";
$nb_resultats1 = mysql_query($query_count, $cnx);

Puis faire,
$nbPage = ceil($nb_resultats1'count']/$perPage);

Tu dois utiliser ceil() (Arrondi au supérieur), car si tu as par exemple 9 annonces au total et 4 annonces par page, alors ($nb_resultats1'count']/$perPage) te retournera 2,25 page, alors que tu veux 3 page (La dernière page n'affichera qu'une annonce).

moza2409
Auteur

Oui mais si je fais une recherche qui dois renvoyer 2 reponses, ca me comptera toutes les annonces de la base de donnée avec $query_count

hum, oui, j'ai été un peut trop vite aussi ^^ Tu dois remettre tes conditions de recherche dans la requête pour compter.

// Données de pagination
$perPage = 4;
$cPage = 1 ;

// Requêtes pour le moteur de recherche
$query = "SELECT * FROM annonce
LEFT JOIN type_annonce ON annonce.type_annonce = type_annonce.id
LEFT JOIN type_annonceur ON annonce.vous_etes = type_annonceur.id  
LEFT JOIN categorie ON annonce.id_categorie = categorie.id 
LEFT JOIN villes ON annonce.id_ville = villes.id
LEFT JOIN departement ON villes.departement = departement.code
LEFT JOIN region ON departement.id_region = region.id_region
WHERE activer_annonce=1";
$query_count = "SELECT count(id) AS count FROM annonce
LEFT JOIN type_annonce ON annonce.type_annonce = type_annonce.id
LEFT JOIN type_annonceur ON annonce.vous_etes = type_annonceur.id  
LEFT JOIN categorie ON annonce.id_categorie = categorie.id 
LEFT JOIN villes ON annonce.id_ville = villes.id
LEFT JOIN departement ON villes.departement = departement.code
LEFT JOIN region ON departement.id_region = region.id_region
WHERE activer_annonce=1";
    // Ajout des conditions de requêtes
    $f=explode(',', $_GET'area']);
    foreach($f as $fe)
        if (isset($_GET'area']) != "") {
            $query .= " AND region.id_region LIKE '%$fe%'";
            $query_count .= " AND region.id_region LIKE '%$fe%'";
        }

    $q=explode(',', $_GET'dep']);
    foreach($q as $depart)
        if (isset($_GET'area']) != "") {
            $query .= " AND code LIKE '%$depart%'";
            $query_count .= " AND code LIKE '%$depart%'";
        } 

    $s=explode(" ",$t);
    foreach($s as $mot)
        if ($mot != "") {
            $query .= " and titre_annonce LIKE '%$mot%' ";
            $query_count .= " and titre_annonce LIKE '%$mot%' ";
        }

        if (isset($_GET'a']) != "") {
            $query .= " AND vous_etes LIKE '%$a%'";
            $query_count .= " AND vous_etes LIKE '%$a%'";
        }

    $z=explode(" ",$c);
    foreach($z as $all)
        if (isset($_GET'c']) != "") {
            $query .= " AND id_categorie LIKE '%$c%'";
            $query_count .= AND id_categorie LIKE '%$c%'";
        }

    $e=explode(" ",$cp);
    foreach($e as $code_postal)
        if (isset($_GET'cp']) != "") {
            $query .= " AND villes.code_postal LIKE '%$code_postal'";
            $query_count .= " AND villes.code_postal LIKE '%$code_postal'";
        }

        if (isset($_GET'offres']) != "") {
            $query .= " AND type_annonce LIKE '$type'";
            $query_count .= " AND type_annonce LIKE '$type'";
        }
// Ajout des conditions de pagination
$query .= " ORDER BY id_annonce DESC LIMIT ".(($cPage-1)/$perPage)." ,$perPage";
// Exécution des requêtes
$result1 = mysql_query($query, $cnx);
$nb_result1 = mysql_query($query_count, $cnx); 
$nbPage = ceil($nb_result1'count']/$perPage);
echo $nbPage;
moza2409
Auteur

toujours pareil, j'ai fait copié collé du code et sur une recherche de 7 resultat ca m'affiche 0 page

moza2409
Auteur

c'est bon je pense que c'est résolu j'ai fait ca:
// Ajout des conditions de pagination
$query .= " ORDER BY id_annonce DESC LIMIT ".(($cPage-1)/$perPage)." ,$perPage";

// Exécution des requêtes
$result1 = mysql_query($query, $cnx);

$nb_result1 = mysql_query($query_count, $cnx);
$nb_total = mysql_fetch_array($nb_result1);
$nb_total = $nb_total'count'];

$nbPage = ceil($nb_total/$perPage);

echo $nbPage;
echo $nb_total;

moza2409
Auteur

merci pour ton aide ;)