Page 1 sur 1

Script recherche fichiers

Posté : 23 févr. 2017, 15:18
par megamanx
Bonjour,
J'ai trouvé un script de recherche php sans base de données assez simple. Mais malheureusement, il ne trouve plus les fichiers quand on met un accent. J'ai essayé de remplacer les accents avec array, mais ça ne marche pas :

Code : Tout sélectionner

<?php ini_set('default_charset', 'iso8859-1'); $d = dir("./"); //Recherche nom de fichier dans ce dossier if(isset($_POST['submit']) AND !empty($_POST['mot'])){ $mot = trim($_POST['mot']); $str = $mot; $str = strtolower($str); $mot = $str; // Tout en minuscule $accent = array('é' => 'e', 'è' => 'e', 'ê' => 'e', 'à' => 'a', 'â' => 'a', 'ï' => 'i'); $mot = strtr($mot, $accent); // Remplacer les lettres avec accent while($entry = $d->read()) { preg_match("#($mot+?)#s", $entry, $new); $data = trim($new[1]); if (!empty($data)) echo 'R&eacute;sultat : <a href="'.$entry.'">'.$data.'</a><br><br>'; } $d->close(); } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <input type="text" name="mot"> <input type="submit" name="submit" value="Recherche"> </form>

Re: Script recherche fichiers

Posté : 23 févr. 2017, 15:28
par moogli
salut,

il faut voir quel est le charset du système et tenter de convertir la chaîne fournit dans le formulaire vers cet encodage.

sinon c'est une mauvaise idée d'utilisé des caractères "spéciaux" (en claire qui ne sont pas dans l'alphabet anglophone plus les chiffres et quelques caractères comme _-) s'il est possible il est préférable de les remplacer à la création du fichier.

@+

Re: Script recherche fichiers

Posté : 23 févr. 2017, 15:32
par megamanx
Mes fichiers n'ont pas d'accent. Ce sont les utilisateurs qui tapent parfois les accents dans la barre de recherche.
Ils ne trouveront donc pas mes fichiers dans ce cas là.

Re: Script recherche fichiers

Posté : 23 févr. 2017, 19:51
par megamanx
C'est bon, j'ai résolu le problème en mettant :

Code : Tout sélectionner

<?php ini_set('default_charset', 'iso8859-1'); ?>
en tout début de page et non en milieu de page.

J'ai un autre soucis avec ce script. Il continue la recherche tant qu'il reste encore de fichiers dans le repertoire. Est-il possible de stopper la recherche après 10 résultats ?

Re: Script recherche fichiers

Posté : 23 févr. 2017, 20:42
par @rthur
Bonjour,
J'ai un autre soucis avec ce script. Il continue la recherche tant qu'il reste encore de fichiers dans le repertoire. Est-il possible de stopper la recherche après 10 résultats ?
Oui c'est possible assez simplement.
Initialise une variable (par exemple $i) à 0 avant ta boucle while.
Dans ta boucle vérifie la valeur de $i si elle est supérieure à 10 tu sors de ta boucle avec break, sinon tu incrémentes $i de 1

Re: Script recherche fichiers

Posté : 23 févr. 2017, 21:48
par megamanx
Je n'arrive pas. Le script ne marche plus du tout :

Code : Tout sélectionner

<?php $compteur = 0; $d = dir("./"); //Recherche nom de fichier dans ce dossier if(isset($_POST['submit']) AND !empty($_POST['mot'])){ $mot = trim($_POST['mot']); $str = $mot; $str = strtolower($str); $mot = $str; $accent = array(' ' => '-', 'é' => 'e', 'è' => 'e', 'ê' => 'e', 'à' => 'a', 'â' => 'a', 'ï' => 'i'); $mot = strtr($mot, $accent); while($entry = $d->read()) { preg_match("#($mot+?)#s", $entry, $new); $data = trim($new[1]); if ((!empty($data)) and ($compteur <= 10)) echo 'R&eacute;sultat : <b><a href="'.$entry.'">'.$data.'</a></b><br><br>'; $compteur++; } $d->close(); } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <input type="text" name="mot"> <input type="submit" name="submit" value="Recherche"> </form>

Re: Script recherche fichiers

Posté : 24 févr. 2017, 08:57
par moogli
tu n'as pas de condition pour $compteur > 10 avec l'utilisation de l'instruction break


@+

Re: Script recherche fichiers

Posté : 24 févr. 2017, 21:58
par megamanx

Code : Tout sélectionner

<?php $compteur = 0; $d = dir("./"); //Recherche nom de fichier dans ce dossier if(isset($_POST['submit']) AND !empty($_POST['mot'])) { $mot = trim($_POST['mot']); $str = $mot; $str = strtolower($str); $mot = $str; $accent = array(' ' => '-', 'é' => 'e', 'è' => 'e', 'ê' => 'e', 'É' => 'e', 'à' => 'a', 'â' => 'a', 'ï' => 'i'); $mot = strtr($mot, $accent); while($entry = $d->read()) { preg_match("#($mot+?)#s", $entry, $new); $data = trim($new[1]); if (!empty($data)) {$compteur++; echo '<b>R&eacute;sultat : <a href="'.$entry.'">'.$data.'</a></b><br><br>';} if ($compteur > 9) {break;} } $d->close(); } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <input type="text" name="mot"> <input type="submit" name="submit" value="Recherche"> </form> </div><br><br><br>
C'est bon, ça marche.
Je dois aussi mettre $compteur++; dans la condition if (!empty($data)), sinon il incrémente aussi quand il parcourt les fichiers qui ne correspondent pas.

Avec break;, il arrête le script immédiatement ? Le code $d->close(); qui ferme le répertoire ne sera pas lu ?

Re: Script recherche fichiers

Posté : 25 févr. 2017, 00:15
par @rthur
Avec break;, il arrête le script immédiatement ? Le code $d->close(); qui ferme le répertoire ne sera pas lu ?
Moogli t'a gentiment mis un lien vers la doc sur cette fonction.
A la lecture de la doc PHP, quelle est ta conclusion ?