[RESOLU] Recherche avec LIKE

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 : [RESOLU] Recherche avec LIKE

Re: Recherche avec LIKE

par nico44530 » 07 mai 2014, 19:02

En fait, ça fonctionne très bien comme ça.
J'ai oublié de faire des tests :wink:

J'aimerais juste filtrer les résultats avec WHERE pour ne pas rechercher son propre prénom et nom.
J'utilise une fonction qui cherche les infos du membre connecté :

infoMembre($_SESSION['id'],'prenom');
infoMembre($_SESSION['id'],'nom');

À partir de la requête comment filtrer les résultats pour que la recherche affiche "Aucun résultat" quand on cherche son propre prénom ou nom.
Le problème c'est que plusieurs membres peuvent avoir le même nom ou le même prénom.

Voici la requête :
$resultat = Bdd::connect() -> prepare("SELECT id, prenom, nom, pseudo FROM users WHERE CONCAT(prenom,' ',nom) LIKE :q OR CONCAT(nom,' ',prenom) LIKE :q ORDER BY prenom LIMIT 10");

Re: Recherche avec LIKE

par moogli » 07 mai 2014, 01:28

Salut,

C'est ce que ton code semble faire.
As tu testé cette requête dans un client sql ?

Pourquoi utiliser la concaténation alors que tu peux très simplement tester chaque colonne (where prénom like '' or nom like ''

As tu penser a rendre ce code non sensible a la casse (lower ou upper sur la recherche afin d'éviter les problèmes.

Il faut que tu détails plus ton problème ce n'est pas clair du tout.

Tu ne devrais pas aussi sélectionner la clef primaire afin d'identifier correctement un membre (homonymie ?)

@+

Recherche avec LIKE

par nico44530 » 06 mai 2014, 15:27

Bonjour,

J'ai un script d'autocomplétion en ajax.
Le problème se trouve en SQL, j'aimerais que la recherche se précise à chaque lettre.

Par exemple, si j'entre la lettre A, tous les prénom qui ont la première lettre A vont s'afficher.
Maintenant si j'écris An, j'aimerais que les résultats changent, et affichent les prénom avec les 2 premières lettres An

Voici ma requête :
if(isset($_POST['queryString'])){
	$queryString = $_POST['queryString'];
	if(strlen($_POST['queryString']) > 0){
		$resultat = Bdd::connect() -> prepare("SELECT prenom, nom FROM users WHERE CONCAT(prenom,' ',nom) LIKE :q OR CONCAT(nom,' ',prenom) LIKE :q ORDER BY prenom LIMIT 10");
		$resultat->execute(array('q' => $queryString.'%'));
		if($resultat){
			while($result = $resultat -> fetch(PDO::FETCH_ASSOC)){
				if($result['prenom'] == infoMembre($id,'prenom')){
					return false;
				} else {
					echo '<li onClick="fill(\''.$result['prenom'].'\');">'.$result['prenom'].' '.$result['nom'].'</li>';
				}
			}
		} else {
			echo 'Erreur';
                        exit();
		}
	} 
} else {
	header('location:index.php');
        exit();
}
Les deux CONCAT, servent à rechercher les membres à la fois par leur nom ou leur prénom.

Merci d'avance