Aider moi svp moteur de recherche

Fermé
erzascarlett2016 - Modifié par jordane45 le 30/03/2016 à 18:11
 erzascarlett - 31 mars 2016 à 00:42
Bonjour, svp aider moi j'ai fais un moteur de recherche pour mon site web je travail avec wamp serveur la version sans probleme
mais mes requetes donne toutes le memes resultats veuillez entrer un mot clef je comprend je pense que tout est logique enfin en plus j'ai deja creer la base de donner la connexion a la base de donnee se passe bien aussi
aider moi s'il vous plait ca fait deux mois je suis sur ce projet
voici le code php de la page ou la recherche se fait
<?php
 if (isset($_POST['search']) && $POST['s'] !=NULL)

 {
  
 $host="localhost";
 $user="root";
 $pass="";
 $db="dark_side";
 mysql_connect($host,$user) or die ("erreur de connexion");
 
 mysql_select_db($db)  or die ("base de donnee introuvable");
 
        
        $requete = htmlspecialchars($_POST['s']);   
  
   $query=mysql_query("SELECT nom FROM animes WHERE  nom like '%$requete%' ORDER BY id DESC") or die(mysql_error());
   
         $nb_resultats= mysql_num_rows($query);
         

      if ($nb_resultats != 0)
    {
   
   <h3> resutats de votre recherche.</h3>
   <p>Nous avons trouver echo $nb_resultats;
   if ($nb_resultats > 1) {echo'resutats';} else {echo'resultat';}
  
   DANS NOTRE BASE DE DONNEE VOICI LES NOMS QUE NOUS AVONS TROUVEES: </br>
   </br>
   
   while ($donnees=mysql_fetch_array ($query))
   {
   
    <a href="recherche.php?id= <?echo $donnees['id']; ?>">
    echo $donnees[nom];
    </a></br>
      
   }
   </br>
   </br>
   
   <a href ="recherche.php"> FAIRE UNE NOUVELLE RECHERCHE </a></p>
   
    }
    
    
    else 
    {
     ?>
     <h3> Pas de resultats</h3>
     <p> Nous n'avons trouver aucun resultat pour votre requete "<? echo $_POST['s']; ?>" .<a href="recherche.php"> Reesayez </a> avec autre chose.</p>
     <?
    } 
    mysql_close();
          }

?>

==============fin de mon script=============

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
A voir également:

3 réponses

diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844
30 mars 2016 à 18:01
Bonjour,

Essayer avec Ceci plutôt comme requête:
$query=mysql_query("SELECT nom FROM animes WHERE nom like '%".$requete."%' ORDER BY id DESC") or die(mysql_error()); 


En mettant $requete dans les quote , PHP ne remplace pas la valeur par la valeur correspondante ( j'imagine que c'est ca)
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652
30 mars 2016 à 18:25
Juste pour info :

En mettant $requete dans les quote , PHP ne remplace pas la valeur par la valeur correspondante

Non car la chaine de caractère est, quand à elle, encapsulée dans des double-quotes. Donc aucun souci dès lors qu'il s'agit d'une variable 'simple' et pas un array.

echo "SELECT nom FROM animes WHERE nom like '%$requete%' ORDER BY id DESC";

Fonctionnera sans souci.

Alors que pour un array tu dois, en effet, faire de la concaténation:
"SELECT nom FROM animes WHERE nom like '%".$un_array[0]."%' ORDER BY id DESC"
0
erzascarlett
30 mars 2016 à 19:27
J'ai essayer ce que vous avez suggérer mais ça m'a afficher une erreur au niveau de cette ligne des que j'ai valider.ça passe pas
J'utilise la version wampserver 2.0
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652
Modifié par jordane45 le 30/03/2016 à 18:23
Bonjour,

1 - PS: Attention ... tu utilises l'ancienne extension Mysql (considérée comme obsolète ! )
Je t'invite fortement à passer à mysqli ou ( perso je préfère...) la PDO.

Je t'invite à lire ceci :
- https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete
- https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli

2 - Penses à récupérer proprement tes variables AVANT de les utiliser.
Pour se faire.. tu peux utiliser l'écriture ternaire et les focntions ISSET ou !EMPTY.

3 - Tu as oublié de fermer/ouvrir des balises PHP un peu partout dans ton code....


Bref.. voici ton code remis en forme et corrigé : (sans le passage à mysqli ou pdo.. ça je te laisse voir )


Commence par sortir le code de connexion de ta BDD en le mettant dans un fichier à part.
<?php
//fihcier de connexion à la bdd : "cnxBDD.php"  (que tu pourras changer en PDO ou mysqli)
 $host="localhost";
 $user="root";
 $pass="";
 $db="dark_side";
 mysql_connect($host,$user) or die ("erreur de connexion");
 mysql_select_db($db)  or die ("base de donnee introuvable");

?>

Puis dans ta page
<?php

//Connexion à la bdd
require_once "cnxBDD.php";

//récupération "propre" des variables
  $requete = !empty($_POST['s']) ? htmlspecialchars($_POST['s']) : NULL;
 $search = isset($_POST['search']) ? $_POST['search'] : NULL;

 if($requete && $search){
   $sql = "SELECT nom FROM animes WHERE  nom LIKE '%$requete%' ORDER BY id DESC";
   $query=mysql_query($sql) or die(mysql_error());
   $nb_resultats= mysql_num_rows($query);
   
  if ($nb_resultats != 0){
    
  echo "<h3> resutats de votre recherche.</h3>";
  echo "<p>Nous avons trouver ".$nb_resultats;   
  if ($nb_resultats > 1) {echo'resutats';} else {echo'resultat';}
  echo " DANS NOTRE BASE DE DONNEE VOICI LES NOMS QUE NOUS AVONS TROUVEES: </br></br> ";

    while ($donnees=mysql_fetch_array ($query)){
      echo   "<a href='recherche.php?id=".$donnees['id']."'>".$donnees[nom]."</a></br>";
    }
  echo "<br><br>";
    echo "<a href ='recherche.php'> FAIRE UNE NOUVELLE RECHERCHE </a></p>";
    } else {
       echo "<h3> Pas de resultats</h3>";
       echo "<p> Nous n'avons trouver aucun resultat pour votre requete ".$requete."<a href='recherche.php'> Reesayez </a> avec autre chose.</p>";
    } 
   mysql_close();
 }
?>



Cordialement, 
Jordane                                                                 
0
erzascarlett
30 mars 2016 à 19:25
Bonsoir merci beaucoup je viens de terminé de lire la documentation sur les FAQ dont vous avez donner les liens .j'ai aussi tester le code corriger mais cela ne marche pas aucune des requêtes ne marche peu importe ce que je entre comme recherche ça affiche seulement la page de recherche vide y'a rien svp aider moi
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652
30 mars 2016 à 21:03
As tu testé ta requête directement dans ta bdd .?
0
erzascarlett > jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024
30 mars 2016 à 21:07
Oui ça marche dans la base de donnée mais par contre au niveau du script c'est mort
J'ai essayer avec PDO POUR LA CONNEXION ET j'ai cliquer sur OK ça marche toujours pas j'ai aussi installé easyphp et désactiver wamp pour essayer mais c'est la même chose
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652 > erzascarlett
30 mars 2016 à 21:15
Montre ton code (en PDO)
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652 > jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024
30 mars 2016 à 21:16
Montre nous également ton formulaire html
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652
Modifié par jordane45 le 30/03/2016 à 21:25
Tiens ... essayes ça en PDO :

<?php
//fihcier de connexion à la bdd : "cnxBDD.php"  (que tu pourras changer en PDO ou mysqli)
 $host = "localhost";
 $dbname = "dark_side";
 $user = "root";
 $pwd = "";
  try {
      $bdd = new PDO("mysql:host=$host;dbname=$dbname", $user, $pwd);
  } catch (PDOException $e) {
      echo "<br>".$e."<br>";
      printf("%s:%d %s (%d) [%s]\n", $e->getFile(), $e->getLine(), $e->getMessage(), $e->getCode(), get_class($e));
      exit('Impossible de se connecter à la base de données.');
  }
