Partage
  • Partager sur Facebook
  • Partager sur Twitter

Barre de recherche interne

    16 juillet 2019 à 13:28:15

    Bonjour, 

    Pour commencer, merci d'avoir pris le temps de lire mon souci..

    Celui-ci, étant, que je n'arrive pas à intégrer une barre de recherche à mon site..

    Voici mon code : 

    <!DOCTYPE html>
    <html>
        <?php
            $srv="serveur_bdd1_bdd2";
    		$user="user";
    		$pwd="pass";
            $pdo = null;
        ?>
        <head>
            <meta charset="utf-8"/>
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
            <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
            <link href='http://fonts.googleapis.com/css?family=Holtwood+One+SC' rel='stylesheet' type='text/css'>
            <link rel="stylesheet" href="styles.css">
            <link href="https://fonts.googleapis.com/css?family=Slabo+27px&display=swap" rel="stylesheet">
            <title>Suivi des tarifs</title>
        </head>
        <body>
            <form>
                <input type="text" name="search" id="search"/>
                <input type="submit" class="btn"/>
            </form>
            <?php
            $search = htmlspecialchars($_GET['search']);
            $pdo = new PDO("dblib:host=$srv","$user","$pwd");
            
            
            //Requetes SQL
            $query = "SELECT * FROM bdd2.tarif WHERE reference_article LIKE :s OR description LIKE :s";
            $s = "%" . $search . "%";
            
            $req = $pdo->prepare($query);
            $req->execute(["s" => $s]);
            
            //Faire un fetchAll() est plus performant pour un système de recherche
            $results = $req->fetchAll();
            
            foreach($results as $result)
            { 
                echo $result['AR_Ref'];
            }
            ?>
            <div class="container aspect">
                <table>
            <?php
            try //Connexion à la base de données
            {
            $pdo = new PDO ("dblib:host=$srv","$user","$pwd");
    	    $pdo->exec("set names utf8");
    	    } 
            catch (PDOException $e) 
            {
    		echo "Failed to get DB handle: " . $e->getMessage() . "\n";
    		exit;
    	    }
            $reponse = $pdo->query('SELECT f.detail, f.code_famille, a.reference_article, a.description, a.prix_article, a.sommeil, m.reference_maison, m.prix_maison, t.un, t.deux, t.date, ((t.deux - t.un) / (t.un * 100)) AS pourcentage_tarif, (a.prix_article + (a.prix_article * ((t.deux - t.un) / (t.un * 100)))) AS prix_estime, ((a.prix_article - t.deux) / t.deux * 100) AS marge_estimee FROM bdd1.article AS a INNER JOIN bdd1.famille as f ON f.code_famille = a.code_famille INNER JOIN bdd1.maison AS m ON m.reference_article = a.reference_article INNER JOIN bdd2.tarif AS t ON t.reference_article = a.reference_article  WHERE a.sommeil = 0 ORDER BY a.reference_article');
            echo '<center><div class="liste"><table>';
            echo '<tr>';
            echo '<th class="thliste">Detail famille</th>';
            echo '<th class="thliste">Code famille</th>';
            echo '<th class="thliste">Référence maison</th>';
            echo '<th class="thliste">Référence article</th>';
            echo '<th class="thliste">Description article</th>';
            echo '<th class="thliste">Tarif Un</th>';
            echo '<th class="thliste">Tarif Deux</th>';
            echo '<th class="thliste">Pourcentage tarif</th>';
            echo '<th class="thliste">Date</th>';
            echo '<th class="thliste">Prix estime</th>';
            echo '<th class="thliste">Marge estimee</th>';
            echo '<th class="thliste">Prix reel</th>'; // Reprendre le prix estime et le rendre modifiable dans un champ
            echo '<th class="thliste">Pourcentage réel</th>'; // Reprendre le pourcentage tarif et le rendre modifiable dans un champ
            echo '<th class="thliste">Marge réelle</th>'; // Reprendre la marge estimee et la rendre modifiable dans un champ
            echo '</tr>';
            while($donnees = $reponse->fetch()) //Renvoie les valeurs de la BDD
            {
                echo '<tr>';
                echo '<td class="tdliste">' . $donnees['detail'] . '</td>';
                echo '<td class="tdliste">' . $donnees['code_famille'] . '</td>';
                echo '<td class="tdliste">' . $donnees['reference_maison'] . '</td>';
                echo '<td class="tdliste">' . $donnees['reference_article'] . '</td>';
                echo '<td class="tdliste">' . $donnees['description'] . '</td>';
                echo '<td class="tdliste">' . $donnees['un'] . '</td>';
                echo '<td class="tdliste">' . $donnees['deux'] . '</td>';
                echo '<td class="tdliste">' . $donnees['pourcentage_tarif'] . '</td>';
                echo '<td class="tdliste">' . $donnees['date'] . '</td>';
                echo '<td class="tdliste">' . $donnees['prix_estime'] . '</td>';
                echo '<td class="tdliste">' . $donnees['marge_estimee'] . '</td>';
                echo '<td class="tdliste"> Calcul </td>'; //Champ modifiable à appliquer
                echo '<td class="tdliste"> Calcul </td>'; //Champ modifiable à appliquer
                echo '<td class="tdliste"> Calcul </td>'; //Champ modifiable à appliquer
                echo '<tr>';
            }
            $pdo = null;
            ?>
                </table>
            </div>
        </body>
    </html>

     J'ai suivi un tuto pour créer cette barre de recherche et remplacé avec mes informations et je ne comprends pas pourquoi ça ne fonctionne pas..

    Je souhaiterai faire une recherche sur n'importe quel champ.. une recherche en 'contient' et pas 'commence par' ou 'fini par'.

    Il n'y a pas d'erreur mais la requête ne fonctionne pas..

    (Je pense également que mon code n'est pas optimisé, si vous avez des conseils je suis preneuse ; étant étudiante je souhaite progresser un maximum)

    Merci d'avance :) 

    -
    Edité par PtitOursTutTut 16 juillet 2019 à 14:06:26

    • Partager sur Facebook
    • Partager sur Twitter

    Etudiante en BTS SIO option SLAM

      16 juillet 2019 à 13:40:19

      Bonjour.

      Comment veux-tu que ta requête SQL fonctionne, si la connexion à la base de données elle-même est incorrecte ?

      Dans l'initialisation de PDO pour la connexion à la base de données (ligne 27), tu utilises des variables qui ne sont pas définies.

      • Partager sur Facebook
      • Partager sur Twitter

      Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

        16 juillet 2019 à 13:52:21

        Bonjour, 

        Je m'excuse ; lors de la retranscription (en changeant le nom des variables pour le forum...), j'ai oublié de modifier celles-ci.. Je viens de corriger.

        • Partager sur Facebook
        • Partager sur Twitter

        Etudiante en BTS SIO option SLAM

          16 juillet 2019 à 13:54:14

          Bonjour,

          @Lartak te montre le souci majeur.

          Et ligne 54, tu redéfinis ta variable $pdo, qui elle, semble initialisé avec les bons paramètres.

          • Partager sur Facebook
          • Partager sur Twitter
            16 juillet 2019 à 14:03:17

            Ligne 31, tu utilises une Constante qui n'est pas compatible avec le driver de base de données que tu utilises, les constantes commençant par MYSQL, ne peuvent être utilisées que lorsque le driver utilisé est mysql, ce qui n'est visiblement pas ton cas.
            • Partager sur Facebook
            • Partager sur Twitter

            Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

              16 juillet 2019 à 14:08:00

              Lartak a écrit:

              Ligne 31, tu utilises une Constante qui n'est pas compatible avec le driver de base de données que tu utilises, les constantes commençant par MYSQL, ne peuvent être utilisées que lorsque le driver utilisé est mysql, ce qui n'est visiblement pas ton cas.


              D'accord merci, j'ai enlever ceci..

              Néanmoins je n'ai toujours pas le résultat de ce que je cherche et toujours pas de message d'erreur.. :/ 

              -
              Edité par PtitOursTutTut 16 juillet 2019 à 14:08:15

              • Partager sur Facebook
              • Partager sur Twitter

              Etudiante en BTS SIO option SLAM

                16 juillet 2019 à 14:20:07

                Est-ce que tu as bien activé l'affichage des erreurs de PHP ?

                Par contre, tu devrais entourer le code pour la recherche dans une condition, car actuellement tu fais une requête SQL qu'une recherche ait été demandée ou non et ton code devrait avoir des erreurs lorsque la page est chargé sans le paramètre search dans l'url, d'où je pense le fait que tu n'as pas affiché les erreurs de PHP, car tu devrais normalement avoir une erreur du genre :

                Undefined index search in line 26 ...

                • Partager sur Facebook
                • Partager sur Twitter

                Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                  16 juillet 2019 à 14:36:14

                  Les erreurs PHP sont effectivement bien activées mais en l’occurrence (et je ne comprends pas pourquoi), celle-ci n'en renvoie pas.

                  Entendu pour la condition.

                  Pour le paramètre search, je ne vois pas vraiment où est le souci.

                  (Je m'excuse si mes questions sont bêtes)

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Etudiante en BTS SIO option SLAM

                    16 juillet 2019 à 15:06:02

                    ligne 25-26 :

                            <?php
                            $search = htmlspecialchars($_GET['search']);

                    $_GET['search'] : récupération d'une valeur passée dans l'url.

                    Quand tu vas sur ta page avec ton navigateur internet, tu dois avoir une url du style : http://tonUrl/repertoire?search=lavaleurdecequeturecherches

                    As-tu fait cela ?

                    Qu'affiche vraiment ton navigateur ? (à l'écran, et aussi quand tu fais clic droit sur la page, puis "afficher le code source")

                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 juillet 2019 à 15:18:28

                      PtitOursTutTut a écrit:

                      Pour le paramètre search, je ne vois pas vraiment où est le souci.

                      (Je m'excuse si mes questions sont bêtes)

                      Tant que l'utilisateur n'a pas fait de recherche, le paramètre search n'existe pas dans l'url, d'où le problème que peut poser le fait de ne pas en faire la vérification de son existence et de sa valeur avant de vouloir faire un traitement avec.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                        17 juillet 2019 à 8:01:05

                        Bonjour, 

                        Alors effectivement j'ai un message d'erreur du coup (j'avais oublié de reset ma page de base, sans le ?search=, donc forcément il n'apparaissait pas o_O) .. 

                        Voici le message : Notice: Undefined index: search in /var/www/mon_site/test/index.php on line 26.

                        Du coup, il faut que je mette un 'if' pour savoir si l'utilisateur a fait une recherche ou pas ? 

                        EDIT : 

                        Bon alors j'ai testé ça : 

                        <?php
                        if(isset($_GET['search']) AND !empty($_GET['search']))
                        {
                                $search = htmlspecialchars($_GET['search']);
                                $pdo = new PDO("dblib:host=$srv","$user","$pwd");
                                 
                                 
                                //Requetes SQL
                                $query = "SELECT * FROM bdd2.tarif WHERE reference_article LIKE :s OR description LIKE :s";
                                $s = "%" . $search . "%";
                                 
                                $req = $pdo->prepare($query);
                                $req->execute(["s" => $s]);
                                 
                                //Faire un fetchAll() est plus performant pour un système de recherche
                                $results = $req->fetchAll();
                                 
                                foreach($results as $result)
                                {
                                    echo $result['AR_Ref'];
                                }
                        }
                                ?>

                        Donc je n'ai plus le message d'erreur, par contre ma recherche ne fonctionne toujours pas.

                        -
                        Edité par PtitOursTutTut 17 juillet 2019 à 9:49:59

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Etudiante en BTS SIO option SLAM

                          18 juillet 2019 à 13:00:42

                          Bonjour,

                          Je n'ai pas eu de réponse à ma question et n'est toujours pas la solution .. :/

                          Si quelqu'un pourrait m'aider.

                          Merci d'avance

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Etudiante en BTS SIO option SLAM

                            18 juillet 2019 à 13:18:37

                            Hello,

                            Essai comme ceci 

                            $sql = "SELECT * FROM bdd2.tarif WHERE reference_article like ? OR description like ? ";
                            $q = $conn->prepare($sql);
                            $q->execute(array('%'.$search.'%', '%'.$search.'%'));



                            -
                            Edité par Kévin Brissez 18 juillet 2019 à 13:20:46

                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 juillet 2019 à 13:19:41

                              Quelle est ta question ?

                              De plus comment peux-tu savoir si ça ne marche pas, c'est peut-être tout simplement qu'aucun enregistrement n'est trouvé.

                              Autre chose, supprimes cette utilisation de htmlspecialchars en ligne 4.

                              Kévin Brissez a écrit:

                              Hello,

                              Essai comme ceci 

                              $sql = "SELECT * FROM bdd2.tarif WHERE reference_article like ? OR description like ? ";
                              $q = $conn->prepare($sql);
                              $q->execute(array($search, $search));

                              Totalement inutile de lui faire remplacer les marqueurs par des flags, de plus que tu le fais se répéter en utilisant cette syntaxe.

                              -
                              Edité par Lartak 18 juillet 2019 à 13:22:26

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                19 juillet 2019 à 14:08:31

                                J'aimerais pouvoir récupérer les résultats de ma recherche..

                                Merci du conseil pour le htmlspecialchars

                                Je sais que cela ne marche pas car ce ne me renvoie pas les données que je demande, et je sais que ces données existent car j'ai la base de données sous les yeux.

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Etudiante en BTS SIO option SLAM

                                  19 juillet 2019 à 23:46:32

                                  Bonsoir,

                                  il manque ":" à "s" : "$req->execute([":s" => $s]);"

                                  Met les % direct dans la requête SQL (si çà ne fonctionne pas, laisse comme c'était pour voir).

                                  Peux-tu exécuter ce code et afficher le résultat obtenu ?

                                  <?php
                                  if(isset($_GET['search']) AND !empty($_GET['search']))
                                  {
                                          $search = htmlspecialchars($_GET['search']);
                                          $pdo = new PDO("dblib:host=$srv","$user","$pwd");
                                            
                                            
                                          //Requetes SQL
                                          $query = "SELECT * FROM bdd2.tarif WHERE reference_article LIKE %:s% OR description LIKE %:s%";
                                          $s = "" . $search . "";
                                            
                                          $req = $pdo->prepare($query);
                                          $req->execute([":s" => $s]);
                                            echo "Bon, on a bien notre paramètre GET 'search' fourni.<br>";
                                          //Faire un fetchAll() est plus performant pour un système de recherche
                                          var_dump($req->fetchAll());
                                  }



                                  -
                                  Edité par symfonydu80 19 juillet 2019 à 23:48:46

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    20 juillet 2019 à 1:20:19

                                    symfonydu80 a écrit:

                                    il manque ":" à "s" : "$req->execute([":s" => $s]);"

                                    Non, ce n'est pas obligatoire dans la méthode execute, ça ne l'est que dans la chaîne de requête.

                                    En plus de ça c'est faux ce que tu lui montre, les caractères % ne sont pas à mettre dans la chaîne de la requête.

                                    -
                                    Edité par Lartak 20 juillet 2019 à 1:22:59

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                      22 juillet 2019 à 11:04:01

                                      Bonjour également,

                                      c'est un peu pour çà que j'ai écrit :

                                      "(si çà ne fonctionne pas, laisse comme c'était pour voir)."

                                      -
                                      Edité par symfonydu80 22 juillet 2019 à 11:05:06

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Barre de recherche interne

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown