recherche multicritéres

Eléphant du PHP | 151 Messages

30 oct. 2005, 23:56

j'avais survolé le tuto :x
donc il n'y avait pas d'erreur ... l'affichage est coupé en 2 pour ne pas mettre de lien sur la page en cours.. il faut donc remettre la boucle d'origine
for($i = 0; $i < $nb_pages; $i++)
a remplacer par:
for($i = 0; $i < $page_en_cours; $i++)
sinon on iste 2 fois les pages :wink:
je viens de changer cette ligne mais j'ai toujours le même problème :

avant choix de la 2ieme page j'ai ceci :
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46

après choix de la 2ième page j'ai ceci :
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15

NB: au total j'ai 459 annoces à afficher comme résultat de ma requête

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

31 oct. 2005, 00:43

tu as mis tellement de choses en commentaire comme des récupération de variables, $_GET['page'] par exemple, regarde de ce coté.

sinon affiche la requete génèrée avec la clause LIMIT:
echo $sql;

et verifi si la construction reste identique a celle de la page 1 (chargement)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 151 Messages

31 oct. 2005, 00:57

le echo $sql; m'affiche 2 fois ma requête ! :roll:
select * from achat where location='0' AND pays like '%Maroc%' AND ville like '%CASABLANCA%' AND type_achat like '%MAISON%' ORDER BY prix select * from achat where location='0' AND pays like '%Maroc%' AND ville like '%CASABLANCA%' AND type_achat like '%MAISON%' ORDER BY prix LIMIT 0, 10

Mammouth du PHP | 19672 Messages

31 oct. 2005, 01:21

Bon, un peu de ménage dans le code, ça fait pas de tort : tu gagnerais du temps en codant proprement, on repère beaucoup plus rapidement des erreurs :
<HTML>
<head>
<title>Recherche Achat</title>
<body bgcolor=white text=black link=blue vlink=blue alink=blue>
<?php
include("gestion/config.php");
include ("fonctions.php");
// récupération variables
$pays_combo        = isset($_POST['pays_combo'])        ? $_POST['pays_combo']        : (isset($_GET['pays_combo'])        ? $_GET['pays_combo'] : 0);
$sub_ville         = isset($_POST['sub_ville'])         ? $_POST['sub_ville']         : (isset($_GET['sub_ville'])         ? $_GET['sub_ville'] : 0);
$sub_type_achat    = isset($_POST['sub_type_achat'])    ? $_POST['sub_type_achat']    : (isset($_GET['sub_type_achat'])    ? $_GET['sub_type_achat'] : 0);
$sub_type_logement = isset($_POST['sub_type_logement']) ? $_POST['sub_type_logement'] : (isset($_GET['sub_type_logement']) ? $_GET['sub_type_logement'] : 0);
$meublier          = isset($_POST['meublier'])          ? $_POST['meublier']          : (isset($_GET['meublier'])          ? $_GET['meublier'] : 0);
$radionchk         = isset($_POST['radionchk'])         ? $_POST['radionchk']         : (isset($_GET['radionchk'])         ? $_GET['radionchk'] : 0);

$finrequete = "";
$k = 0;
$nb_nouv_par_page = 1;
//nb_nouv_par_page = 1;
/* Nombre de nouvelles qui seront affichées sur chaque page */
//$url = "./pageparpage.php?page=";

/* On détermine quelle est la page qui est actuellement affichée */
$url = "./result1.php?page=";


$sql="select * from achat where location='".$radionchk."'";
$result = mysql_query($sql);
$nb_par_page = 10;

$page_en_cours    = isset($_GET['page']) ? $_GET['page'] : 0;
$page_affichee    = ($page_en_cours + 1);
//$operateur= ($allcriteres == "oui") ? " AND " : " OR ";
$operateur= " AND ";

if ($pays_combo != 0)
{
    $sql.= $operateur." pays like '%". $pays_combo ."%' ";
}
if ($sub_ville != 0)
{
    $sql.= $operateur." ville like '%". $sub_ville ."%' ";
}
if ($sub_type_achat != 0)
{
    $sql.= $operateur." type_achat like '%". $sub_type_achat ."%' ";
}
if ($sub_type_logement != 0)
{
    $sql.= $operateur." type_logement like '%". $sub_type_logement ."%' ";
}
if ($meublier != 0)
{
    $sql.= $operateur." meuble like '%". $meublier ."%' ";
}


