Affichage $data qui contient un &

Par iluzzion, il y a 14 ans


Bonjour à tous,

Voila sur un site j'ai mis en place une sorte de "moteur" de recherche avec auto complétion, lorsque l'utilisateur tape une lettre dans le champ de recherche, je cherche dans ma base les mots commencent par cet lettres etc etc..

Mon système marche nickel, sauf que je viens de m’apercevoir, que ça ne marche pas pour les mots stockés dans ma base contenant un &.

Mes requêtes sont bonnes, car les mots ne contenant pas se caractère sont bien affichés dans ma liste déroulante de résultats ainsi que leurs définition.
Mais lorsque je sélectionne un mot avec un &, ça définition ne s'affiche pas.

Pour affiché la définition d'un mot, lors du clic sur le LI je passe par un GET pour récupérer le mot et ensuite avec une requête je récupère se GET que je stock dans une variable:

if (!empty($_GET'terme'])) {
$terme = strip_tags($_GET'terme']);

Et après ça je fait une requête préparé pour sélectionné la définition en testant cet variable..
Et ça marche pour tout sauf avec ce fameux &.

Voili voilou mon petit soucie, si quelqu'un peut m'aider merci d'avance et bonne journée :).

8 réponses

bhamzapro, il y a 14 ans

le problème est que & signifie un autre paramètre

avant d'appeler la page qui fait la recherche tu change le caractère & dans le terme par un autre par exemple par @@@ et après le strip_tags tu remplace @@@ par &

iluzzion, il y a 14 ans

Le & est interprété dans ma requête comme un AND c'est sa ?

bhamzapro, il y a 14 ans

Oui c'est sa

PaulB319, il y a 14 ans

Tu peux essayer un truc comme :

<?php $content = str_replace('&', '&', $content); ?>
iluzzion, il y a 14 ans

J'ai essayé $content = str_replace('&', '&', $content); et aussi strtr mais c'est toujours pareil

gamichan, il y a 14 ans

ton code complet stp

iluzzion, il y a 14 ans

Voila mon code

<div class="Def">
                <?php
                if (!empty($_GET'terme'])) {
                    $terme = strip_tags($_GET'terme']);

                    ?>

                    <?php

                    if ($_SESSION'langue'] == "fr_FR") {
                        $req = $bdd->prepare('SELECT * FROM glossaire WHERE mot_Fr=:terme');
                        $req->execute(array(':terme' => $terme));
                    } else if ($_SESSION'langue'] == "en_US") {

                        $req = $bdd->prepare('SELECT * FROM glossaire WHERE mot_En=:terme');
                        $req->execute(array(':terme' => $terme));
                    }
                    while ($data = $req->fetch(PDO::FETCH_OBJ)):
                        ?>
                        <h2 id="glossaireD"> 
                    <?php
                if ($_SESSION'langue'] == "fr_FR") {
                    echo $data->mot_Fr;
                } else if ($_SESSION'langue'] == "en_US") {
                    echo $data->mot_En;
                }
                        ?></h2>
                        <p><?php
                    if ($_SESSION'langue'] == "fr_FR") {
                        echo $data->def_Fr;
                    } else if ($_SESSION'langue'] == "en_US") {
                        echo $data->def_En;
                    }
                        ?>
                           </p>
                        <?php
                    endwhile;
                    $req->closeCursor();
                    ?>
                    <?php
                } else {

                }
                ?>

            </div>

Après derrière ça j'ai de l'ajax.

LesTutossUE4, il y a 14 ans

Sinon tu peux toujours :
Supprimer les "&" dans ta base(mettre @@@ a la place par exemple)
Remplacer & par @@@ dans ton $content

<?php $content = str_replace('&', '@@@', $content); ?>