Problème de script requête SQL dynamique

Bonsoir à tous!
Je me lance dans le php et suis confronté à un problème de taille: la construction d'une requête dynamique pour un moteur de recherche multicritères, sachant que l'on peut laisser des champs de recherche vides.

Voici mon script:
<?php $db = mysql_connect("localhost", "root", ""); 

mysql_select_db('test',$db); 
$sql = 'SELECT * FROM spons WHERE ';

if(!empty($_POST['Course'])) { 
         $sql .= 'Course='.$_POST['Course']; 
         }  

if(!empty($_POST['Entreprise'])) { 
   $sql .= ' AND Entreprise LIKE '%$_POST['Entreprise']%''; 
} 

if(!empty($_POST['Secteur'])) { 
   $sql .= ' AND Secteur LIKE '%$_POST['Secteur']%''; 
} ;

$res = mysql_query($sql) or die(mysql_error());
  while ($data = mysql_fetch_assoc($res))
    { 
    echo ''.$data['Entreprise']. '<br>';
    } ;


mysql_close(); 
?> 


Or, quand j'ouvre la page ainsi créée, j'obtiens une erreur:
Erreur de syntaxe près de '' à la ligne 1


J'ai forcément fait une erreur quelque part, mais je ne vois pas où, d'autant plus que le script n'est pas très long!

Est ce que quelqu'un a une suggestion, ou sinon une autre facon de faire pour créer un moteur de recherche multicritère?

D'avance, un énorme merci à tous!

2 réponses

  1. Tes requette sont pas bonnes
    Il faudrais que tu les mettent en array et quel ce termine en UNE et seul variable dans ta requette select.
    $sql = 'SELECT * FROM spons WHERE '$ma_seul_requette_de_sorti;
    
    0
    1. Bsr,

      Oui forcément il y a une erreur ... mais il ne faut pas prendre tout ce que raconte PHP au pied de la lettre car elle ne se situe pas à la ligne 1 mais ici (entres autres)

         $sql .= ' AND Entreprise LIKE '%$_POST['Entreprise']%''; 


      Simple apostrophe ou guillemet (double) à toi de choisir mais commence et termine ta chaîne par le même caractère. De plus ce caractère ne doit pas apparaître dans la chaîne sauf à le préfixer par un anti-slash : le caractère \

      Pour tout savoir sur les chaînes de caractères en PHP :
      https://www.php.net/manual/fr/language.types.string.php

      Sache que si tu écris :

      $site="CCM";
      $a='Vous êtes sur $site'; // Attention apostrophe
      alors $a contient : Vous êtes sur $site

      par contre :

      $site="CCM";
      $a="Vous êtes sur $site"; // Attention guillemet

      alors $a contient : Vous êtes sur CCM

      PHP a substitué la variable $site par son contenu : personnellement je déteste ce comportement source d'erreur !!!!
      De plus ceci ne fonctionne qu'avec des variables simples mais pas avec $_POST ni $_GET ni d'une façon générale avec les tableaux associatifs !

      Je préfère toujours utiliser un apostrophe ou guillemet simple et écrire
      $a='Vous êtes sur '.$site;
      Là au moins c'est clair et net

      Si dans ma chaîne j'ai également besoin d'un apostrophe alors je le préfixe par le caractère \ (anti-slash)

      Ex :
      $a='Aujourd\'ui'; // Note l'anti-slash

      Pour ton pb tu peux donc écrire :

      Avec des apostrophes (il n'y a aucun guillemet dans ce qui suit !)

         $sql .= ' AND Entreprise LIKE \'%'.$_POST['Entreprise'].'%\''; 


      ou encore

      Avec des guillemets

         $sql .= " AND Entreprise LIKE  '%".$_POST['Entreprise']."%'"; 


      Voilà
      0