moteur de recherche: comment??

Eléphant du PHP | 319 Messages

08 janv. 2008, 19:59

hello,

un copain m'a demande de lui filer un coup de main pour son agence immo. il a pas bcp d'apparts mais il est super pro. il souhaite mettre les plans a disposition des personnes interessees via son site (ca il sait faire) par contre il m'a demande de lui filer un coup de main pour un moteur de recherche interne. (un moteur multicriteres: priz min/max, vente/location etcetc)

je n'ai jamais fait ca...
qq un aurait une idee de comment je peux faire un moteur de recherche de ce style svp??
il y a de bons tutos sur comment faire cela?

perso j'en ai trouve qq uns mais pour tout dire je les trouve assez confus... :(

merci!!
niveau: pas terrible en php mais je me soigne...

Mammouth du PHP | 1339 Messages

08 janv. 2008, 20:26

Est-ce que ces annonces sont dans une base de données MySQL ?
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 janv. 2008, 20:44

Bah tu sais, une recherche multicritere, c'est pas plus compliquée qu'un SELECT avec plusieurs clauses dans le WHERE. Tu veux les maisons de 5 pieces ou plus, inférieure à x euros, etc. suffit de construire ta requête de la même manière : un SELECT qui ramene les champ dont tu as besoin et un WHERE dans lequel tu concatènes les criteres spécifiés et leurs valeurs :)
$sql = " SELECT .... FROM ... WHERE ... ";

if (isSet($nbPiecesSouhaité))
  $sql.= " AND nb_pieces >= ". $nbPiecesSouhaité ;
if (isSet($prixSouhaité))
  $sql.= " AND prix <= " . $prixSouhaité;
...
Après suffit de jouer un peu sur le fait de mettre un WHERE ou un AND, voire des OR, mais sur le principe, c'est pas plus compliqué :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 319 Messages

09 janv. 2008, 03:30

salut a vous 2 :)

Ryle dis moi, je sens que je vais apprendre encore un truc grace a toi: la syntaxe que tu donnes permets de "rallonger" la requete sql si certains parametres sont donnes par l'utilisateur. c'est bien ca??

il faut que je cherche quoi sur mysql.com ou php.net pour avoir la syntaxe de ce type de code s'il the plait?? (je ne savais pas que l'on pouvait faire ca!)

j'ai comme l'impression que ca va etre super pratique!!!
merci

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 4039 Messages

09 janv. 2008, 10:40

Oh mais la syntaxe SQL te permets bien plus qu'un simple SELECT * FROM table.. Tu peux joindre des tableaux, en recréer, faire des recherches fulltext, faire des unions, des sous-requêtes, j'en passe et des meilleures.. mais j'ai pas de tutos francophones sous la main :?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 janv. 2008, 11:14

Ryle dis moi, je sens que je vais apprendre encore un truc grace a toi: la syntaxe que tu donnes permets de "rallonger" la requete sql si certains parametres sont donnes par l'utilisateur. c'est bien ca??
En gros oui :)

En fait, une requête SQL, c'est rien de plus qu'une chaine de caractère. Bon, il y a une syntaxe, une structure et des mots clés à respecter, mais ça n'est rien d'autre qu'une chaine comme "Hello World" :) Et comme toute chaine de caractère, tu peux la construire dynamiquement en php en concaténant des chaines, des variables, etc. :
// en dur
$sql = " SELECT mon_champ FROM ma_table WHERE id = 10";
// en dynamique
$sql = " SELECT mon_champ FROM ma_table WHERE id = " . $idRecherché;
// en concatenant des chaines
$sql = "SELECT mon_champ ";
$sql.= " FROM ma_table ";
$sql.= " WHERE id =  " . $idRecherché;
A partir de là, rien n'est plus simple que de mettre des conditions et d'ajouter ou non certains éléments dans ta chaine avant de la soumettre à ton gestionnaire de données pour qu'il l'exécute :)

Je ne pense pas que tu puisses trouver de tuto sur ça, mais tu devrais très bien pouvoir t'en sortir sans.... Commence par définir quels critères de recherche tu va proposer par rapport aux infos que tu as. Ensuite écrit la requête la plus complète possible en intégrant chacun des critères retenus et en utilisant les valeurs saisies par l'utilisateur. Et enfin décompose la clause WHERE de ta requête comme ci-dessus et ajoute un test pour savoir si l'utilisateur a spécifié une valeur pour ce critère :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 319 Messages

09 janv. 2008, 18:43

super! merci :P

(ps : je suis preneur de tutos en anglais aussi :) )

bien pratique de pouvoir decomposer comme cela la requete!
jusqu'a present tout ce que j'avais fait c'etait des requetes sur 2 tables (ou plus) et les joindre...

il faut dire que je ne suis pas non plus super a l'aise avec les points, les guillements et les 2x quotes (").

c'est un peu brouillon mon code... :(
niveau: pas terrible en php mais je me soigne...

Petit nouveau ! | 6 Messages

27 janv. 2008, 05:28

Bonsoir tout le monde, je suis nouveau sur le forum et je le parcours depuis cette après midi pour m'aider et ça m'a été très utile :D

