Bonjour,

Voila je rencontre un petit problème avec mon code.
Bonjour

Mon problèmes c'est de permettre a mon moteur de recherche de découper la phrase saisi par l'utilisateur comportant des espaces et des ponctuation qui seront logiquement supprimée et puis de stocker tout les mot clef dans une variable , j'ai essayer d'utiliser explode() mais sa ne marche pas


<?

$saisi= htmlspecialchars($_POST['mot']);

$mot_clef = explode(" ", $saisi);
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=base;charset=utf8', 'pi', 'it');}

catch (Exception $e )

{

    die('Erreur : ' .$e->getMessage());
}

$reponse = $bdd->query("SELECT * FROM Titre WHERE Symptome LIKE '%$mot_clef%' OR Definition LIKE '%$mot_clef%' OR titre LIKE '%$mot_clef%' ORDER BY id ASC");

$nb_resultats = $reponse -> rowCount();
if ($nb_resultats > 0)
{

echo (" $nb_resultats resultat(s)" ) ;

}
else
{
?>
    <br/><strong><?echo ("Desoler nous n'avons pas trouver , Veuillez verifier votre saisi."); ?> <br/> <? echo (" Cela n'exclu pas l'importane de consulter un specialiste  ");}?> </strong>

    <?

while ($donnees = $reponse->fetch())
{

?>
<p>

<strong> <? echo $donnees['id']; ?> </strong><?php echo $donnees['titre']; ?> <br/>

 <form method="post" action="<?php echo $donnees['titre']?>.php">

  <input type="submit" name="ouvrir" value=" Voir  " >
  </form>
   <br/>
<?php

}

$reponse->closeCursor();

}
?>

13 réponses


Bonjour,
Peux-tu nous donner un exemple de phrase saisi par l'utilisateur et le résultat que tu souhaites. ?

oui ! biensure

Par exemple l'utulisateur saisi :

Voiture , maison , economie Ou Voiture maison economie ( Vous aurez remarquait que la difference se trouve au niveau de la ponctuation)

Le resultat:

Mon code va enlever les espace et la ponctuation puis transmettre dans une variable mes 3 mots qui seront recherche separement dans ma base de donnée et afficher les informations de la ligne dans laquel ils se trouvent

ton explode peut fonctionner a condition que le formage de ta chaîne arrive au même point.
Pour te cela tu peux dicter la façon de faire à tes ulisateurs.
Ensuite, tu enlèves la ponctuation, et tu t'assures d'avoir un séparateur comment entre chaque mot.
Enfin tu explode par ton séparateur.

Je ne comprend pas , vous pouvez me resumer le code s'il vous plait

Pour que tu puisses faire un "explode" de ta chaine, il te faut arriver à faire "voiture maison economie". En l'occurrence avec cet exemple, ce sont les espaces qui font office de séparateur.
Donc pour arriver à cela, il te faut éliminer la ponctuaction, les accents (ou pas, car je ne sais comment tu gères la comparaison après), les doubles espaces....

Bon vous avez l'air de ne pas comprendre le but final mon problèmes est de séparer la phrase inscrite par l'utilisateur en mot clef de les mèttres dans une variables et d'en faire la recherche sur ma base de donnés a l'aide de LIKE '%$ma_variable%' , biensure les separer en mot clef implique d'enlever les ponctuation , espace

Vous aurez un bout de code a me proposer pour sa ?

Salut,

        $array= explode(" ", str_replace(array(".", ",",":",";","%","?"), '',"je suis le plus beau, êtes vous d'accord ?"));

après, tu boucle sur ton tableau et tu créé une requète union ;)
@plus
Pierre

Je boucle mon tableau c'est a dire ??

le tableau $array bien sûr

je peut avoir un exemple pour que sa soit plus clair ??

j'ai un formulaire je veux récupérer les informations de celui ci dans un tableaux ensuite faire une recherche de ces informations dans ma base de donnée

​
$mot = htmlspecialchars($_POST['mot']);
$mot_clef = explode(" ", $mot);
try
{
$bdd = new PDO('mysql:host=localhost;dbname=base;charset=utf8', 'root', 'root');}
catch (Exception $e )
{
die('Erreur : ' .$e->getMessage());
}
$reponse = $bdd->query("SELECT * FROM Titre WHERE Symptome LIKE '%$mot_clef%'  ORDER BY id ASC");

voici mon script mais il ne marche pas

Même si il faut changer le code , il faudrait que je puisse récupérer la phrase inscrite par l'utilisateur et que je fasse une recherche de chaque mot qu'elle contient dans ma base de donner et ensuite j'afficherait les résultats pour les afficher j'utilise le code suivant :

<strong> <? echo $donnees['id']; ?> </strong><?php echo $donnees['titre']; ?> <br/>

Par la suite apres avoir régler ce problème je trouverait un moyen d'enlever les virgules qui seront sans doute inscrite par l'utulisteur.

Mais ce qui serait encore mieux ce serait de pouvoir faire une recherche dans ma base de donnée des mots séparer par une virgule saisi par l'utulistaeur

Salut a tous ! Pour simplifier un problème de ce type tu peut utiliser un système de Lexem comme via l'outil ANTLR :)

Pour rechercher des mot-clés, tu peux essayer d'inverser les 2 termes du LIKE
c-a-d rechercher 'mot-clé' dans 'symptome' et pas 'symptome' dans 'mot-clé'
l'idée c'est de rechercher des mots entiers, donc on encadre le mot-clé par des espaces

$symptome = " " . "voiture maison economie" . " "; // on encadre par des espaces
// soit une table MOTS (ID, MOTCLE) qui contient des mot-clés
$reponse = $bdd->query("SELECT * FROM MOTS WHERE '$symptome' LIKE CONCAT('% ', MOTCLE, ' %')  ORDER BY ID ASC");