Aller au contenu

Moteur de recherche multicritères


Sujets conseillés

Posté

Bonjour à tous,

Si quelqu'un pouvait m'aider il ferait sa BA de la journée..Et ce serait vraiment sympa. Je suis assez novice en PHP et j'utilise dreamweaver qui évidemment ne me permet pas d'écrire ma requête en entier

Sur un site de biens immobiliers (PHP/mysql) j'ai mis en place un petit moteur

de recherche multicritères, type, département et la surface (avec surfmini et surfmaxi)

Si je fais cette requête sans prendre en compte la surface :

SELECT * FROM bien WHERE type = '$type' AND cpb LIKE '$dptmt%'";

avec cpb le code postal du bien immobilier

>>cela fonctionne

Par contre dès que je change ma requête avec les variables surfmini et surfmaxi je n'ai plus de réponse.

if(isset($_POST['surfmini']))

$surfmini=$_POST['surfmini'];

else $surfmini="%";

if(isset($_POST['surfmaxi']))

$surfmaxi=$_POST['surfmaxi'];

else $surfmaxi="%";

SELECT * FROM bien WHERE type = '$type' AND cpb LIKE '$dptmt%' AND surface BETWEEN '$surfmini' AND '$surfmaxi' ";

J'ai le même problème avec la recherche détaillée qui prend en considération d'autres critères tels que la ville, le nombre de pièces, etc...

Posté

Bonjour,

Tu peux faire plus simplement ainsi :

<?
$type = $_POST["type"];
$dptmt = $_POST["dptmt"];
$surfmini = $_POST["surfmini"];
$surfmaxi = $_POST["surfmaxi"];

if($type!=""){
$sqlwhere = $sqlwhere . " and type = '".$type."'";
}

if($dptmt !=""){
$sqlwhere = $sqlwhere . " and dptmt = '".$dptmt ."'";
}

if(!isset($_POST['surfmini']))
$surfmini=0;

if(!isset($_POST['surfmaxi']))
$surfmini=1000000;

$sqlwhere = " and surface BETWEEN '".$surfmini."' AND '".$surfmaxi."'";

//La requete :
$sql = "SELECT * FROM bien WHERE 1=1 " . $sqlwhere
?>

Posté

Merci de ton aide.

mais ça ne marche pas ...Etrange, je dois mal m'y prendre.

Mais sais tu pourquoi mon code ne fonctionne pas ?

Car lorsque je rentre cette requête dans phpmyadmin avec des valeurs $surfmini= 30 et $surfmaxi=120, j'obtiens bien des réponses..

Posté

Je me disais que peut-être je pourrai créer une variable tranche mais la synthaxe je sais pas du tout.

Du genre

$tranche <= $surfmaxi

$tranche >= $surfmini

Et après je fais ma requête

SELECT * FROM bien Where surface = $tranche

>>C'est possible ça ?

Posté

je pense que ça vient du BETWEEN :

BETWEEN is employed to specify integer ranges. Thus instead of age >= 32 AND age <= 40, we can use age BETWEEN 32 and 40.

( http://www.webdevelopersnotes.com/tutorial...nd_between.php3 )

En effet, si tes variables ne sont pas renseignées, tu mets "%" dedans... alors qu'avec BETWEEN, on attend un entier...

en mettant 0 par défaut dans ton mini, et une valeur trop grande pour être valable dans ton max, ça devrait marcher

(comme dans l'exemple de PorteKoi)

Posté

Bonjour à tous.

J'ai trouver la solution, c'est con mais dans ma base le champs surface était en type char, alors qu'il fallait un entier. Du coup la requête ne renvoyait aucune valeur. Ni d'erreur d'ailleurs.

Donc merci à Porte Koi pour son style, j'ai bien aimé le principe de ta requête et merci à Earalia pour m'avoir aiguilloné sur le type...

  • 1 month later...
Posté

Bonjour à tous!

question à Portekoi:

pourquoi effectues tu des tests sur les variables en utilisant une fois la variable "simple" ($type) et après la variable globale ($_POST...)?

Merci!

Frank

Posté

Bonjour,

J'avais repris le code plus haut sans le corriger :)

Mais cela ne change rien sauf pour s'il y a un traitement à la 'réception' de la variable.

Portekoi

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...