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 :

Petit moteur de recherche [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Points : 103
    Points
    103
    Par défaut Petit moteur de recherche
    Bonjour, je viens demander de l'aide en dernier recours car j'ai un gros bug et je n'arrive pas à trouver la solution par moi même. J'attaque une formation pour devenir développeur PHP dans 2 mois et en attendant je me forme tout seul pour arriver à la formation avec déjà quelques connaissances. Apres avoir étudié le HTML, CSS et javascript, je m'attaque au PHP et aux bases de données. Pour m’entraîner je fais un petit site et voila que je n'arrive pas à trouver la solution. J'ai cherché sur google etc.. mais je n'arrive pas à saisir.

    Je travail avec WAmp

    Voila mon soucis, j'ai une base de donnée avec id | auteur | titre | lien
    J'ai dans mon code HTML un formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <form method="POST" action="musique.php"
              <p>
                     <input type="text" name ="recherche_auteur" value ="auteur" size="15" id="auteur"/>
                     <input type="submit" value="Recherchez" id="submit">
               <p/>
      </form>
    J'ai fait en PHP ceci :

    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
     
    <?php
     
         try
            {
    	       $bdd = new PDO('mysql:host=localhost;dbname=autrement;charset=utf8', 'root', 'nl37071559');
            }
        catch (Exception $e)
            {
                die('Erreur : ' . $e->getMessage());
            }                
     
    $reponse = $bdd->query('SELECT lien, titre FROM musique');
     
    while ($donnees = $reponse->fetch())
    {
    ?>    
            <div id = "frame">     
            <iframe <?php echo $donnees['lien'] ?>></iframe>;
            <?php echo $donnees['titre']; ?>;
            </div>  
    <?php
    } 
     
    $reponse->closeCursor();
     
    ?>
    Ce code PHP me donne effectivement des résultats, il m'affiche tous les liens et les titres de ma table musique (j'ai supprimé tout ce qu j'avais fait avant et fait ça pour avoir au moins un petit résultat et voir si au moins ma mise en page était bonne) mais ce que je n'arrive pas à faire c'est récupérer la valeur de mon input et qu'il ne m'affiche que les résultat de l'auteur recherché. J'ai essayé plein de choses mais je me heurte à des erreurs et je commence à tourner en rond du coup un petit coup de pouce serait vraiment très gentils parce que la je bloque et du coup je n'avance plus.


    PS : je n'ai pas fait attention aux règles sécurité qui vont avec le formulaire volontairement, j'essaye de régler un problème à la fois

    Meci d'avance pour 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
    Points : 44 155
    Points
    44 155
    Par défaut
    Étant donné que tu n'as pas du tout traité le formulaire, il n'y a pas de problème de sécurité

    Il faut mettre une condition WHERE dans ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $reponse = $bdd->prepare('SELECT lien, titre FROM musique WHERE auteur LIKE :recherche_auteur');
    $reponse ->execute(array(':recherche_auteur'=>$_POST['recherche_auteur']));
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Points : 103
    Points
    103
    Par défaut
    Merci beaucoup ça marche

    Mais serait il possible d'aller plus loin? (Je n'en ai pas besoin pour mon site c'est juste pour mon apprentissage; si vous estimez que c'est trop compliqué je comprendrais que vous me conseillez de continuer d'apprendre et de revenir plus tard)

    Si je comprend bien 'LIKE :recherche_auteur' signifie qu'on va rechercher la valeur de l'input recherche_auteur.
    Cette méthode à un désavantage, elle ne tient pas compte de l'erreur humaine même si je suis surpris de voir qu'elle ne prend pas en compte la casse.

    Je m'explique si j'ai rihanna comme auteur et que l'utilisateur marque rianna ça ne peut pas marcher, j'imagine donc que pour résoudre ce problème il faille passer l'input en variable et jouer avec les % mais la encore ça ne peut servir que si la recherche ce fait par mot clé.
    En réfléchissant un peu je me dis que c'est en faisant une condition qui dirait si il n'y a pas de résultat alors recherché les correspondance de lettre par exemple si le nombre de caractère de l'auteur est = à 5 alors si 4 lettres correspondent suggérer à l'utilisateur le bon résultat et afficher les résultats correspondant.

    Je vais tester de faire par moi même après tout faire des boucles sur des chaines de caractère semble dans mes cordes mais je ne pense pas y arriver, je pense que je vais me heurter à des complications comme la concordance des lettres et d'autre truc que je n'imagine pas encore.

    J'aimerais juste savoir si je vais dans la bonne direction et si non peut être m'orienter un peu ou si je dois carrément lâcher l'affaire et attendre d’être plus compétent

    Merci pour votre aide

  4. #4
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour les fautes, tu peux utiliser le "soundex" : c'est une transcription phonétique d'une chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $reponse = $bdd->prepare('SELECT lien, titre FROM musique WHERE auteur LIKE :recherche_auteur OR SOUNDEX(auteur) = SOUNDEX(:recherche_auteur_sndx)');
    $reponse ->execute(array(':recherche_auteur'=>$_POST['recherche_auteur'], ':recherche_auteur_sndx'=>$_POST['recherche_auteur']));
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Points : 103
    Points
    103
    Par défaut
    Merci beaucoup

    Bon j'ai réussi , j'ai fait d'une autre manière mais j'y suis arrivé. J'ai cependant 1 questions.

    Je n'ai pas compris le role de "PDO::FETCH_OBJ" à la ligne 51, j'ai regardé sur le net mais c'est pas clair du tout dans mon esprit?

    Pour ce qui est de tout ce qui concerne la recherche, remplacer le "&" par "et", la casse et les caracteres spéciaux je vais essayer de faire ça dans mon coin avec des cours, c'est comme ça qu'on apprend .

    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
     
     <?php
     
                $resultats = "";
     
                  if(isset($_POST['query']) && !empty($_POST['query']))
                  {
                      $query = preg_replace("#[^a-zA-Z ?0-9]#i", "",$_POST['query']);
     
                          $sql = "SELECT titre, lien FROM musique WHERE auteur LIKE ?";
     
     
                        // Connexion à la base de donnée
                      include("integration_php/bdd.php"); 
     
      51                    while($data = $req->fetch(PDO::FETCH_OBJ))
                            {
                            ?>    
                            <div id = "frame">     
                            <iframe <?php echo $data->lien ?>></iframe>
                            <?php echo $data->titre ?>
                            </div>  
                        <?php
                            }
     
                  } 
     
                   ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit moteur de recherche intra
    Par polow dans le forum Django
    Réponses: 2
    Dernier message: 26/09/2011, 21h40
  2. Réponses: 4
    Dernier message: 13/03/2008, 10h46
  3. Réponses: 7
    Dernier message: 16/02/2008, 14h10
  4. [MySQL] petit soucis avec moteur de recherche
    Par php4life dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 31/01/2007, 16h18
  5. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41

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