Syntaxe de requête de recherche [PHP / Mysql]

Résolu/Fermé
Aldebaran - 28 mai 2009 à 09:45
 Aldebaran - 28 mai 2009 à 15:56
Bonjour,

Je précise tout de suite que je suis plus ou moins débutante en ce qui concerne le php. J'ai créé une base mysql permettant de gérer des archives, mais j'ai un souci concernant les requêtes de recherche dans cette base.

J'ai créé un formulaire php, style moteur de recherche basique. Mais quand je lance la recherche, je reçois un message d'erreur :

Erreur de syntaxe pr�s de '%cholestérol% OR journal LIKE %cholestérol% OR doc LIKE %chole' � la ligne 2


Je pense que ma requête est mal formulée, mais après plusieurs recherches sur les sites dédiés à PHP et Mysql, je n'ai pas trouvé de réponse à mon souci... En plus ma recherche doit s'exécuter sur plusieurs champs. Voici le code php :

<?php

// Récupère la variable
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';

// la requete mysql
$sql = mysql_query(
"SELECT id, doc, titre, auteur, date, lieu,  editeur, notes, mot1, mot2, mot3, mot4, mot5, mot6, mot7, mot8, cote  FROM archives 
WHERE id LIKE %$recherche%" .
" OR journal LIKE %$recherche%" .
" OR doc LIKE %$recherche%" . 
" OR titre LIKE %$recherche%" .
" OR auteur LIKE %$recherche%" .
" OR date LIKE %$recherche%" .
" OR lieu LIKE %$recherche%" .
" OR numero LIKE %$recherche%" .
" OR editeur LIKE %$recherche%" .
" OR notes LIKE %$recherche%" .
" OR mot1 LIKE %$recherche%" .
" OR mot2 LIKE %$recherche%" .
" OR mot3 LIKE %$recherche%" .
" OR mot4 LIKE %$recherche%" .
" OR mot5 LIKE %$recherche%" .
" OR mot6 LIKE %$recherche%" .
" OR mot7 LIKE %$recherche%" .
" OR mot8 LIKE %$recherche%" .
" OR cote LIKE %$recherche%") 

or die (mysql_error());

// affichage du résultat
while(list($id, $journal, $doc, $titre, $auteur, $date, $lieu, $numero, $editeur, $notes, $mot1, $mot2, $mot3, $mot4, $mot5, $mot6, $mot7, $mot8, $cote)=mysql_fetch_array($sql)){
echo 'Resultat de la recherche: '.$id.', '.$journal.', '.$doc.', '.$titre.', '.$auteur.', '.$date.', '.$lieu.', '.$numero.', '.$editeur.', '.$notes.', '.mot1.', '.$mot2.', '.$mot3.', '.$mot4.', '.$mot5.', '.$mot6.', '.$mot7.', '.$mot8.', '.$cote.' <br />';
}

?>


D'ailleurs, une question qui va paraître un peu bête : faut-il inclure le champs ID dans la requête de recherche?

Voilà, merci d'avance pour votre aide et vos réponses!
A voir également:

5 réponses

Je viens de me rendre compte que j'avais mal rédigé mon formulaire. J'ai corrigé en enlevant les champs en trop, mais le problème persiste :

Erreur de syntaxe pr&#65533;s de 'FROM journaux WHERE id LIKE %cholestérol% OR journal LIKE %ch' &#65533; la ligne 1


Le formulaire :

<?php

// Récupère la variable
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';

