Moteur de recherche

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

Re: Moteur de recherche

par blinz » 08 juil. 2015, 09:50

Jai essayer du coup dinserer mon moteur de recherche avant mes sql.=
Mon traitemen pr region et loisir...
C un peu la pagaille

Re: Moteur de recherche

par Ryle » 08 juil. 2015, 09:11

Bonjour,

Ta requête "SELECT * FROM loisirs WHERE titre LIKE '%$requete%'" retourne tous les enregistrements pour lesquels le titre correspond au texte recherché. Si tu veux également filtré par région, département ou loisir, il te faut ajouter les conditions correspondantes et les jointures éventuelles.

Tu as un très bel exemple de tout ça au niveau de la requête que tu construits juste avant ;)

Re: Moteur de recherche

par blinz » 07 juil. 2015, 23:05

c'est presque bon j'avais une clause WHERE qui n'aider pas non plus c'est tt bon sauf.
En fait l'utilisateur a une liste déroulante pour les département, une pour les loisirs en gros et un champ de recherche

Si le mec à renseigner son département et son type de sortie il se peut qu'il veulent faire sa recherche de mot clef uniquement sur ce type de loisir et ce départment car la ça affiche tout.

Un peu comme :
$sql = "SELECT * FROM `loisirs`  JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1";
	
  	$sql .= !empty($_REQUEST['region']) ? ' AND `regions`.`url` = "'.$_REQUEST['region'].'"' : NULL;
    $sql .= !empty($_REQUEST['departement']) ? ' AND `loisirs`.`id_departements` = '.$_REQUEST['departement'] : NULL;
    $sql .= !empty($_REQUEST['loisir']) ? ' AND `loisirs`.`id_type_loisirs` = "'.$_REQUEST['loisir'].'"' : NULL;

	 // moteur de recherche
	 if(isset($_POST['requete']) && $_POST['requete'] != NULL) // on vérifie d'abord l'existence du POST et aussi si la requete n'est pas vide.
	 {
	 $requete = htmlspecialchars($_POST['requete']); 
	 $sql = "SELECT * FROM loisirs WHERE titre LIKE '%$requete%'"; 
	 }
	 //fin du moteur de recherche

Re: Moteur de recherche

par tof73 » 07 juil. 2015, 22:44

$sql = "SELECT * FROM loisirs WHERE titre LIKE '%$requete%' ORDER BY id_loisirs DESC";

avec le ., $sql contient déjà quelque chose donc la concécaténation aboutit à une requete invalide.

Re: Moteur de recherche

par blinz » 07 juil. 2015, 22:27

Salut bon j'ai essayer de faire mon code et voilà ou j'en suis, je ne vous met que l'essentiel :wink:
Je me retrouve avec :
Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM loisirs WHERE titre LIKE '%Chateau de montal%' ORDER BY id_loisirs' at line 1 in C:\wamp\www\lasortie\include\rechercheAjax.php on line 53

Mon but est de faire en sorte que si il n ya rien renseigné comme champ sauf le input pour recherche par mon clef on affiche tout si il a renseigner un département et le input on affiche les donnée en fonction du mot clef saisie et du département