?>


Puis dans ta page
<?php
//Connexion à la bdd
require_once "cnxBDD.php";

//-------------------------------------------------//
//------------ LE TEMPS DES TESTS -----------------//
echo "<br> Variables POST :<pre>";
print_r($_POST);
echo "<br>------------------</pre>";
//-------------------------------------------------//

//récupération "propre" des variables
 $requete = !empty($_POST['s']) ? $_POST['s'] : NULL;

 if($requete){ 
  //on prépare la requête et les variables
  $sql = "SELECT nom FROM animes WHERE  nom LIKE :requete ORDER BY id DESC";
   $a_datas = array(':requete' =>'%'.$requete.'%');
  
  //execution de la requete
  try{
    $prepare = $bdd->prepare($sql);   
     $prepare->execute($a_datas);
   //on stocke le résultat dans un array
   $result = $prepare->fetchAll();
   $nb_resultats = count($result);
 }catch(Exception $e){
   //en cas de souci dans la requete
     echo "<br>Erreur ! ".$e->getMessage();
     echo "<br> Requete :".$sql;   
 }
   
  if ($nb_resultats>0){
    
  echo "<h3> resutats de votre recherche.</h3>";
  echo "<p>Nous avons trouver ".$nb_resultats;   
  if ($nb_resultats > 1) {echo'resutats';} else {echo'resultat';}
  echo " DANS NOTRE BASE DE DONNEE VOICI LES NOMS QUE NOUS AVONS TROUVEES: </br></br> ";

    foreach($result as $donnees){
      echo   "<a href='recherche.php?id=".$donnees['id']."'>".$donnees['nom']."</a></br>";
    }
  echo "<br><br>";
    echo "<a href ='recherche.php'> FAIRE UNE NOUVELLE RECHERCHE </a></p>";
    } else {
       echo "<h3> Pas de resultats</h3>";
       echo "<p> Nous n'avons trouver aucun resultat pour votre requete ".$requete."<a href='recherche.php'> Reesayez </a> avec autre chose.</p>";
    } 
 }
?>


Cordialement, 
Jordane                                                                 
0
voici le formulaire
<fieldset><legend>DARK SIDE</legend>
<div id="valentine">
        <table  align=center cellpadding= 5% cellspacing=5%  >
          <tr><td> <a href ="index.php">ACCUEIL</td>
              <td><a href ="animes.php"> MORE</td>
              <td><a href="http://www.lovemyanime.net"> SCANS  </td>
              <td><a href ="formulaire.php"> FORUM  </td>
              <td> </br><form action="recherche.php" method="POST">
     <span>SEARCH <input type="text"  name="s" id="s" ></span>
     <input type="submit" value="ok" name="search" id="search"</form>
     </td></tr></table> 
</div>
</fieldset> 



le code php que vous venez d'envoyer marche a la seule exception que lorsqu'il fait la recheche la seule action executer est qu'il ne touve pas le mot dans la base de donne pourtant quand je lance la meme requete dans la base de donnee le resultat affiche ce que j'ai demander

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652 > erzascarlett
30 mars 2016 à 22:43
1 - **** Attention ****
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

.2 - Peux tu essayer ceci :
//on prépare la requête et les variables
  $sql = "SELECT nom FROM animes WHERE  nom LIKE '%$requete%' ORDER BY id DESC";

  
  //execution de la requete
  try{
     $prepare = $bdd->prepare($sql);   
     $prepare->execute();
     //on stocke le résultat dans un array
     $result = $prepare->fetchAll();
     $nb_resultats = count($result);

    //le temps des tests :
    echo "<br>requête: <br>".$sql;
    echo "<br>resultat :<br>";
    print_r($result);
    echo "<br> nb : ".$nb_resultats;

 }catch(Exception $e){
   //en cas de souci dans la requete
     echo "<br>Erreur ! ".$e->getMessage();
     echo "<br> Requete :".$sql;   
 }
   


