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 :).
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 &
J'ai essayé $content = str_replace('&', '&', $content); et aussi strtr mais c'est toujours pareil
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.
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); ?>