[RESOLU] autocomplétion avec mot commençant par les lettres entrées / sans BDD

Eléphanteau du PHP | 11 Messages

10 mars 2021, 01:26

Bonjour à tous,

depuis quelques jours, je bloque sur un site que je crée en html/css et php sans BDD. Je n'ai pas connaissances en js/ajax bien que j'en ai besoin ici.
Pour m'aider, je me suis servie de https://blog.pascal-martin.fr/post/scri ... ynamiques/
Voilà mon problème :

dans mon menu, je voudrais faire une barre de recherche sur une liste de protéines que je mets dans un tableau ET que lorsque j'entre la première lettre, une liste d'auto suggestions de protéines apparaisse
index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  <head>
    <title>list of Proteins</title>
    <meta charset="utf-8" />
     <link rel="stylesheet" href="css/mystyle.css">      		
    	</head>
 
  <body>
    <header>
      <div class id="bandeau">
      <div class id="texteg">Proteins</font></div>
      <?php include('menu.php'); ?>
    </header>
     <script type="text/javascript">
    new Ajax.Autocompleter(
        "search",  
        "menu_auto",  
        "serveur-search.php", 
        {
            paramName: 'search',  
            minChars: 1   
        });
    </script>
       </body>
</html>
menu.php
<form name="search" method="get" action="search.php"><div class='menu'>
  <nav>
    <ul>
      <li><a href="index.php"><b>Home</b></a></li>
      <li><a href="p1.php"><b>Page1</b></a></li>
      <li><a href="p2.php"><b>Page2</b></a></li>
      <li><a href="p3.php"><b>Page3</b></a></li>
      <li><a href="p4.php"><b>Page2</b></a></li>
      <li></li>
      <li></li>
      <li><input type="text" name="search" id="search" placeholder="Search protein" style="width:102px;height:25px;">
      <div id='menu_auto' class='autocomplete'></div>
       
      <button>Search</button>
      <li><a href="p5.php"><b>p5</b></a></li>
    </ul>
  </nav>
</div>
</form>
serveur-search.php:
<?php
$dossier="Proteins";  
$new=array();
foreach (new DirectoryIterator($dossier) as $fileInfo) {
    if($fileInfo->isDot()) continue;
    $get_fn=$fileInfo->getFilename();
    list($filename, $extension) = explode(".", $get_fn);
    array_push($new,$filename);
}
    echo "<ul>\n";
    foreach ($new as $search)
    {
        if (stripos($search, $_POST['search']) 
        {
            echo "<li>$search</li>\n";
        }
    }
    echo "</ul>";
?>
Voilà il s'agit des 3 principales pages nécessaires à l'autocomplétion. Le css n'est pas important encore, j'attend déjà que ça fonctionne, mais l'autocomplétion ne marche pas. quelqu'un peut il m'aider? Y'a t'il un truc qui manque?

Mammouth du PHP | 2703 Messages

10 mars 2021, 12:44

il faut regarder dans la console si l'appel du fichier php se fait bien en POST, vu :
if (stripos($search, $_POST['search'])

Eléphanteau du PHP | 11 Messages

10 mars 2021, 15:42

quand je lance mon fichier php dans ma console, j'ai bien l'affichage de la liste de protéines.

en fait, j'ai mal copié une ligne du code du fichier php que j'ai :
C'est pas
        if (stripos($search, $_POST['search']) 
mais
        if (stripos($search, $_POST['search'])  == 0) 
C'était une faute de copie/colle de ma part désolée!
Est ce qu'il y aurait une faute dans la disposition de mes codes?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 mars 2021, 18:25

Salutations !

C'est peut être un oubli dans ce que tu nous présentes, mais dans le code de ton formulaire (index.php ou menu.php), on ne voit pas d'inclusion de la librairie javascript qui va te permettre de faire appel à Ajax.Autocompleter (tu dois dans ce cas avoir une erreur javascript au chargement de la page).

Il manque donc potentiellement les inclusions des librairies
<script src="javascripts/prototype.js" type="text/javascript"></script>
<script src="javascripts/scriptaculous.js" type="text/javascript"></script>
(en supposant que celles-ci soient bien présentes dans un dossier javascripts situé au même endroit que ta page index.php, à défaut il suffit de rectifier les chemins :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 11 Messages

10 mars 2021, 18:41

ah je n'avais pas ces librairies, je vais les chercher. Merci Ryle

Eléphanteau du PHP | 11 Messages

10 mars 2021, 19:03

Salutations !

C'est peut être un oubli dans ce que tu nous présentes, mais dans le code de ton formulaire (index.php ou menu.php), on ne voit pas d'inclusion de la librairie javascript qui va te permettre de faire appel à Ajax.Autocompleter (tu dois dans ce cas avoir une erreur javascript au chargement de la page).

Il manque donc potentiellement les inclusions des librairies
<script src="javascripts/prototype.js" type="text/javascript"></script>
<script src="javascripts/scriptaculous.js" type="text/javascript"></script>
(en supposant que celles-ci soient bien présentes dans un dossier javascripts situé au même endroit que ta page index.php, à défaut il suffit de rectifier les chemins :))
j'ai téléchargé ces 2 libraires et fait l'inclusion dans la page index, mais ça ne fonctionne toujours pas... Mais c'est bizarre car je n'ai jamais eu d'erreur javascript au chargement de ma page index.php comme tu dis...

Eléphanteau du PHP | 11 Messages

11 mars 2021, 19:17

G trouvé d’autres manières de faire en cherchant sur le net, mais ce qui m’a principalement aider, c’est l’intégration des librairies dont Ryle m’a parlé!

Mon code php était bon, sauf pour la ligne
  if (stripos($search, $_POST['search'])  == 0) 
Où il fallait écrire 3 = et non 2.
Merci!