Et coller ici ce que ça donne ?
0
erzascarlett > jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024
30 mars 2016 à 23:46
Merci le résultat est correcte j'ai mis en commentaire les elements qui affichaient uniquement les tableaux.merci beaucoup

Svp comment pourrais je m'y prendre pour mettre un lien derrière chaque résultats

Au niveau de
Foreach ($result as $donnees) {
Écho "<a bref ='$donnees.php'>". $donnees['nom']."</a></p>

Ça affiche erreur
Array to string conversion
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652 > erzascarlett
30 mars 2016 à 23:57

OU SONT LES BALISES DE CODE ????

Merci de lire et d'appliquer ceci à l'avenir :
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Concernant ton souci de lien... c'est le $ en trop qui pose problème

Foreach ($result as $donnees) {
echo "<a bref ='donnees.php'>". $donnees['nom']."</a></p> ",

A moins que tu ne veuilles pointer vers un fichier composé du "nom" remonté par ta requête ...
Dans ce cas :
Foreach ($result as $donnees) {
echo "<a bref ='".$donnees['nom'].".php'>". $donnees['nom']."</a></p> ",


NB : echo ..ça s'écrit sans accent !
0
erzascarlett
31 mars 2016 à 00:38
merci beaucoup c'etais la deuxieme option c'est bien passer encore mille merci
mon probleme se situais au niveau de la recuperation des donnees
je vais mettre aux PDO apres avoir chercher les documents dessus

pouriez vous examinez ce code de mon formulaire svp

voici le formulaire
<?php include ("cnxBDD.php"); ?>
<!DOCTYPE html>

<html>
<head>
<meta charset ="utf -8" />
<link rel="stylesheet" type="text/css" href="lilicss.css">
<title> planet beatrice</title>
</head>
<body>

<?php include ("menu.inc.php");?>
<?php

$destinataire = '***@***';


$copie = 'oui';


$form_action = 'formulaire.php';


$message_envoye = "Votre message nous est bien parvenu !";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";


$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";


function Rec($text)
{
$text = htmlspecialchars(trim($text), ENT_QUOTES);
if (1 === get_magic_quotes_gpc())
{
$text = stripslashes($text);
}

$text = nl2br($text);
return $text;
};

function IsEmail($email)
{
$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);
return (($value === 0) || ($value === false)) ? false : true;
}


$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';


$email = (IsEmail($email)) ? $email : '';
$err_formulaire = false;

if (isset($_POST['envoi']))
{
if (($nom != '') && ($email != '') && ($message != ''))
{

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" .
'Reply-To:'.$email. "\r\n" .
'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" .
'Content-Disposition: inline'. "\r\n" .
'Content-Transfer-Encoding: 7bit'." \r\n" .
'X-Mailer:PHP/'.phpversion();


if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};


$message = str_replace("'","'",$message);
$message = str_replace("’","'",$message);
$message = str_replace(""",'"',$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = str_replace("<","<",$message);
$message = str_replace(">",">",$message);
$message = str_replace("&","&",$message);


if (mail($cible, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>';
}
else
{
echo '<p>'.$message_non_envoye.'</p>';
};
}
else
{

echo '<p>'.$message_formulaire_invalide.'</p>';
$err_formulaire = true;
};
};

if (($err_formulaire) || (!isset($_POST['envoi'])))
{

echo '

<form id="contact" method="post" action="'.$form_action.'">
<fieldset><legend>Personal</legend>
<label for="nom">Nom :</label><input type="text" id="nom" name="nom" value="'.stripslashes($nom).'" tabindex="1" />
<label for="email">Email :</label><input type="text" id="email" name="email" value="'.stripslashes($email).'" tabindex="2" />
</fieldset>
<fieldset><legend>Message</legend>
<label for="message">Message :</label><textarea id="message" name="message" tabindex="3" cols="165" rows="40">'.stripslashes($message).'</textarea>

<label><span> </span><input type="submit" value="submit" name="envoyer"></label>
</fieldset>
</form>
</body>
</html>';
};
?>
0