Pour info ligne 53 = $req = $bdd->query($sql);
// On récupere le jour de la semaine en fonction de la date
	$jourRecherche = date('N', strtotime($du));
	
	$_REQUEST['departement'] = !empty($_REQUEST['departement']) ? $_REQUEST['departement'] : NULL;
	$_REQUEST['departement'] = !empty($_SESSION['membre']) && empty($_REQUEST['departement']) && empty($_REQUEST['region']) ? $_SESSION['membre']['id_departements'] :$_REQUEST['departement'];
	
    $sql = "SELECT * FROM `loisirs`  JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1";
	
  	$sql .= !empty($_REQUEST['region']) ? ' AND `regions`.`url` = "'.$_REQUEST['region'].'"' : NULL;
    $sql .= !empty($_REQUEST['departement']) ? ' AND `loisirs`.`id_departements` = '.$_REQUEST['departement'] : NULL;
    $sql .= !empty($_REQUEST['loisir']) ? ' AND `loisirs`.`id_type_loisirs` = "'.$_REQUEST['loisir'].'"' : NULL;
	
	// moteur de recherche
	if(isset($_POST['requete']) && $_POST['requete'] != NULL) // on vérifie d'abord l'existence du POST et aussi si la requete n'est pas vide.
	{
	$requete = htmlspecialchars($_POST['requete']); 
	$sql .= "SELECT * FROM loisirs WHERE titre LIKE '%$requete%' ORDER BY id_loisirs DESC"; 
	}
	//fin du moteur de recherche

      

     // Recherche par date
	if(!empty($du)) {
	}
    $sql .= !empty($du) && !empty($au) ? " AND (DATE_FORMAT(`loisirs`.`date_debut_sortie`, '%Y-%m-%d') <= '".$du."' AND DATE_FORMAT(`loisirs`.`date_fin_sortie`, '%Y-%m-%d') >= '".$au."')" : NULL;
	// Fin de la recherche par date

    $req = $bdd->query($sql);
		
	// on affiche le nombre de sorties en fonction des filtres       
	$nb = $req->rowCount();
	if ($req->fetchColumn() > 0) {
		
		// on affiche le h1 en fonction de la region 
		$region_id = !empty($_REQUEST['region']) ? regionByUrl($_REQUEST['region']) : NULL; 
		$region_id = !empty($_SESSION['membre']['id_region']) && empty($_REQUEST['region']) ? $_SESSION['membre']['id_region'] : $region_id; 

		$h1 = 'Il y a '.$nb.' annonces';
		$h1 .= !empty($region_id) ? " pour sortir en <strong>" .$aRegion[$region_id]."</strong>" : NULL;
		$h1 .= !empty($_REQUEST['departement']) ? "  <strong>" .$aDepartement[$region_id] [$_REQUEST['departement']]."</strong>" : NULL;
		$h1 .= !empty($du) ? ",  le <strong>" .date('d/m/Y', strtotime($du))."</strong>" : NULL;
		echo '<h1>'.$h1.'</h1>'."\n";	
	
	}
 
    // Après traitement de la pagination
   // ..........................

$sql .= " ORDER BY `loisirs`.`date_debut_sortie` ASC LIMIT ".intval(($page-1)*$parPage).", ".$parPage;
		$req = $bdd->query($sql);
	   
		$nb2 = $req->rowCount(); // On calcul le total avant la pagination
	
		if($nb2 > 0) {

		$req = $bdd->query($sql);
		echo '<section>';
		while($ligne = $req->fetch(PDO::FETCH_ASSOC)){  
              // on affiche les données               
               }
Merci à vous, Si c'est plus simple de mettre toute la page dites le moi

Re: Moteur de recherche

par Ryle » 06 juil. 2015, 10:49

Bonjour,

Si ton formulaire est envoyé via la méthode get, alors la valeur que tu récupères est dans $_GET['search']. Si le formulaire est envoyé en post, sa valeur est dans $_POST['search']. Si tu autorises l'envoi de cette valeur en get OU en post, tu peux utiliser $_REQUEST['search'] comme tu le fais dans la requête précédente (ceci étant naturellement moins sécurisé, même si le risque est minime)

Dans tous les cas, il est nécessaire de tester l'existence d'une variable avant de l'utiliser. Le message d'avertissement que tu obtiens est effectivement lié au fait que tu utilises la valeur contenu dans la variable $search, alors que cette variable n'a pas été définie.

Il était possible dans les versions de php 3 et antérieure, d'utiliser la variable $search pour récupérer directement le contenu d'un champ envoyé en get ou en post, présent dans un cookie ou même disponible en session. Cette faille de sécurité a été corrigée et il est désormais nécessaire de préciser explicitement si la valeur attendue provient de l'url ($_GET), d'un formulaire ($_POST), d'un cookie ($_COOKIE) ou de la session ($_SESSION)

Re: Moteur de recherche

par tof73 » 03 juil. 2015, 19:37

dans le code montré, $search n'est définie nulle part.

Moteur de recherche

par blinz » 03 juil. 2015, 18:45

Salut à tous.
Je souhaite mettre en place un petit moteur de recherche.

J'ai une page sur la quelle je fais toutes mes requetes :
// code ...
 $sql .= !empty($_REQUEST['departement']) ? ' AND `club `.`id_departements` = '.$_REQUEST['departement'] : NULL;
    $sql .= !empty($_REQUEST['club ']) ? ' AND `club `.`id_type` = "'.$_REQUEST['club '].'"' : NULL;
	
	// Moteur de recherche
	$sql .= "SELECT * FROM club WHERE nom_de_club LIKE '%$search%' OR equipe LIKE '%$search%' ORDER BY id";
// code ...
une page ou j'ai mes liste déroulante et le input en question du moteur de recherche:
<!-- moteur de recheche-->
<label for="search">Rechercher :</label><input type="text" name="search" />
Rien ne se passe:
Message d'erreur $search n'existe pas ...