Moteur de recherche site d'annonce

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 : Moteur de recherche site d'annonce

Re: Moteur de recherche site d'annonce

par Nriem » 13 nov. 2013, 20:16

Pour la recherche full text, ca permet de trouver les textes qui correspondent aux critères de recherche de type mot clé. C'est plus facile que de faire des conditions compliqués pour prendre l'absence d'un des mots clés saisis.
We ta raison sa a l'aire plus adapter, mai j'avais commençait à lire le lien (que tu m'a donner), mai sa m'a l'aire compliquer à faire sa (pour moi)
(Je vais essayer de revoir sa #-o )
Pour le "in", je suppose que tu recherches par rapport à des codes postaux. C'est à dire que tu ne va pas chercher sur une partie du code postal (sauf cas du département en entier. Pour un seul cp, tu peux faire "CP = 75001", mais pour plusieurs "CP in (75001,75002,75003)". Pour un département, ce serait "cp between 91000 and 91999". A priori, pas besoin de faire de "like" pour le code postal. Pour la catégorie, c'est surement la même chose en utilisant = ou in.
Si j'ai bien compris, tu veut dire que ma recherche sur le CP se faite sur plusieurs CP donc dans la requête SQL
Il faut rechercher dans plusieurs CP.
Non moi je veut faire un truque simple, l'utilisateur peu faire une recherche (dans le champs recherche), et si il veut il peu faire sa recherche en fonction d'une catégorie spécifique, ou UN SEUL CP spécifique. (le champs catégorie et CP son facultative pour la recherche)
Et si il vaut rechercher (une annonce) sur plusieurs CP alors il remplira pas le champs CP. :P
Ta raison je pense (j'ai pas encore essayer) mai je pourrais mètre un = $_POST['codePostal´] a la place du LIKE
(De même pour catégorie)

Edit : A priori, je te conseille de mettre des critères bien précis comme le nombre de pièces, le prix, le code postal, l'étage, le type (maison, appartement). Tout ce qui est description me semble secondaire lorsque l'on recherche un logement.
On a un besoin : nb pièce (mini et éventuellement maxi)
On cherche dans un lieu : un ou plusieurs codes postaux
On a des contraintes : prix maxi (et mini pour éventuellement filtrer des offres "pourries")
On a des envies : maison, appart, jardin, terrain, garage, parking...
Merci des conseille
C'est impotent de mètre des critère bien précis dans des annonce immobilier
Mai moi j'aurais pas d'annonce immobilier (pour l'instant)
Et (encore une fois) c'est un truque simple :wink:

Merci pour ton aide

Re: Moteur de recherche site d'annonce

par Mazarini » 13 nov. 2013, 11:40

Pour la recherche full text, ca permet de trouver les textes qui correspondent aux critères de recherche de type mot clé. C'est plus facile que de faire des conditions compliqués pour prendre l'absence d'un des mots clés saisis.

Pour le "in", je suppose que tu recherches par rapport à des codes postaux. C'est à dire que tu ne va pas chercher sur une partie du code postal (sauf cas du département en entier. Pour un seul cp, tu peux faire "CP = 75001", mais pour plusieurs "CP in (75001,75002,75003)". Pour un département, ce serait "cp between 91000 and 91999". A priori, pas besoin de faire de "like" pour le code postal. Pour la catégorie, c'est surement la même chose en utilisant = ou in.

Edit : A priori, je te conseille de mettre des critères bien précis comme le nombre de pièces, le prix, le code postal, l'étage, le type (maison, appartement). Tout ce qui est description me semble secondaire lorsque l'on recherche un logement.
On a un besoin : nb pièce (mini et éventuellement maxi)
On cherche dans un lieu : un ou plusieurs codes postaux
On a des contraintes : prix maxi (et mini pour éventuellement filtrer des offres "pourries")
On a des envies : maison, appart, jardin, terrain, garage, parking...

Re: Moteur de recherche site d'annonce

par Nriem » 13 nov. 2013, 01:08

Wooww, j'ai lu rapidement sa a l'aire pas bête du tout,
Je vais ma profondire sur sa un peu plus tard

Merci beaucoup encore pour ton aide !!! Ta assurer =D> =D> =D>

Merci MAZARINI

Ton lien je l'avait déjà aperçu, il parle du FULL TEXT mai apparemment pour mon cas j'ai pas besoins de (me prendre la tête a #-o ) l'apprendre comment il marche (merci qu'en même)

J'ai juste pas compris un truque
Tu peux aussi utiliser un truc genre "catégorie in (21,43, 62)" idem pour les cp.
?

Re: Moteur de recherche site d'annonce

par Mazarini » 12 nov. 2013, 23:35

http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html

Ca me semble pas mal comme doc. Les fonctions utilisées ressemblent plus à un moteur de recherche que les likes.

Pour les catégories et les codes postaux; utilises plutôt des = que des like. Eventuellement prévois plusieurs catégories et plusieurs code postaux (ou tout un département). Tu peux aussi utiliser un truc genre "catégorie in (21,43, 62)" idem pour les cp.

Re: Moteur de recherche site d'annonce

par franckm » 12 nov. 2013, 23:33

Là c'est un peu plus compliqué.

Tu récupères de ton formulaire un champs texte nommé recherche. Si j'ai bien compris on peut taper ce qu'on veut dans ce texte et toi tu veux que dès qu'un mot se trouve dans un titre ou une description tu l'affiches.

Donc ici il va falloir commencer par séparer tous les mots du champs recherche pour en faire chacunes des valeurs à tester. Moi je commencerais par enlever de la chaîne recherche toutes les virgules, points, chiffres, caractères spéciaux...
Pour cela il faudra certainement utiliser une expression régulière. Commençons simple en disant qu'on enlève tous les points et virgules.
$lRecherche = str_replace(array(',', '.'), '', $_POST['recherche']);
Ensuite il faut splitter la chaîne par rapport aux espaces laissés pour récupérer tous les mots.
$lTabRecherche = explode(' ', $lRecherche);
Tu obtiens alors un tableau à n éléments, n étant le nombre de mots dans la chaîne.

C'est là que ça devient un peu lourdingue, il va falloir faire un foreach pour lister tous les éléments du tableau et rajouter une condition LIKE sur chaque élément.
//On initialise notre variable comme un string
$lSqlRecherche = '';
//On liste les éléments du tableau
foreach($lTabRecherche AS $lOneTab){
      //Pour chaque élément, on concatène notre sql
     //A la première itération on ne met pas OR on le met seulement à partir de la deuxième
     if($lKey > 0){
		$lSqlRecherche .= "OR";
      }
      $lSqlRecherche .= " titreAnnonce LIKE '%$lOneTab%' OR descriptionObjet LIKE '%$lOneTab%'  ";   
}
On a alors notre condition sur la recherche, on peut l'insérer dans la requête:
//Je commence par construire ma requête avec mes clauses
$lRequete = "SELECT id, titreAnnonce, gategorie, photoObjet, prix, codePostal, ville, descriptionObjet
FROM annonceEnLigne
WHERE ( $lSqlRecherche )";
if(!empty($_POST['gategorie'])){
       $lRequete .= " AND gategorie LIKE '%$gategorie%' " ; // ligne 71
}
if(!empty($_POST['codePostal'])){
      $lRequete .= " AND codePostal LIKE '%$codePostal%' " ;
}

//Je prépare la requête
$lSql= $bdd->prepare($lRequete);

//J'exécute la requête et je récupère les fetch
$lSql->execute();
$lDonnees = $lSql->fetchAll();
 
Ci dessous le code dans globalité:
//On enlève les virgules et les points
$lRecherche = str_replace(array(',', '.'), '', $_POST['recherche']);
//On explose notre chaîne sur les espaces
$lTabRecherche = explode(' ', $lRecherche);
//On initialise notre variable sql comme un string
$lSqlRecherche = '';
//On liste les éléments du tableau
foreach($lTabRecherche AS $lKey => $lOneTab){
	//Pour chaque élément, on concatène notre sql
	//A la première itération on ne met pas OR on le met seulement à partir de la deuxième
	if($lKey > 0){
		$lSqlRecherche .= "OR";
	}
	$lSqlRecherche .= " titreAnnonce LIKE '%$lOneTab%' OR descriptionObjet LIKE '%$lOneTab%' ";
}
//Je commence par construire ma requête avec mes clauses
$lRequete = "SELECT id, titreAnnonce, gategorie, photoObjet, prix, codePostal, ville, descriptionObjet
FROM annonceEnLigne
WHERE ( $lSqlRecherche )";
if(!empty($_POST['gategorie'])){
	$lRequete .= " AND gategorie LIKE '%$gategorie%' " ;
}
if(!empty($_POST['codePostal'])){
	$lRequete .= " AND codePostal LIKE '%$codePostal%' " ;
}

//Je prépare la requête
$lSql= $bdd->prepare($lRequete);

//J'exécute la requête et je récupère les fetch
$lSql->execute();
$lDonnees = $lSql->fetchAll();
A tester pour voir si ça marche...

Re: Moteur de recherche site d'annonce

par Nriem » 12 nov. 2013, 22:58

Sans trop te déranger et si t'a du temps

J'ai une autre question

Comment résoudre se problème

si on tape plusieurs MOT (dans la recherche) et seulement un SEUL mot, ne figure pas dans la base, sa affiche rien
Même si dans c'es plusieurs mot taper y'avais des mot qui figure dans la BDD

Merci d'avance

Re: Moteur de recherche site d'annonce

par Nriem » 12 nov. 2013, 22:54

sa marche nickel =D> Merci beaucoup

Je me douter que le problème venait de la requête préparer,
Mai qu'en j'ai appris le PHP on m'a pas enseigner qu'on pouvait préparer la requête après l'avoir crée, (en restent sécuriser)

Et c'est d'ailleurs pour sa que j'ai placer le
$req->execut();
Après les 2 condition en pensent que temps que la requête n'est pas exécuter on peu la concatenes
(Je suis seulement un simple débutent en PHP :wink: )

Merci encore

Re: Moteur de recherche site d'annonce

par franckm » 12 nov. 2013, 21:12

Déjà:

1. J'ai répondu à ta question qui était sur ta dernière erreur en date à savoir .= au lieu de . =
Et oui excuses moi encore mais si tu avais cherché un peu en bidouillant toi même (c'est aussi comme ça qu'on apprend) tu aurais certainement trouvé avant.

Bref, il y certainement un problème dans ton code par rapport au nom des variables. dans tes premiers posts, tu écrirs $req= $bdd->... , c'est à dire que $req est l'objet PDO préparé et ensuite plus bas tu mets $req comme étant une concaténation de ta requête. Donc en essayant de reprendre ton code, essaies ça:
//Je commence par construire ma requête avec mes clauses
$lRequete = "SELECT id, titreAnnonce, gategorie, photoObjet, prix, codePostal, ville, descriptionObjet
FROM annonceEnLigne
WHERE (titreAnnonce LIKE '%$recherche%' OR descriptionObjet LIKE '%$recherche%')";
if(!empty($_POST['gategorie'])){
       $lRequete .= " AND gategorie LIKE '%$gategorie%' " ; // ligne 71
}
if(!empty($_POST['codePostal'])){
      $lRequete .= " AND codePostal LIKE '%$codePostal%' " ;
}

//Je prépare la requête
$lSql= $bdd->prepare($lRequete);

//J'exécute la requête et je récupère les fetch
$lSql->execute();
$lDonnees = $lSql->fetchAll(); 

Re: Moteur de recherche site d'annonce

par Nriem » 12 nov. 2013, 20:48

Ou tu pourrais essayer de trouver la réponse par toi même...

Un forum c'est là pour aider pas pour mâcher le travail ;)
Je peu t'assurer que si j'avais trouver la réponses (ou un tuto) moi même j'aurai pas demander de l'aide sur le forum :non:

Si tu a bien lu mon premier message je demande pas qu'on me donne le code d'un formulaire de recherche sur un plateaux,
Mai un CONSEILLE plutôt ou un tuto (bien expliquer) sur un moteur de recherche

Se qui devrait pas être très compliquer à répondre (pour des pro en php) puisque c'est quelque choses qui et quasiment dans tout les site aujourd'hui

Bref si personne veut répondre on va essayer de se débrouiller autrement :wink:

Merci qu'en même

Re: Moteur de recherche site d'annonce

par franckm » 12 nov. 2013, 07:57

je passe a autre choses quand je vois qu'on me répond pas
Ou tu pourrais essayer de trouver la réponse par toi même...

Un forum c'est là pour aider pas pour mâcher le travail ;)

Re: Moteur de recherche site d'annonce

par nriem » 12 nov. 2013, 03:02

Merci franckm

mai j'ai toujours une ERREUR (pas la même)

( ! ) Catchable fatal error: Object of class PDOStatement could not be converted to string in C


Citation: Depuis le 8 novembre, tu cours après ça ???????

je cours pas je marche lol
t’inquiète pas, j'ai pas que sa a faire je passe a autre choses quand je vois qu'on me répond pas

Re: Moteur de recherche site d'annonce

par franckm » 11 nov. 2013, 20:03

Pffff....

En php une concaténation .= n'a pas d'espace.

Donc il faut écrire:
if(!empty($_POST['gategorie']))
{
       $req .= "AND gategorie LIKE '%$gategorie%' " ; // ligne 71
}
if(!empty($_POST['codePostal']))
{
      $req .= "AND codePostal LIKE '%$codePostal%' " ;
}
       $req->execute();
Depuis le 8 novembre, tu cours après ça ???????


Note: il existe des logiciels (et gratuit comme Eclipse par exemple) sui vont indiquent quand il y a des erreurs de syntaxe et où elles se trouvent...

Re: Moteur de recherche site d'annonce

par Nriem » 11 nov. 2013, 19:58

UP

Re: Moteur de recherche site d'annonce

par nriem » 08 nov. 2013, 01:33

merci

je s'avais pas, qu'on pouvais rajouter des information sur une requête SQL.

mai il y'a une ERREUR

( ! ) Parse error: syntax error, unexpected '=' in C:.....php on line 71


j'ai fait la même choses que toi a priorie
 
if(!empty($_POST['gategorie']))
{
       $req. = "AND gategorie LIKE '%$gategorie%' " ; // ligne 71
}
if(!empty($_POST['codePostal']))
{
      $req. = "AND codePostal LIKE '%$codePostal%' " ;
}
       $req->execute();
a pare sa tu ma pas répondu pour l'INDEX
et ma mon deuxième (petit) problème

merci encore pour ton aide

Re: Moteur de recherche site d'annonce

par damien_55 » 08 nov. 2013, 00:33

slt,

Reprend la doc mysql sur les clauses WHERE 'OR' et 'AND'.
SELECT id, titreAnnonce, gategorie, photoObjet, prix, codePostal, ville, descriptionObjet
FROM annonceEnLigne
WHERE titreAnnonce LIKE '%$recherche%' 
OR descriptionObjet LIKE '%$recherche%' 
AND gategorie LIKE '%$gategorie%' 
AND codePostal LIKE '%$codePostal%'
ta requète écrite comme ceci suppose que toute les conditions doivent etre rempli pour que ta requete soit fonctionnelle.

si tu écris:
 gategorie LIKE '%1%' AND codePostal LIKE '%1%' 
. les deux conditions doivent etre remplis. si l'une ou l'autre n'est pas rempli la requete n'abouti pas. C'est le principe du AND.

rajoute des parenthese et vu que ta requete contient des éléments non obligatoire, je la découperai comme suit:
$requete = "SELECT id, titreAnnonce, gategorie, photoObjet, prix, codePostal, ville, descriptionObjet
FROM annonceEnLigne
WHERE (titreAnnonce LIKE '%$recherche%' OR descriptionObjet LIKE '%$recherche%')";
if(!empty ($_GET['gategorie'])) {
$requete. ="AND gategorie LIKE '%$gategorie%'";
}
if(!empty ($_GET['gategorie'])) {
$requete. ="AND codePostal LIKE '%$codePostal%'";
}