// la requete mysql
$sql = mysql_query(
"SELECT id, journal, titre, date, numero, notes, mot1, mot2, mot3, mot4, mot5, mot6, mot7, mot8,  FROM journaux 
WHERE id LIKE %$recherche%" . " OR journal LIKE %$recherche%" . " OR titre LIKE %$recherche%" . " OR date LIKE %$recherche%" . " OR numero LIKE %$recherche%" . " OR notes LIKE %$recherche%" . " OR mot1 LIKE %$recherche%" . " OR mot2 LIKE %$recherche%" . " OR mot3 LIKE %$recherche%" . " OR mot4 LIKE %$recherche%" . " OR mot5 LIKE %$recherche%" . " OR mot6 LIKE %$recherche%" . " OR mot7 LIKE %$recherche%" . " OR mot8 LIKE %$recherche%") or die (mysql_error());

// affichage du résultat
while(list($id, $journal, $titre, $date, $numero, $notes, $mot1, $mot2, $mot3, $mot4, $mot5, $mot6, $mot7, $mot8)=mysql_fetch_array($sql)){
echo 'Resultat de la recherche: '.$id.', '.$doc.', '.$titre.', '.$date.', '.$numero.', '.$notes.', '.mot1.', '.$mot2.', '.$mot3.', '.$mot4.', '.$mot5.', '.$mot6.', '.$mot7.', '.$mot8.', <br />';
}

?>


Merci de votre aide!
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 mai 2009 à 13:44
Essayes comme ça:

$sql = mysql_query(
"SELECT id, journal, titre, date, numero, notes, mot1, mot2, mot3, mot4, mot5, mot6, mot7, mot8,  FROM journaux 
WHERE id LIKE '%".$recherche."%' OR journal LIKE '%".$recherche."%' OR titre LIKE '%".$recherche."%' OR date LIKE '%".$recherche."%'
 OR numero LIKE '%".$recherche."%' OR notes LIKE '%".$recherche."%' OR mot1 LIKE '%".$recherche."%'
 OR mot2 LIKE '%".$recherche."%' OR mot3 LIKE '%".$recherche."%' OR mot4 LIKE '%".$recherche."%' OR mot5 LIKE '%".$recherche."%'
 OR mot6 LIKE '%".$recherche."%' OR mot7 LIKE '%".$recherche."%' OR mot8 LIKE '%".$recherche."%'") or die (mysql_error());
0
J'ai toujours le même meassage d'erreur :

Erreur de syntaxe près de 'FROM journaux WHERE id LIKE '%8%' OR journal LIKE '%8%' OR tit' à la ligne 1
0
persolaser Messages postés 33 Date d'inscription jeudi 7 juin 2007 Statut Membre Dernière intervention 12 octobre 2014 1 > Aldebaran
28 mai 2009 à 15:04
Salut
Dans ma config (easyPhP sur PC et idem sur serveur distant) il faut mettre des ' autour du nom des champs.
Le plus simple (de ce que je pratique) est de mettre au point la requête manuellement dans phpmyadmin puis de la copier coller dans ton source et de remplacer les variables en dur dans la requete de mise au point par les variables PhP mais en respectant surtout touts les espaces, apostrophes et autres installés par phpmyadmin.
J'espère t'aider ainsi.
Roland
0
Bonjour

Pas de virgule entre mot8 et from....
0
Bon, j'ai corrigé mon script, je n'ai plus de message d'erreur mais cette fois voilà ce que ça m'affiche en résultat de recherche :

Resultat de la recherche: id, journal, titre, date, numero, notes, mot1, mot2, mot3, mot4, mot5, mot6, mot7, mot8
Resultat de la recherche: id, journal, titre, date, numero, notes, mot1, mot2, mot3, mot4, mot5, mot6, mot7, mot8
Resultat de la recherche: id, journal, titre, date, numero, notes, mot1, mot2, mot3, mot4, mot5, mot6, mot7, mot8
Resultat de la recherche: id, journal, titre, date, numero, notes, mot1, mot2, mot3, mot4, mot5, mot6, mot7, mot8
Resultat de la recherche: id, journal, titre, date, numero, notes, mot1, mot2, mot3, mot4, mot5, mot6, mot7, mot8 


Je ne reçois pas les valeurs contenues dans ma table. Quelqu'un sait d'où cela peut venir? Pour rappel, le script corrigé :

<?php

// Récupère la variable
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';

// la requete mysql
$sql = mysql_query(
"SELECT 'id', 'journal', 'titre', 'date', 'numero', 'notes', 'mot1', 'mot2', 'mot3', 'mot4', 'mot5', 'mot6', 'mot7', 'mot8'  FROM journaux 
WHERE 'id' LIKE '%".$recherche."%' OR 'journal' LIKE '%".$recherche."%' OR 'titre' LIKE '%".$recherche."%' OR 'numero' LIKE '%".$recherche."%'
 OR 'date' LIKE '%".$recherche."%' OR 'notes' LIKE '%".$recherche."%' OR 'mot1' LIKE '%".$recherche."%'
 OR 'mot2' LIKE '%".$recherche."%' OR 'mot3' LIKE '%".$recherche."%' OR 'mot4' LIKE '%".$recherche."%' OR 'mot5' LIKE '%".$recherche."%'
 OR 'mot6' LIKE '%".$recherche."%' OR 'mot7' LIKE '%".$recherche."%' OR 'mot8' LIKE '%".$recherche."%'") or die (mysql_error());
 
// affichage du résultat
while(list($id, $journal, $titre, $numero, $date, $notes, $mot1, $mot2, $mot3, $mot4, $mot5, $mot6, $mot7, $mot8)=mysql_fetch_array($sql)){
echo 'Resultat de la recherche: '.$id.', '.$journal.', '.$titre.', '.$numero.', '.$date.', '.$notes.', '.$mot1.', '.$mot2.', '.$mot3.', '.$mot4.', '.$mot5.', '.$mot6.', '.$mot7.', '.$mot8.' <br />';
}

?> 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tu as mis des ' autour des noms de champs comme te l'a conseillé persolaser, tu as tout faux et ça explique le résultat. Contrairement à ce qu'il dit, il n'a jamais fallu mettre d'apostrophes autour des noms de champ en mysql, ni chez lui ni ailleurs. Ce sont des accents graves ` (ou rien du tout). N'obéis pas aux conseils aveuglément, regarde la manuel mysql.

Par contre, ton list ne devrait pas marcher avec un array associatif. Tu devrais faire un mysql_fetch_row au lieu de mysql_fetch_array
0
le père, MERCI!! ça fonctionne, mes résultats s'affichent correctement. Merci pour vos conseils et votre patience!
0