Script recherche fichiers

megamanx
Invité n'ayant pas de compte PHPfrance

23 févr. 2017, 15:18

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>

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

23 févr. 2017, 15:28

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.

@+
Il en faut peu pour être heureux ......

megamanx
Invité n'ayant pas de compte PHPfrance

23 févr. 2017, 15:32

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à.

megamanx
Invité n'ayant pas de compte PHPfrance

23 févr. 2017, 19:51

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 ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

23 févr. 2017, 20:42

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
Quand tout le reste a échoué, lisez le mode d'emploi...

megamanx
Invité n'ayant pas de compte PHPfrance

23 févr. 2017, 21:48

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>

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

24 févr. 2017, 08:57

tu n'as pas de condition pour $compteur > 10 avec l'utilisation de l'instruction break


@+
Il en faut peu pour être heureux ......

megamanx
Invité n'ayant pas de compte PHPfrance

24 févr. 2017, 21:58

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 ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 févr. 2017, 00:15

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 ?
Quand tout le reste a échoué, lisez le mode d'emploi...