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...