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

Résolu
Aldebaran -  
 Aldebaran -
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!

5 réponses

Aldebaran
 
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   Statut Membre Dernière intervention   894
 
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
Aldebaran
 
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   Statut Membre Dernière intervention   1 > Aldebaran
 
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
le père
 
Bonjour

Pas de virgule entre mot8 et from....
0
Aldebaran
 
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
le père
 
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
Aldebaran
 
le père, MERCI!! ça fonctionne, mes résultats s'affichent correctement. Merci pour vos conseils et votre patience!
0