Syntaxe de requête de recherche [PHP / Mysql]
Résolu
Aldebaran
-
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 :
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 :
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!
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:
- Syntaxe de requête de recherche [PHP / Mysql]
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Fréquence tnt recherche manuelle - Forum Téléviseurs
- Recherche photo - Guide
- Mysql community server - Télécharger - Bases de données
- Roxane cherche des informations pour écrire un rapport sur la diversité. avec un moteur de recherche généraliste, elle souhaite limiter les résultats de sa recherche aux pages de l’organisation internationale de la francophonie. quelle requête doit-elle taper dans le champ de recherche ? - Forum Réseaux sociaux
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 :
Le formulaire :
Merci de votre aide!
Erreur de syntaxe pr�s de 'FROM journaux WHERE id LIKE %cholestérol% OR journal LIKE %ch' � 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!
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());
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
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
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 :
Je ne reçois pas les valeurs contenues dans ma table. Quelqu'un sait d'où cela peut venir? Pour rappel, le script corrigé :
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 />'; } ?>
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
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