$sql.= ' ORDER BY prix ';

$res = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$total = mysql_num_rows($res);
$nb_pages = ceil($total / $nb_par_page);
echo $total;
//echo '.<p>'.$sql.'</p>';

/**
Nous disposons maintenant de suffisament d'éléments pour créer notre barre de navigation.
Première chose à vérifier : avons-nous plusieurs pages, et au moins une ?
*/
if($nb_pages > 0)
{
    /* On définit une variable qui contiendra les données de navigation */
    $barre_nav = "";
    /* Nous avons au moins une page : avons nous besoin d'une barre de navigation ? */
    if($nb_pages > 1)
    {
        /**
        Nous avons plusieurs pages: nous allons afficher successivement les liens vers
        les pages précédentes s'il y en a, la page en cours et les liens vers les pages
        suivantes. Nous aurons une barre sous la forme : 1 | 2 | 3 etc.. en liens clicables
        sauf pour la page en cours dont nous mettrons le chiffre en gras
         */
        if($page_en_cours > 0)
        {
            for($i = 0; $i < $page_en_cours; $i++)
            {
                $p = $i + 1;
                $lien = $url . $i .'&pays_combo='. $pays_combo
                                  .'&sub_ville='. $sub_ville
                                  .'&sub_type_achat='. $sub_type_achat
                                  .'&sub_type_logement='. $sub_type_logement
                                  .'&meublier='. $meublier
                                  .'&radionchk='. $radionchk;

                $barre_nav .= '<a href="'. $lien .'" title="page '. $p .'">'. $p .'</a> | ';
            }
        }
        /**
        On affiche la page en cours : notez le (+ 1) : pour les calculs, nous partons d'une
        page 0 mais pour l'internaute, il est préférable de commencer à la page 1, donc on incrémente
         */
        $barre_nav .= "<strong>". $page_affichee ."</strong>";
        /* Enfin on affiche (s'il y a lieu) les liens vers les pages suivantes */
        if($page_affichee < $nb_pages)
        {
            /* Il reste encore d'autres pages à afficher */
            $nb_suivantes = ($nb_pages - $page_affichee);
            for($j = $page_affichee; $j < $nb_pages; $j++)
            {
                $p = $j + 1;
                $lien = $url . $j.'&pays_combo='. $pays_combo
                                 .'&sub_ville='. $sub_ville
                                 .'&sub_type_achat='. $sub_type_achat
                                 .'&sub_type_logement='. $sub_type_logement
                                 .'&meublier='. $meublier
                                 .'&radionchk='. $radionchk;
                $barre_nav .= " | <a href=\"". $lien . $j ."\" title=\"page ". $p ."\">". $p ."</a>";
            }
        }

        /* On peut définir en plus la situation dans une autre variable à afficher ailleurs */
        $page_affichee = "Page ". $page_affichee ." sur un total de ". $nb_pages ." pages.";
    }
    else
    {
        /* Nous n'avons qu'une seule page, on peut se contenter d'afficher juste page 1/1 */
        $barre_nav .= "page 1/1";
    }
    /**
    On peut maintenant afficher notre page. On va commencer par récupérer les informations
    On doit définir à partir de quelle nouvelle on doit récupérer les données dans la clause LIMIT.
     */

    $debut = $page_en_cours * $nb_nouv_par_page;
    $sql .= " LIMIT ". $debut .", ". $nb_par_page.";";
    $res = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
?>
<table width='600' border='0' cellpadding='0' cellspacing='2' bgcolor='#802A47'>
  <tr>
    <td width='50%' align='left' class='txt1'>&nbsp; <font color='#ECC600' size='2'><b><?php echo($total); ?> Annonce(s)</b></font></td>
    <td align=\"right\" class='txt1'><font color='#ECC600' size='2'>Visualisation de: </font></td>
  </tr>
</table>
<?php
    $k=0;
    while ($row = mysql_fetch_array($res))
    {
        $k++ ;
        $prix              = $row["prix"];
        $sub_type_achat    = $row["type_achat"];
        $sub_type_logement = $row["type_logement"];
        $meuble            = $row["meuble"];
        $ville             = $row["ville"];
        $location          = $row["location"];
        $pays              = $row["pays"];
        $surface           = $row["surface"];
        $reference         = $row["reference"];
        $surle             = $row["surle"];
        $aproximite        = $row["aproximite"];
        $description       = $row["description"];
        $description       = stripslashes($description);
        $description       = nl2br($description);
        
        $color = (($k % 2) == 0 ) ? "#802A47" : "#9C456A";
?>
<table width='600' border='0' cellpadding='0' cellspacing='2' bgcolor='#77111C' >
  <tr>
    <td bgcolor='<?php echo($color); ?>' align='left' width='367' class='txt1'>
      <font color='#F4F4F4'>&nbsp;<strong><u>Annonce N° <?php echo($reference); ?></u></strong><br>
      &nbsp;<b><?php echo($type_achat); ?> à <?php echo($ville); ?>
<?php
        echo(($surface != 0) ? "de surface ". $surface ." m2<br>" : "<br>");
        echo"&nbsp;". $description ." </b><br>";
        $sql_select2 = "select * from client where reference = '". $reference ."' ";
        $result2 = mysql_query($sql_select2);
        $row = mysql_fetch_array($result2);

        $reference = $row["reference"];
        $tel       = $row["teldomicile"];
        $gsm1      = $row["gsm1"];
        $gsm2      = $row["gsm2"];

        if (($tel != "Pas de téléphone") && (!empty($tel)))
        {
            echo"<font color='#FFFFFF'><b><u>Tél.</u>". $tel ."</b></font>";
        }
        //echo"<br>";
        if (($gsm1 != "Pas de GSM") && (!empty($gsm1)))
        {
            echo"<font color='#FFFFFF'><b><u>GSM 1.</u>". $gsm1 ."</b></font>";
        }
?>
      <br></font>
    </td>
    <td bgcolor='<?php echo($color); ?>' width='106' align='center' class='txt1'><font color='#FFFFFF'>&nbsp;<b>Prix :<br>
<?php echo(($prix != 0) ? $prix : "N.D."); ?>      </b></font></td>
  </tr>
</table>
<table align="center" width="479" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td align="left" class="menuc">&nbsp;</td>
  </tr>
</table>
<?php
        // affichage de la barre de naviagtion
    }
    echo $barre_nav;
}
else
{
    echo "Recherche vide"; // a toi de mettre une belle phrase
}
?>
</body>
</head>
</html>
Essaye déjà ça et raconte nous un peu ce qui se passe.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 151 Messages

