Bonjour, je réalise un système de recherche qui fonctionne à moitier, je m'explique si je cherche un utilisateur qui s'appel Pierre Marvin, je vais écrire Pierre il me trouve le membre, je vais écrire Marvin il me trouve le membre mais j'écrit Pierre Marvin il me trouve pas le membre. Pourquoi ? J'ai ajouté un OR avec un AND mais là je sais pas d'ou sa peut venir. Car il me dit aucun résultat.
<?php
if(isset($_POST['btnrecherche']))
{
$recherche = htmlspecialchars($_POST['recherche']);
if($recherche == true)
{
$req = preg_replace("#[^a-zA-Z ?0-9]#i", "", $recherche);
$recherche1 = "SELECT * FROM membre WHERE prenom LIKE ? OR nom LIKE ? XOR (prenom LIKE ? AND nom LIKE ?) ";
$req1 = $bdd->prepare($recherche1);
$req1->execute(array('%'.$req.'%', '%'.$req.'%', '%'.$req.'%', '%'.$req.'%'));
$count = $req1->rowCount();
if($count >= 1){
echo $count. " resultat(s) trouvé(s)<hr/>";
while ($donnees = $req1->fetch(PDO::FETCH_ASSOC)){
?>
<div class="recherchermembre">
<table>
<tr>
<td>
<div class="nom">
<?php echo $donnees['prenom'];?> <?php echo $donnees['nom'];?>
</div>
<div class="image" style="background-image:url(afforiginal/<?php echo $donnees['affiche'];?>)">
<img src="afforiginal/<?php echo $donnees['affiche'];?>" alt="image recherche">
</div>
</td>
<td>
<a class="btnturcplus" href="profil.php?id=<?php echo $donnees['idmembre'];?>">Voir le profil</a>
</td>
</tr>
</table>
</div>
<hr>
<?php
}
}else{
echo "0 résultats trouvés pour votre recherche...";
}
$req1->closeCursor();
}
}
quand tu fais un concat, il assemble les deux éléments sans espace.
donc mysql fais "PierreMarvin" ce qui est différent de ce que tu cherches.
Pour cela on ajoute un espace dans le concat pour que mysql nous ressorte bien le nom et le prénom sans les coller
Salut Serge77
Essai ceci =>
$recherche1 = "SELECT * FROM membre WHERE prenom LIKE :query OR nom LIKE :query OR concat(prenom, nom) LIKE :query OR concat(nom, prenom) LIKE :query";
$req1 = $bdd->prepare($recherche1);
$req1->execute(array('query' => "%$req%"));
Il faut ajouter un espace entre le nom et le prénom sinon CONCAT assemble les deux:
CONCAT(prenom, ' ', nom)
$recherche1 = "SELECT * FROM membre WHERE prenom LIKE :query OR nom LIKE :query
OR CONCAT(prenom, ' ', nom) LIKE :query OR CONCAT(prenom, ' ', nom) LIKE :query";
$req1 = $bdd->prepare($recherche1);
$req1->execute(array('query' => "%$req%"));
Comme ça ?