php/mysql rechercher chaque mots d'un tableau dans une base de donnée

Par Numerix 26, il y a 8 ans


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 surment saisi par l'utulistaeur .

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 , qui serait saisi par l'utulistaeur

16 réponses

Pierrot01, il y a 8 ans

salut,
tu veux faire une recherche que sur le champ Symptome ?
@plus

Pierre

Pierrot01, il y a 8 ans
<?php $resx = $bdd -> query($sql); // ressources sur les données $resx ->rowCount(); // nombre d'enregistrement extrait $while ($donnees = $resx->fetch()) { // l'affichage de tes données } ?>

@plus

Pierre

Numerix 26, il y a 8 ans

oui exactement

Pierrot01, il y a 8 ans

Salut,

$inputuser = "une phrase avec des mots et même encore plus"; $mots= explode(" ", $inputuser); $sql = "SELECT * FROM Titre WHERE Symptome REGEXP '"; $like =""; foreach ($mots as $value){ $like .= "$value|"; } $sql .= substr($like,0,-1)."'"; echo $sql;

test

@plus

Pierre

Pierrot01, il y a 8 ans

pour info, pour enlever la ponctuation, je t'ais donné la solution dans un autre topic.

@plus
Pierre

Numerix 26, il y a 8 ans

Bonjour le debut du code marche mais apres je n'arrive pas a afficher les information

if(isset($_POST['mot']) && $_POST['mot'] != NULL) // on vérifie d'abord l'existence du POST et aussi si la requete n'est pas vide. { ?> <script language="javascript"> alert('Le système amal vous renseignent .'); </script> <? try { $bdd = new PDO('mysql:host=localhost;dbname=base;charset=utf8', 'root', 'root');} catch (Exception $e ) { die('Erreur : ' .$e->getMessage()); } $mot = htmlspecialchars($_POST['mot']); $mot_clef= explode(",", $mot); $sql = "SELECT * FROM Titre WHERE Symptome REGEXP '"; $like =""; foreach ($mot_clef as $value){ $like .= "$value|"; } $sql .= substr($like,0,-1)."'"; $nb_resultats = $sql -> 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 = $sql->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 } $sql->closeCursor(); } ?>
Pierrot01, il y a 8 ans

$sql est une string ;)
si tu fais un rowCount sur une string, ça risque pas de fonctionner ;)

faut faire une trux du genre :
$bdd->query($sql)

@plus

Pierre

Numerix 26, il y a 8 ans

Mainetant c'est faitle rowcount est bon mais je n'est toujours pas le reste du code celui qui affiche les resultats avec le while

Pierrot01, il y a 8 ans

remontre moi la dernière version de ton code ?

Numerix 26, il y a 8 ans
if(isset($_POST['mot']) && $_POST['mot'] != NULL) // on vérifie d'abord l'existence du POST et aussi si la requete n'est pas vide. { ?> <script language="javascript"> alert('Le système amal vous renseignent .'); </script> <? try { $bdd = new PDO('mysql:host=localhost;dbname=base;charset=utf8', 'root', 'root'); } catch (Exception $e ) { die('Erreur : ' .$e->getMessage()); } $mot = htmlspecialchars($_POST['mot']); $mot_clef= explode(",", $mot); $sql = "SELECT * FROM Titre WHERE Symptome REGEXP '"; $like =""; foreach ($mot_clef as $value) { $like .= "$value|"; } $sql .= substr($like,0,-1)."'"; $nb_resultats = $bdd -> query($sql) -> 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 = $sql->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 } $bdd -> query($sql)->closeCursor(); } ?>
Numerix 26, il y a 8 ans

Le code ne marchait pas au debut au niveau du rowcount donc j'ai laisser le code de base et j'ai changer au niveau du while

$resx = $bdd -> query($sql); while ($donnees = $resx -> fetch()) { }

MERCI !!!! Beaucoup tu m'a bien aider sa fait 2 , 3 jours que j'essaie de regler ce problemes j'ai chercher partout

Numerix 26, il y a 8 ans

Mais mainetant un autres problemes se pose parceque :

En 1er) je voudrait que le code affiche les lignes dans ma base de données ou il y'a au minimum 2 de des mot_clefs inscris par l'utulisateur

Et ensuite ) les classe par ordre de pertinence c'est a dire si dans une ligne ou il y'a 3 mot_clefs inscris par l'utulisateur elle sera afficher avant celle ou il y'a seulement 2 mot_clefs

Pierrot01, il y a 8 ans

ton 1er problème est résolu ;)
met ce topic en résolu et ouvre un autre topic.

@plus
Pierre

Numerix 26, il y a 8 ans

Daccord merci

Numerix 26, il y a 8 ans

comment je le met en resolu

Pierrot01, il y a 8 ans

tu as un truc du genre ça images au niveau de chaque post.
tu cliques sur celui qui à répondu à ta question.
tu confirmes et c'est fini.

@plus

Pierre