Problème de script requête SQL dynamique
Pierre-Yves
-
boss0211 Messages postés 264 Statut Membre -
boss0211 Messages postés 264 Statut Membre -
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:
Or, quand j'ouvre la page ainsi créée, j'obtiens une erreur:
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!
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:
- Problème de script requête SQL dynamique
- Tableau croisé dynamique - Guide
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Ghost script - Télécharger - Polices de caractères
2 réponses
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)
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 !)
ou encore
Avec des guillemets
Voilà
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à