31 oct. 2005, 01:48

j'ai essayé ton code cyrano et j'ai toujours le même problème, ça commence vraiment à me gonfler

459 annonces trouvées
mes pages : 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46

après choix du deuxieme page
mes pages deviennent :1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15

:cry: :?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

31 oct. 2005, 01:53

et que te retourne la requete ?
echo '<p>'.$sql.'</p>';
toujours apres l'ajout de LIMIT, sur la page 1 et sur la page 2 ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 151 Messages

31 oct. 2005, 02:05

et que te retourne la requete ?
echo '<p>'.$sql.'</p>';
toujours apres l'ajout de LIMIT, sur la page 1 et sur la page 2 ?
Quand je suis sur la premiere page ça me donne àa :
select * from achat where location='0' AND ville like '%CASABLANCA%' ORDER BY prix LIMIT 0, 10
et quand je suis sur la 2ième ça me donne ça :
select * from achat where location='01' AND ville like '%CASABLANCA%' ORDER BY prix LIMIT 1, 10

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

31 oct. 2005, 02:43

bon voila j'ai enfin trouvé le binz ... comme je le disait tu as beaucoup de variables qui ne serve pas (nottamment des variables en commentaire)

Tu as donc 2 variables qui correspondent au nombre d'annonces a afficher par page => $nb_nouv_par_page et $nb_par_page

supprime $nb_nouv_par_page et remplace ce code
$debut = $page_en_cours * $nb_nouv_par_page;
par
$debut = $page_en_cours * $nb_par_page;

Ensuite tu as un lien foireux :?
au niveau de la 2eme boucle
$barre_nav .= " | <a href=\"". $lien . $j ."\" title=\"page ". $p ."\">". $p ."</a>"; 
a remplacer par
$barre_nav .= " | <a href=\"". $lien."\" title=\"page ". $p ."\">". $p ."</a>"; 
tu rajoutait la variable de page a la valeur de $radionchk.

Voila en espérant ..........

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 151 Messages

31 oct. 2005, 03:07

Merci infiniment Truc, ça marche :D je te remercie encore une fois pour tout l'effort que t'as fait avec moi !
Bonne soirée et Merci encore une fois !! :wink: