Moteur de recherche dans BD

Moteur de recherche dans BD - PHP - Programmation

Marsh Posté le 07-06-2006 à 13:08:46    

Bonjour,
 
je suis en cours de création d'un outil de recherche dans une base access. En surfant sur le net j'ai trouvé des infos mais mon truc n'est pas encore génial pour l'instant. ça marche mais je suis obligé de taper les mots exacts. Par exemple,  si je veux chercher l'entrée maison en tapant "mai" ou "*son" ou "*iso* il ne me trouve rien. Je pense que c un truc a faire avec LIKE mais j'y arrive pas...
Comment peux t'on aussi faire une recherche avec des "and" et des "or" par exemple : "maison and papa" ?
 
ATTENTION ! je débute....mais pouvez vous critiquer mon code ci-dessous pour le simplifier et voir ce qui ne va pas ?
Merci d'avance

Code :
  1. <?php
  2. $search=$_POST['search'];
  3. include '../../include/connexion_base.php';
  4. $result = odbc_exec($cnx, "SELECT * FROM devis WHERE date_creation='$search' OR designation='$search' OR
  5. client='$search' OR filiale='$search' OR etude='$search'
  6. OR descriptif='$search' OR keyword1='$search' OR keyword2='$search' ORDER BY num_devis" );
  7. echo '<table border>';
  8. echo "<tr><td>DEVIS</td><td>DATE</td><td>DESIGNATION</td><td>CLIENT</td><td>FILIALE</td><td>ETUDE
  9. </td><td>DESCRIPTIF</td></tr>";
  10. while ($donnees = odbc_fetch_array($result) )
  11. {
  12. echo "<tr>";
  13. echo "<td>".$donnees['num_devis']."</td>";
  14. echo "<td>".$donnees['date_creation']."</td>";
  15. echo "<td>".$donnees['designation']."</td>";
  16. echo "<td>".$donnees['client']."</td>";
  17. echo "<td>".$donnees['filiale']."</td>";
  18. echo "<td>".$donnees['etude']."</td>";
  19. echo "<td>".$donnees['descriptif']."</td>";
  20. echo "</tr>";
  21.   }
  22. odbc_close($cnx);
  23. ?>

Reply

Marsh Posté le 07-06-2006 à 13:08:46   

Reply

Marsh Posté le 07-06-2006 à 13:11:41    

ah oui au fait....mon champ "num_devis" est en auto_increment. comment je peux faire pour faire une recherche dessus ? apparemment mon code ne passe pas quand je le rajoute au WHERE (num_devis='$search' OR...)

Reply

Marsh Posté le 07-06-2006 à 13:16:48    

utilise plutot match against que des likes dans tous les sens ( surtout que la pattern est la même sur toutes les colonnes):
http://dev.mysql.com/doc/refman/5. [...] earch.html
 
Quand a ton num_devis, cela doit être un entier vu qu'il est en auto-increment, donc tu n'as pas besoin des quotes autour de search.
 
Un truc encore tu dois echapper les caractères particuliers qui sont dans ton $search.
 

Reply

Marsh Posté le 07-06-2006 à 13:36:38    

Merci pour les infos, je modifie ça tout de suite !!
ça te semble pas trop délirant comme truc ?
 
Sinon, j'affiche mon fichier de traitement sur le bas de mon formulaire mais du coup à l'affichage de la page j'ai ça : Notice: Undefined index: search in formulaire_search_devis.php on line 48 (à savoir $search=$_POST['search'];)

Reply

Marsh Posté le 07-06-2006 à 13:42:25    

anapajari a écrit :


Un truc encore tu dois echapper les caractères particuliers qui sont dans ton $search.


Qu'est ce que tu entends par là ?

Reply

Marsh Posté le 08-06-2006 à 09:05:12    

le MATCH AGAINST, bah j'arrive pas a le faire fonctionner. idem pour ma valeur en auto_increment , que ce soit avec LIKE avec quotes ou sans. Du coup je fais avec ce code qui marche bof-bof (pas de recherche du style * + ):

Code :
  1. <?php
  2. include '../../include/connexion_base.php';
  3. $search=$_POST['search'];
  4. $result = odbc_exec($cnx, "SELECT * FROM devis WHERE date_creation='$search' OR designation='$search'
  5. OR client='$search' OR filiale='$search' OR etude='$search'
  6. OR descriptif='$search' OR keyword1='$search' OR keyword2='$search' " );
  7. //$result = odbc_exec($cnx, "SELECT * FROM devis WHERE  
  8. 'MATCH(date_creation,designation,client,filiale,etude,descriptif,keyword1,keyword2)
  9. AGAINST ($search)'" );
  10. echo '<table border>';
  11. echo "<tr><td><strong>DEVIS</strong></td><td><strong>DATE</strong></td><td><strong>DESIGNATION</strong></td>
  12. <td><strong>CLIENT</strong></td><td><strong>FILIALE</strong></td><td><strong>ETUDE</strong></td>
  13. <td><strong>DESCRIPTIF</strong></td></tr>";
  14. while ($donnees = odbc_fetch_array($result) )
  15. {
  16. echo "<tr>";
  17. echo "<td>".$donnees['num_devis']."</td>";
  18. echo "<td>".$donnees['date_creation']."</td>";
  19. echo "<td>".$donnees['designation']."</td>";
  20. echo "<td>".$donnees['client']."</td>";
  21. echo "<td>".$donnees['filiale']."</td>";
  22. echo "<td>".$donnees['etude']."</td>";
  23. echo "<td>".$donnees['descriptif']."</td>";
  24. echo "</tr>";
  25.   }
  26. odbc_close($cnx);
  27. ?>


Message édité par snp le 08-06-2006 à 09:07:54
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed