recherche multicritéres

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : recherche multicritéres

par StarT » 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:

par Truc » 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 ..........

par StarT » 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

par Truc » 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 ?

par StarT » 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: :?

par Cyrano » 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.

par StarT » 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

par Truc » 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)

par StarT » 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

par Truc » 30 oct. 2005, 23:45

Il n'y a pas d'erreur : si tu avais lu attentivement le commentaire précédant cette boucle (...)

Je l'ai di été répété : (...) Lisez-les TOUS

(...) soyez logiques
OUI CHEF :pouce:

ne le prend pas mal a ce point ... :roll:
du moment qu'elle a compris le principe et c'est par les erreurs qu'on apprend :wink:

par Cyrano » 30 oct. 2005, 22:37

Il me semble qu'il y ait une erreur dans le Tuto de base (a confirmer et éventuellement a corriger par Cyrano )

la limite de la boucle n'est pas bonne:
for($i = 0; $i < $page_en_cours; $i++)
devrai etre
for($i = 0; $i < $nb_pages; $i++)
sinon on se retrouve bloqué sur la page 0 puisque $page_en_cours vaut 0 au début et donc la construction de la barre de navigation ne se fait
pas
Il n'y a pas d'erreur : si tu avais lu attentivement le commentaire précédant cette boucle, tu aurais noté qu'on s'occupe des liens AVANT la page en cours s'il y en as. Ensuite, on s'occupe des liens SUIVANT cette même page s'il y en a également.

Je l'ai di été répété : Je ne commente pas mon code pour faire joli, les commentaires expliquent des détails importants. Lisez-les TOUS

J'ajouterais une règle absolument impérative en développement : soyez logiques

par Truc » 30 oct. 2005, 20:14

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:

par StarT » 30 oct. 2005, 19:15

je te remercie infiniment Truc, un seul problème me reste puis je me tais lol !

quand je choisi le numéro de la page à selectionné, ce dernier s'ecrit une deuxieme fois dans la ligne de pagination
je te donne un exemple :

ma requete a renvoyée 312 reponses, donc j'ai 32 pages à visualiser , voila ma ligne de page jusqu'à présent :
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

après je choisi la 2ième page voila ma nouvelle ligne de pages :
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11

que dois-je faire ?!
<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");
$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); 
// reccupération varibles 
 /*$pays_combo=$_POST['pays_combo'];
 $sub_ville=$_POST['sub_ville'];
 $sub_type_achat =$_POST['sub_type_achat'];
 $sub_type_logement =$_POST['sub_type_logement'];
 $meublier=$_POST['meublier'];
 $radionchk=$_POST['radionchk'];
 $allcriteres=isset($_POST['allcriteres']) ? $_POST['allcriteres'] : ""; */
 $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'] * $nb_pages) : 0; 
//$page_affichee = ($page_en_cours + 1); 	
$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%' "; 
    } 

//$debut= (isset($_GET['debut'])) ? addslashes($_GET['debut']) : 0;     
     
$sql.= ' ORDER BY prix ';
// LIMIT '.$debut.','.$nb_affichage_par_page; 

$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>';
//$page_en_cours    = isset($_GET['page']) ? $_GET['page'] : 0; 
//$page_affichee    = ($page_en_cours + 1); 

//$nb_pages = ceil($nb_nouvelles / $nb_nouv_par_page); 

