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


Numerix 26
Auteur
Réponse acceptée

comment je le met en resolu

Pierrot01
Réponse acceptée

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

@plus

Pierre

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

Pierre

oui exactement

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

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

@plus
Pierre

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(); 

} 
?>

$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

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

remontre moi la dernière version de ton code ?


 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(); 

         } 
?>
<?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

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

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

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

@plus
Pierre

Daccord merci