Cependant j'ai un nouveau problème dans mon code et j'arrive pas à le régler.

Je bosse sur un moteur de recherche pour un projet. Donc mon problème :

Lorsque je remplis le champ id tout va bien il m'affiche ma réponse, par contre, si je remplis seulement un des autres champs j'ai une erreur : "Erreur de syntaxe près de 'login='Welden'' à la ligne 1"

Voici le code :
	<?php 
		
		echo $_SESSION['message']; 
	
		$resultat="SELECT * FROM table1 WHERE";
		if(!empty($_GET['l_id']))
		{
			$resultat.=" id='".$_GET['l_id']."'";
		}
		if(!empty($_GET['l_login']))
		{
			$resultat.=" AND login='".$_GET['l_login']."'";
		}
		if(!empty($_GET['l_pays']))
		{
			$resultat.=" AND pays='".$_GET['l_pays']."'";
		}
		if(!empty($_GET['l_region']))
		{
			$resultat.=" AND region='".$_GET['l_region']."'";
		}
		if(!empty($_GET['l_ville']))
		{
			$resultat.=" AND ville='".$_GET['l_ville']."'";
		}
		
		$reponse = mysql_query($resultat)or die (mysql_error());
				
				
		while ($donnees = mysql_fetch_array($reponse))
		
		{
		
		?>

Je pense que c'est une erreur de syntaxe au niveau des AND mais je vois pas comment l'écrire sinon :?

Voilà, merci d'avance pour vos réponses

Bonne soirée/nuit :P

ViPHP
ViPHP | 4039 Messages

27 janv. 2008, 11:40

Salut Welden.

Déjà, avant que tu ne te fasses modérer, récuperer un ancien post pour poster un problème, c'est pas conseillé. On s'y perdrait en sujets qui dériveraient, et on aime les garder court et concis. Même si un problême en cause un autre, il faut ouvrir un nouveau sujet. Donc, il faut surtout pas hésiter à en ouvrir un nouveau pour exposer ton problême (en gros, a chaque prob son propre post).

Pour ce qui est de ton code:
$resultat="SELECT * FROM table1 WHERE";
if(!empty($_GET['l_id']))
{
$resultat.=" id='".$_GET['l_id']."'";
}
if(!empty($_GET['l_login']))
{
$resultat.=" AND login='".$_GET['l_login']."'";
}
Et si l_id n'est pas défini ? la requête devient
SELECT * FROM table1 WHERE AND login=(etc..)
et ça, c'est une erreur..

Paf comme ça je dirais de simplement pousser ( array_push() ) tes conditions dans un tableau, et de l'imploser ( implode() ) en utilisant " AND " pour concaténer. ça évite les soucis :wink:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Petit nouveau ! | 6 Messages

27 janv. 2008, 14:28

Bonjour

Désolé, d'avoir fait remonter le post, je pensé que comme mon problème venait de là il vallait mieux répondre ici plutôt qu'en créer un donc promis je le ferai plus :oops:

Oui c'est ce que je pensais pour le l_id mais je savais pas très bien comment le résoudre, je vais essayer de voir ces deux fonctions que je ne connais pas (merci le manuel ^^).

Voilà, merci, et désolé du dérangement, si j'ai de nouveaux problèmes j'ouvrirai un nouveau topic :wink:

[edit] Voilà ça marche impec, j'ai juste pas utilisé array_push() mais $array[]. J'arrête de faire des bétises sur ce post merci encore ^^ [/edit]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

27 janv. 2008, 16:15

Je ne divise pas le sujet mais je le mets au moins en Résolu puisqu'une réponse y a été apportée.

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

Eléphanteau du PHP | 19 Messages

12 déc. 2008, 15:09

Bonjour,

j'ai essayer le code proposé pour mon formulaire de recherche comme suit :

?php
mysql_connect("localhost", "root", "");
mysql_select_db("frs_db"); // Sélection de la base
$i = 0;
$sql = "SELECT * FROM fournisseurs WHERE ";

if ( isset($_POST['denomination']) ) {
$sql .= "denomination = '".$_POST['denomination']."'";
$i++;
}

if ( isset($_POST['activite']) ) {
if ( $i > 0 ) $sql .= ' AND ';
$sql .= "activite = '".$_POST['activite']."'";
$i++;
}

if ( isset($_POST['localite']) ) {
if ( $i > 0 ) $sql .= ' AND ';
$sql .= "localite = '".$_POST['localite']."' ";
$i++;
}

mysql_query($sql) or die (mysql_error());

while ($donnees = mysql_fetch_array($sql) )
{
?>
<p>
<strong>Fournisseur</strong> : <?php echo $donnees['denomination']; ?><br />
<strong>Son activité</strong> : <?php echo $donnees['activite']; ?><br />
<strong>Sa localité</strong> : <?php echo $donnees['localite']; ?><br />

</p>
<?php
}

mysql_close(); // Déconnexion de MySQL


?>

Mais ça me renvoie cette erreur :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\xxx\result.php on line 65

la ligne 65 est celle là :

while ($donnees = mysql_fetch_array($sql) )

Merci de m'éclaircir l'erreur :)

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]