/** 
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 < $nb_pages; $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()); 

    

echo"<table width='600' border='0' cellpadding='0' cellspacing='2' bgcolor='#802A47'>
					  <tr>";
						echo"<td width='50%' align='left' class='txt1'>&nbsp; <font color='#ECC600' size='2'><b>$total Annonce(s)</b></font></td>";
					  echo"<td align=\"right\" class='txt1'>";
			
				echo"<font color='#ECC600' size='2'>Visualisation de: </font>";
				echo"</td>";
			
		echo"</td>";
					  echo"</tr>
					</table>";
                
    $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"]; 
        $description = $row["description"]; 
        $reference = $row["reference"]; 
        $surle = $row["surle"]; 
        $aproximite = $row["aproximite"]; 
        $description= stripslashes($description); 
        $description= nl2br($description); 
        if( $k%2 == 0 ) 
            $color = "#802A47"; 
        else 
            $color = "#9C456A";   
       if( $k%2 == 0 )
						$color = "#802A47";
					else
						$color = "#9C456A";	
						
					
					echo"<table width='600' border='0' cellpadding='0' cellspacing='2' bgcolor='#77111C' ><tr>
					  	<td bgcolor='$color' align='left' width='367' class='txt1'> <font color='#F4F4F4'>&nbsp;<strong><u>Annonce N° $reference</u></strong><br>
						&nbsp;<b>$type_achat à $ville  ";
						if ($surface !=0)
						{
							echo"de surface $surface m2<br>";
						}
						else
						{
							echo"<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"))
						{
							if (!empty($tel))
								{
									echo"<font color='#FFFFFF'><b><u>Tél.</u>$tel</b></font>";
								}	
						}
					//echo"<br>";
						if (($gsm1!="Pas de GSM"))
						{
							if (!empty($gsm1))
								{
									echo"<font color='#FFFFFF'><b><u>GSM 1.</u>$gsm1</b></font>";
								}	
						}
					echo"<br>"; 
					
					echo"</font>
						</td>
						<td bgcolor='$color' width='106' align='center' class='txt1'><font color='#FFFFFF'>&nbsp;<b>Prix :<br>";
										
						if ($prix != 0)
							
							echo"$prix</b></font></td>";
						else
							
							echo"N.D</b></font></td>";
					  echo"</tr>
					</table>";
								
					
echo "<table align=\"center\" width=\"479\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
	echo"<tr>";
		//echo"<td align=\"left\" class='menuc'>";
			
			
		echo"</td>";
	echo"</tr>";
echo"</table>";
                 
                 // affichage de la barre de naviagtion 
                                 
    } 
	echo $barre_nav;
} 
else echo "Recherche vide"; // a toi de mettre une belle phrase   
?>


</body>
</head>
</html>

par Truc » 30 oct. 2005, 18:24

1: la ligne de la pagination figure après chaque enregistrement affiché
Il faut sortir le:
echo $barre_nav;
de la boucle et le mettre juste apres la prochaine }
2: après clique sur une page (2 ou 3 ou 4 ou ....) ça me retourne des erreurs :
Normal puisque tu ne récupère pas les variables GET, celles qui correspondent au clic sur les liens, d'ou les grosses expression que je t'avais montré dans l'exemple :wink:
Remplace ta récupération des variables par tout ceci, j'ai mis quelque explication si tu en as besoin de plus ... demande :D
// reccupération varibles
//récupération de la variable POST (du formulaire) si elle n'existe pas on récupère la variable GET du clic sur le numéro de page
$allcriteres       = isset($_POST['allcriteres'])       ? $_POST['allcriteres']       : (isset($_GET['allcriteres'])       ? $_GET['allcriteres'] : 0);

$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);
pour cette ligne "$url = "./result1.php?page=";" je dois mettre le lien de la page ou j'effectue le traitement ou bien la page ou j'affiche le resultat ?!

euh.. le traitement se fait sur la meme page que l'affichage la ... :-s
tu dois mettre le meme lien que tu as mis dans l'attribut action de ton formulaire.

Voila voila cette fois ci ça dois etre bon :wink:

par StarT » 30 oct. 2005, 17:32

j'ai mis ce code mnt en ce qui concerne la pagination ça marche sauf que j'ai encore 2 problèmes
1: la ligne de la pagination figure après chaque enregistrement affiché
2: après clique sur une page (2 ou 3 ou 4 ou ....) ça me retourne des erreurs :
Notice: Undefined index: pays_combo in e:\easyphp1-8\www\ttt\moteurRech.php on line 10

Notice: Undefined index: sub_ville in e:\easyphp1-8\www\ttt\moteurRech.php on line 11

Notice: Undefined index: sub_type_achat in e:\easyphp1-8\www\ttt\moteurRech.php on line 12

Notice: Undefined index: sub_type_logement in e:\easyphp1-8\www\ttt\moteurRech.php on line 13

Notice: Undefined index: meublier in e:\easyphp1-8\www\ttt\moteurRech.php on line 14

Notice: Undefined index: radionchk in e:\easyphp1-8\www\ttt\moteurRech.php on line 15

Notice: Undefined variable: nb_pages in e:\easyphp1-8\www\ttt\moteurRech.php on line 33
<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");
// reccupération varibles 
 $pays_combo=$_POST['pays_combo'];
 $sub_ville=$_POST['sub_ville'];
 $sub_type_achat =$_POST['sub_type_achat'];
 $sub_type_logement =$_POST['sub_type_logement'];
 $meublier=$_POST['meublier'];
 $radionchk=$_POST['radionchk'];
 $allcriteres=isset($_POST['allcriteres']) ? $_POST['allcriteres'] : ""; 
 $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 = 20; 

$page_en_cours = isset($_GET['page']) ? ($_GET['page'] * $nb_pages) : 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%' "; 
    } 

//$debut= (isset($_GET['debut'])) ? addslashes($_GET['debut']) : 0;     
     
$sql.= ' ORDER BY prix ';
// LIMIT '.$debut.','.$nb_affichage_par_page; 

$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>';
//$page_en_cours    = isset($_GET['page']) ? $_GET['page'] : 0; 
//$page_affichee    = ($page_en_cours + 1); 

//$nb_pages = ceil($nb_nouvelles / $nb_nouv_par_page); 

/** 
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 < $nb_pages; $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()); 

    

echo"<table width='600' border='0' cellpadding='0' cellspacing='2' bgcolor='#802A47'>
					  <tr>";
						echo"<td width='50%' align='left' class='txt1'>&nbsp; <font color='#ECC600' size='2'><b>$total Annonce(s)</b></font></td>";
					  echo"<td align=\"right\" class='txt1'>";
			
				echo"<font color='#ECC600' size='2'>Visualisation de: </font>";
				echo"</td>";
			
		echo"</td>";
					  echo"</tr>
					</table>";
                
    $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"]; 
        $description = $row["description"]; 
        $reference = $row["reference"]; 
        $surle = $row["surle"]; 
        $aproximite = $row["aproximite"]; 
        $description= stripslashes($description); 
        $description= nl2br($description); 
        if( $k%2 == 0 ) 
            $color = "#802A47"; 
        else 
            $color = "#9C456A";   
       if( $k%2 == 0 )
						$color = "#802A47";
					else
						$color = "#9C456A";	
						
					
					echo"<table width='600' border='0' cellpadding='0' cellspacing='2' bgcolor='#77111C' ><tr>
					  	<td bgcolor='$color' align='left' width='367' class='txt1'> <font color='#F4F4F4'>&nbsp;<strong><u>Annonce N° $reference</u></strong><br>
						&nbsp;<b>$type_achat à $ville  ";
						if ($surface !=0)
						{
							echo"de surface $surface m2<br>";
						}
						else
						{
							echo"<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["tel"];
						$gsm1 = $row["gsm1"];
						$gsm2 = $row["gsm2"];
						
						if (($tel!="Pas de téléphone"))
						{
							if (!empty($tel))
								{
									echo"<font color='#FFFFFF'><b><u>Tél.</u>$tel</b></font>";
								}	
						}
					//echo"<br>";
						if (($gsm1!="Pas de GSM"))
						{
							if (!empty($gsm1))
								{
									echo"<font color='#FFFFFF'><b><u>GSM 1.</u>$gsm1</b></font>";
								}	
						}
					echo"<br>"; 
					
					echo"</font>
						</td>
						<td bgcolor='$color' width='106' align='center' class='txt1'><font color='#FFFFFF'>&nbsp;<b>Prix :<br>";
										
						if ($prix != 0)
							
							echo"$prix</b></font></td>";
						else
							
							echo"N.D</b></font></td>";
					  echo"</tr>
					</table>";
								
					
echo "<table align=\"center\" width=\"479\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
	echo"<tr>";
		//echo"<td align=\"left\" class='menuc'>";
			
			
		echo"</td>";
	echo"</tr>";
echo"</table>";
                 
                echo $barre_nav; // affichage de la barre de naviagtion 
                                 
    } 
} 
else echo "Recherche vide"; // a toi de mettre une belle phrase   


?>


</body>
</head>
</html>
pour cette ligne "$url = "./result1.php?page=";" je dois mettre le lien de la page ou j'effectue le traitement ou bien la page ou j'affiche le resultat ?!