Ajout d'une condition pur une requete de 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 : Ajout d'une condition pur une requete de moteur de recherche

Ajout d'une condition pur une requete de moteur de recherche

par Yadutnous » 07 mars 2011, 14:37

Bonjour,
J'ai un moteur de recherche qui a comporte 3 options de recherche et qui recherche dans plusieurs champs:
-Tous les mots
-Un de ces mots
-L'expression exacte

Un script php fait vrarier la requete SQL suivant l'option cochée
voici un exemple de requête :

Code : Tout sélectionner

SELECT ref, auteur, titre, description, commentaire, prix FROM stock WHERE ( ref LIKE '%originale%' ) OR ( auteur LIKE '%originale%' ) OR ( titre LIKE '%originale%' ) OR ( description LIKE '%originale%' ) OR ( commentaire LIKE '%originale%' ) OR ( prix LIKE '%originale%' ) ORDER BY auteur ASC LIMIT 0, 10
J'aimerai ajouter une condition pour chaque recherche: que le nouveau champs DISPO soit égal à 1.
Mais je n'arrive pas a modifier le script.

Pouvez - vous m'aider ?

Merci
<?php 
   function requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb, $count = '')
   {
   // option de recherche
	   $option = $_GET['option'];
	   // texte de recherche
	   $search = $_GET['search'];
  
   // si c'est le premier appel de la fonction
   if(!isset($fonction_requete))
   {
   static $fonction_requete = 1;
  
   // si "Rechercher tous les mots" ou "Rechercher un de ces mots"
   if($option == 'all' || $option == 'one')
   {
   // liste des mots
   $mots = explode(' ', $search);
  
   // sépararateur
   if($option == 'all')
   $sep = ' AND ';
   else
   $sep = ' OR ';
   } // if($option == 'all' || $option == 'one')
   // "Rechercher l'expression exacte"
   else
   {
   $mots = $search;
   $sep = '';
   }
   } // if(!isset($fonction_requete))
  
   if(!is_array($champs))
   $champs = array($champs);
  
   if($option == 'all' || $option == 'one')
   {
   // pour savoir si on en est à la première itération ou non
   $i = 0;
  
   // pour tous les mots
   foreach($mots as $mot)
   {
   if(!$i)
   {
   $search = '~  ^!|!^  ~ LIKE \'%' . $mot . '%\'';
   $i = 1;
   }
   else
   $search .= $sep . '~  ^!|!^  ~ LIKE \'%' . $mot . '%\'';
   } // foreach($mots as $mot)
   } // if($option == 'all' || $option == 'one')
   else if($option == 'sentence')
   $search = '~  ^!|!^  ~ LIKE \'%' . $mots . '%\'';
  
   $i = 0;
  
   // début de requête
   if(empty($count))
   $req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ';
   else
   $req_search = 'SELECT count(' . $count . ') FROM ' . $table . ' WHERE ';
  
   // ajout des champs
   foreach($champs as $champ)
   {
   if(!$i)
   {
   $req_search .= '( ' . str_replace('~  ^!|!^  ~', $champ, $search) .' ) ';
   $i = 1;
   }
   else
   $req_search .= 'OR ( ' . str_replace('~  ^!|!^  ~', $champ, $search) .' ) ';
   }
  
   if(empty($count))
   $req_search .= "ORDER BY $order $sens LIMIT $limit_start, $limit_nb";
  
   return $req_search;
   } 
   
?>