Page 1 sur 1

Faire une Recherche en PHP

Posté : 15 avr. 2011, 15:22
par Sabrina tech
Slt tout le Monde
J'ai un code de recherche qui sert à chercher des livres venant d'une base de donnée suivant leur titre ou auteur, et ca marche mais mon problème est :
1- j'aimerai bien ne pas prendre en considération les majuscules et minuscules car le résultat s'affiche faux, c àd si j'écris le titre en minuscule le résultat n'affiche pas les titres en majuscules et inversement.

2- Ma recherche est multicritères càd elle dépend du titre ou de l'auteur saisi, mon problem c'est : si je rempli les 2 champs (titre et auteur) elle ne prends en considération que le premier (le titre) #-o , mais moi je dois avoir un résultat où les 2 conditions sont vrai (titre du livre qui contient le titre saisi et de l'auteur saisi).

Voici ce que j'ai fais comme code, veillez m'aider car j'arrive pas à trouver une solution.

include "connexion.php";


if (isset($_POST['titre']) and  isset($_POST['auteur']) )
{
  $titre=  ($_POST['titre']);
  $auteur=  ($_POST['auteur']);
  
if   (($titre == "")&&($auteur == "")) 
   {
       // Si aucun mot clé n'a été saisi,le script demande à l'utilisateur de bien vouloir préciser un mot clé
?>
	 
	 <script language="javascript"> 
        alert('Veuillez entrez un mot clé si vous voulez');
     </script>  
<?php 
   }

else 
   {

if ($titre != "")
		{
		    // On selectionne les enregistrements contenant le mot clé dans les Titre ou l'auteur
	              $query = "SELECT distinct count(Titre) FROM livres
	               WHERE ((Titre LIKE \"%$titre%\" )OR (Titre LIKE \"$titre\" )) ";
		
         	 $result = mysql_query($query);

                $row = mysql_fetch_row($result);

	         $Nombre = $row[0];

        
	         // Si aucun enregistrement n'est retourné, on affiche un message adéquat
    
	         if ($Nombre == "0") 
	          {
?>
	 	           <script language="javascript"> 
                     alert('Aucun résultat ne correspond à votre recherche');
                              </script>  
<?php 
               }

   // Sinon, on affiche le nombre d'enregistrements correspondant et les résultats eux-mêmes
            else 
              {
	             $query = "SELECT distinct Cote,Auteur,Titre FROM livres
	              WHERE (Titre LIKE \"%$titre%\")    
	              ORDER by titre ASC";
		
		          $result = mysql_query($query);

	      // Si un seul enregistrement est trouvé, on affiche un message au singulier
	            if ($Nombre == "1") 
	              {
?>
		            <div class="header_01">
      	              <P>  <?php  echo "<a name=\"#resultat\"><h2><p> &nbsp; </p>&nbsp; <p>Un résultat trouvé</P></h2></a>	<p>"; ?></P>
                    </div>
<?php 
	               }
		    // Dans le cas contraire le message est au pluriel...
               else 
	               {
?>
		            <div class="header_01">
		               <p>  <?php  echo "  <a name=\"#resultat\"><h2>Résultat: $Nombre résultats trouvés</h2></a>	<p>"; ?>  </p>
		            </div>
                      <p>
<?php 
	               }

           while($row = mysql_fetch_row($result))
	            {
		           echo "	<p>\n
		            <p align = justify><ul> <li><b>$row[2]</b></li></ul></p>   <p>&nbsp;</p>   \n
		            <p>\n
                    ";
	             }
        }

	}		


Jj'attends votre aide, Merci d'avance.

Re: Faire une Recherche en PHP

Posté : 15 avr. 2011, 15:39
par aokle
Salut.

J'ai voulu utiliser un formulaire de recherche via ta méthode fut un temps, puis je me suis dirigé vers une autre solution purement SQL :
http://dev.mysql.com/doc/refman/5.0/en/ ... earch.html

Le MATCH() AGAINST.

Il suffit d'avoir ta table déclarée en MyISAM et tes champs de recherches en FULL TEXT.

Les résultats sont bluffants.

En espérant t'avoir aidé.

Bonne continuation.

Re: Faire une Recherche en PHP

Posté : 15 avr. 2011, 15:43
par Sabrina tech
Merci pour ton aide, mais j'arrive pas à te comprendre
n'oubliant pas que je suis débutant et j'ai pas une bonne idée en PHP

Re: Faire une Recherche en PHP

Posté : 15 avr. 2011, 16:10
par macgawel
Bonjour.

Pour la proposition de aokle, fais une recherche sur mysql fulltext search, il y a de la lecture :wink:

Sinon, en restant sur ton idée de départ :
1. La solution la plus simple, si c'est possible, c'est de tout stocker en majuscule (ou en minuscule, au choix).
Il te suffira alors de passer le texte recherché en majuscule avec mb_strtoupper()

2. Logique..
Ta requête, c'est :
"SELECT distinct count(Titre) FROM livres WHERE ((Titre LIKE \"%$titre%\" )OR (Titre LIKE \"$titre\" )) ";
Sélectionne le nombre de Titre distincts vérifiant ( Titre ressemble à $titre OU titre ressemble à $titre)
Déjà, tu regardes deux fois Titre et tu ne tiens pas compte de Auteur, mais surtout tu veux ce qui vérifie les deux conditions => AND

3. (je sais il n'y a pas de 3 dans ta question)
Pas mal de petits trucs à corriger dans ton script :
- TOUJOURS sécuriser les données reçues par POST ou GET (au moins avec htmlentities()).
- TOUJOURS sécuriser les données envoyées dans une requête SQL (au moins avec mysql_real_escape_string()).
- Plutôt que de faire une requête pour compter et une pour récupérer les valeurs, tu peux te contenter de la deuxième et utiliser mysql_num_rows() pour connaître le nombre de résultats.
- dans le HTML généré, tu vas avoir
<a name=\"#resultat\"><h2><p> &nbsp; </p>&nbsp; <p>Un résultat trouvé</P></h2></a>
C'est mal.
Tu ne devrais pas mettre un élément "bloc" comme le titre h2 à l'intérieur d'un élément inline comme ton ancre a.
- Toujours dans le html généré, tu gères mal les listes.
Déjà parce que tu ne devrais pas les intégrer dans des paragraphes, et aussi parce que tu devrais déclarer une seule list ul avec plusieurs éléments li.

4. Si tu veux faire les choses bien, il faudra aussi gérer les accents (voire les fautes).
Par exemple si tu as le livre "l'Emile", il faudrait qu'une recherche sur "émile", "emille" ou "EmiLe" le donne en résultat...

Re: Faire une Recherche en PHP

Posté : 15 avr. 2011, 16:40
par Sabrina tech
Merci, vous avez presque dis tous ce que j'ai besoin de dire et de faire,
Bon je vais essayer de faire ca pour améliorer mon code et pour qu'il marche bien aussi et je vous informe.
J'espère que j'arrive.
A+

Re: Faire une Recherche en PHP

Posté : 15 avr. 2011, 17:06
par AB
Heu... elle sert à quoi l'extension "_ci" quand on choisi l'interclassement des champs dans la table de la bdd ?