8768 sujets

Développement web côté serveur, CMS

bonjour à vous,
j essai de mettre en place une barre de recherche mais j ai quelque difficulté pour la conception

j ai reussi a la faire fonctionné mais seulement si y a un seul mot en faisant ceci


if (isset($_POST['action'])) 
       $_SESSION['critere'] = $_POST;
if(isset($_SESSION['critere'])) 
        extract($_SESSION['critere']);// extraction des critères de recherche
$choix = array();          
        if(isset($Keyword) && !empty($Keyword))

 {$choix[] = "Marque LIKE '%$Keyword%'";}                   
 {$choix[] = "Modele LIKE '%$Keyword%'";}
 {$choix[] = "Gamme LIKE '%$Keyword%'";}

$critere = implode(' OR ', $choix);

$requete = "select * ,(Marque) AS Marque from batterie WHERE $critere ORDER BY Marque ASC";
$reponse = mysql_query( $requete ) ;


ensuite en parcourant le net j ai trouvé une chose qui marche sur plusieur mots mais je n arrive pas a mettre en place car la ca fonctionne que sur un seul champ de ma table (exemple seulement la Marque) en faisant ceci

if (isset($_POST['action'])) 
       $_SESSION['critere'] = $_POST;
if(isset($_SESSION['critere'])) 
        extract($_SESSION['critere']);// extraction des critères de recherche
$choix = array();          
        if(isset($Keyword) && !empty($Keyword))
{$choix[] = "Marque";} // j ai supprimé les autres champs car sinon ma requete donne une erreur sql
$critere = implode(' ', $choix);
$mots = explode( " ", $Keyword );
if( count( $mots ) > 0 )

$requete = "select * ,('Marque') AS Marque from batterie WHERE";
   for( $i = 0; $i < count( $mots ); $i++ ) {
      //$requete .= "$critere   ";
      $requete .= "  $critere LIKE '%". $mots[$i] ."%' ";
      if( $i < count( $mots ) - 1 )
         $requete .= " OR ";}
    
   $requete .= " ORDER BY Marque"; 
   
   
   $reponse = mysql_query( $requete ) ;


je ne sais pas comment combiner les 2 vu que je souhaite une recherche sur la table qui se presente sous cette forme
ID
Marque
Modele
Gamme
etc.. j ai 35 colonnes dont je souhaite rechercher

j ai essayé avec un fulltext

select * from batterie WHERE MATCH(Marque,Modele,Gamme) AGAINST('exide') ORDER BY Marque

mais #1191 - Can't find FULLTEXT index matching the column list

j ai essayé une chose comme ceci

$requete = "select * ,('Marque') AS Marque from batterie WHERE ID IN($critere)";
              
          for( $i = 0; $i < count( $mots ); $i++ ) {
              //$requete .= "$critere";
              $requete .= " LIKE '%". $mots[$i] ."%' ";
           if( $i < count( $mots ) - 1 )
            $requete .= " OR ";
            }
    
          $requete .= " ORDER BY Marque";


mais erreur sql et en parcourant le net j ai cru comprendre que l on peut pas mettre un IN avec un LIKE

voila , je vous remercie d avance pour l aide apporté
j ai résolu le problème par ce code actuel


{$choix[] = "Marque";}
 
{$choix[] = "Modele";} 
 
{$choix[] = "Gamme";}
$critere = implode(' , ', $choix);
$mots = explode( " ", $Keyword );
 
if( count( $mots ) > 0 )
 
$requete = "select * ,('Marque') AS Marque from batterie WHERE";
   for( $i = 0; $i < count( $mots ); $i++ ) {
      //$requete .= "$critere   ";
      $requete .= "  CONCAT($critere) LIKE '%". $mots[$i] ."%' ";
      if( $i < count( $mots ) - 1 )
         $requete .= " OR ";}
 
   $requete .= " ORDER BY Marque";