Problème de script requête SQL dynamique

Fermé
Pierre-Yves - 16 nov. 2006 à 20:32
boss0211 Messages postés 264 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 9 septembre 2007 - 16 nov. 2006 à 21:22
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!
A voir également:

2 réponses

PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
16 nov. 2006 à 21:10
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
boss0211 Messages postés 264 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 9 septembre 2007 8
16 nov. 2006 à 21:22
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