IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Recherche base de données moteur de recherche


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Formation developpeur
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Formation developpeur

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Par défaut Recherche base de données moteur de recherche
    Bonjour,
    j'ai fait un moteur de recherche avec pagination qui laisse le choix à l'internaute de choisir dans quel type de recherche il veut faire avec un select (titre, résumé, mots clé).
    Le moteur de recherche simple fonctionne ainsi que les recherche ciblé soit par titre, résumé ou mots clé mais quand je propose une recherche ciblé sur le titre, le résumé et les mots clé en même temps cela ne fonctionne plus. Il me dit :

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'resume mot_cle LIKE '%saint-lô%' ORDER BY date DESC' at line 1
    Mon code html:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <div class="moteur_recherche">
        <form name="Formulaire_recherche" method="POST" action="result_recherche.php">
            <input type="text" name="txt_recherche" id="idTxt_recherche" />
            <label> par </label>
            <select name="liste">
                <option selected="defaut" value="titre, resume, mot_cle">défaut</option>
                <option value="titre">titre</option>
                <option value="resume">résumé</option>
                <option value="mot_cle">mots clé</option>
            </select>
            <input class="btn_loupe" type="submit" name="btn_recherche" value="" onclick="return test_recherche(this.Formulaire_recherche)" />
        </form>
    </div>

    code php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <?php
    //Liste des variables utilisées
    $base = 'tevi';
    $host = 'localhost';
    $user = 'root';
    $pass = '';
    $recherche = FALSE;
    if (isset($_POST['txt_recherche']) && $_POST['txt_recherche'] != NULL && ($_POST['liste'])){ // on vérifie d'abord l'existence du POST et aussi si la requete n'est pas vide.
        $mot_cle = $_POST['txt_recherche'];
        $liste = $_POST['liste'];
        $recherche = TRUE;
    }
    //On ajoute une methode $_GET pour récuperer $mot_cle dans l'url afin d'afficher les différentes pages de liens
    elseif (!empty($_GET['txt_recherche'])){
        $mot_cle = urldecode($_GET['txt_recherche']);
        $liste = urldecode($_GET['liste']);
        $recherche = TRUE;
    }
    if ($recherche == TRUE){
        //Connection a la base de données   
        mysql_connect($host, $user, $pass);
        mysql_select_db($base);
        mysql_set_charset( 'utf8' );
        //Requête pour la recherche
        $sql =  mysql_query("SELECT id_video, date, titre, nom_video, resume FROM tab_video WHERE ".$liste." LIKE '%".mysql_real_escape_string($mot_cle)."%' ORDER BY date DESC") or die (mysql_error()); // Requête pour la recherche
        $nb_resultats = mysql_num_rows($sql); // on utilise la fonction  pour compter les résultats
        if($nb_resultats != 0){ // si le nombre de résultats est différent de 0, on continue{
            //Affichage du nombre d'éléments trouvé ainsi que les éléments
    ?>
    <h3>Nous avons trouvé <?php echo $nb_resultats; // on affiche le nombre de résultats 
            if($nb_resultats > 1) { echo ' résultats :'; } else { echo ' résultat :'; } // on vérifie le nombre de résultats pour orthographier correctement. 
    ?></h3>    
    <?php
            //Calcul du nombre de page      
            $titre = $nb_resultats;
            $limite = 5;
            $nbPage = ceil($titre/$limite);
            if(isset($_GET['page']) && $_GET['page']>0 && $_GET['page']<=$nbPage){
                $cPage = $_GET['page'];
            }        
            else{
                $cPage = 1;
            }
            //Construction de la requete
            $min = ($cPage-1)*$limite;
            $sql=mysql_query("SELECT id_video, date, titre, nom_video, resume FROM tab_video WHERE ".$liste." LIKE '%$mot_cle%' ORDER BY date DESC LIMIT ".$min.",".$limite);
            // var_dump($sResult);
            //Afficher la liste des actualitées trouvées lié au mot-clé dans un tableau
            while($donnees = mysql_fetch_array($sql)){
                echo "<table class='tab_affichage_recherche'>";
                echo"<tr>
                    <td class='taille_video'>".$donnees['nom_video']."</td>
                    <td>
                        <table>
                            <tr>
                                <td class='info_video_titre'>".$donnees['titre']."</td>
                            </tr>
                            <tr>
                                <td class='info_video_date'>".$donnees['date']."</td>
                            </tr>
                            <tr>
                                <td class='info_video_resume'>".$donnees['resume']."</td>
                            </tr>
                        </table>   
                    </td>
                    </td>
                </tr>
            </table>";
    ?>
    Comment je pourrai résoudre le problème ?

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ton code actuelle donne ça comme requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql =  mysql_query("SELECT id_video, date, titre, nom_video, resume FROM tab_video WHERE titre, resume, mot_clef LIKE '%".mysql_real_escape_string($mot_cle)."%' ORDER BY date DESC")
    La bonne syntaxe est par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $recherche = '%' . mysql_real_escape_string($mot_cle) . '%';
    $sql =  mysql_query("SELECT id_video, date, titre, nom_video, resume FROM tab_video 
    WHERE titre LIKE '$recherche'
    OR resume LIKE '$recherche'
    OR mot_clef LIKE '$recherche'
    ORDER BY date DESC")
    Au passage, tu as oublié d'échapper $liste et tu l'utilises directement dans ta requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Au passage également, l'extension mysql_ étant dépréciée depuis un sacré bout de temps maintenant, il est temps de passer à l'extension "mysqli_", ou mieux encore, PDO ! Tu vas voir c'est magique

    http://www.php.net/manual/fr/mysqlinfo.api.choosing.php

  4. #4
    Membre régulier
    Homme Profil pro
    Formation developpeur
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Formation developpeur

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Par défaut
    Merci pour ton aide.

    Si je change le code par celui que tu m'as données cela ne fonctionne plus du tout.
    En faite ce que je veux c'est que lorsque l'utilisateur fait une recherche par défaut dans le select, la recherche se fait dans les 3 champs (titre, résumé et mots clé) en même temps dans la base de données.

    Tu veux dire quoi en disant :
    Au passage, tu as oublié d'échapper $liste et tu l'utilises directement dans ta requête.
    ?


    @ Spartacusply je tiens compte de ton message, je régle mon problème de recherche et après je me mets là dessus

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si je change le code par celui que tu m'as données cela ne fonctionne plus du tout.
    Ce n'était pas un code clef en main.
    Ce n'est que la requête pour ton cas "rechercher partout".
    Il faut que tu différencies les deux traitements : chercher dans une des colonnes et chercher dans les 3 colonnes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/10/2013, 15h09
  2. [conception] base de données + moteur de recherche
    Par Paskalin dans le forum Langage
    Réponses: 20
    Dernier message: 01/12/2008, 10h54
  3. Recherche base de données sous Delphi
    Par clipper5.3 dans le forum Bases de données
    Réponses: 26
    Dernier message: 19/04/2008, 23h57
  4. Recherche base de données Charset
    Par anihat dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 01/10/2007, 18h11
  5. [SQL] Moteur de recherche problème affichage donnée dans select
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/04/2006, 20h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo