Afficher les fichiers en minuscule et en majuscule

andykx
Invité n'ayant pas de compte PHPfrance

07 févr. 2017, 10:34

Bonjour,

Alors voilà mon problème, je souhaite afficher tous les fichiers de mon dossier "doc" qui contiennent un certain mot, que ce mot soit en minuscule mais aussi en majuscule. Je récupère mon mot par la méthode POST mais je ne trouve pas de solution pour régler mon poblème. Voici mon code qui est fonctionnel, il manque que la partie "j'affiche le fichier peut importe si le mot est en majuscule ou en minuscule".
session_start();

$case1 = $_SESSION['name'];

$dir = 'C:\\wamp64\\www\\doc\\';

foreach (glob($dir. '*' .$case1. '*') as $filename) {
    echo "Nom du fichier : <a href='/doc/" . basename($filename) . "'>"  . $filename .  "</a><br>";
}
Merci et à bientot,

Cordialement.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 févr. 2017, 10:58

Bonjour,

Tu peux faire cela en utilisant la fonction preg_match()
En expression régulière, il faut ajouter la lettre i après le pattern pour indiquer "insensible à la casse"

Tu as un exemple de ce que tu veux faire dans la doc (exemple 1) :
http://php.net/manual/fr/function.preg-match.php
Quand tout le reste a échoué, lisez le mode d'emploi...

andykx
Invité n'ayant pas de compte PHPfrance

07 févr. 2017, 11:19

Merci pour ta réponse.

Donc maintenant ça donne ça :
foreach (glob($dir. '*' .$case1. '*') as $filename) {

	// Le "i" après le délimiteur du pattern indique que la recherche ne sera pas sensible à la casse
	if (preg_match("/$case1/i", "basename($filename)")) {
		echo "Nom du fichier : <a href='/doc/" . basename($filename) . "'>"  . $filename .  "</a><br>";
	} else {
		echo "Aucun résultat n'a été trouvé.";
	}
}
Cependant il ne m'affiche toujours pas les fichiers en majuscule et en minuscule malgré le "i".

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 févr. 2017, 11:48

Relis ce que tu as mis en if() et pose toi des questions sur les guillemets
Quand tout le reste a échoué, lisez le mode d'emploi...

andykx
Invité n'ayant pas de compte PHPfrance

07 févr. 2017, 12:10

Le problème c'est que cette solution ne peut pas foncionner puisque ma variable est récupérée par la métode POST et le basename de ma variable prend donc en compte que le mot que j'écrit dans mon formulaire...et je ne peux pas mettre à la fois un mot en majuscule plus un mot en miniscule dans ma cellule de recherche je ne sais pas si tu voit ce que je veut dire.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 févr. 2017, 12:21

il n'y a aucune justification pour que ton basename soit entre guillemets vu que c'est une fonction PHP
Quand tout le reste a échoué, lisez le mode d'emploi...

andykx
Invité n'ayant pas de compte PHPfrance

07 févr. 2017, 12:43

Dans tous les cas cette solution ne convient pas à la résolution du problème.

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

07 févr. 2017, 13:15

salut,

tu n'indiques pas qu'elle est la variable qui contient l'info du formulaire.
$case1 c'est ce qu'il y a en session (d'ailleurs autant utiliser directement la variable de session).
ensuite tu peux simplement strtolower pour avoir la chose en minuscule, (sur l'entrée du formulaire et sur le répertoire) et strpos pour savoir si ce que tu veux est contenu dans le chemin.

en gros un chose comme cela
<?php
session_start();
if (!empty($_POST['le nom du champ de formulaire'])) {
    foreach (glob('C:\\wamp64\\www\\doc\\*' .$_SESSION['name']. '*') as $filename) {
        if (strpos(strtolower($filename), strtolower($_POST['le nom du champ de formulaire']))) {
            echo 'Nom du fichier : <a href="/doc/' , basename($filename) , '">'  , $filename , '</a><br>';
        }
    }
}else {
    echo 'pas de bras, pas de chocolat !';
}
@+
Il en faut peu pour être heureux ......

andykx
Invité n'ayant pas de compte PHPfrance

07 févr. 2017, 15:01

Merci pour ton aide moogli je voit ce que tu veut dire. Et la variable qui contient l'info du formulaire c'est justement $case1 que je récupère sur mon autre fichier php grâce à la session. Sinon j'ai trouvé une autre solution je te montre mon code :
<?php
session_start();

$case1 = $_SESSION['name'];
$dir = 'C:\\wamp64\\www\\doc\\';
$min = strtolower($case1);

foreach (glob($dir. '*' .$min. '*') as $filename) {
	echo "Nom du fichier : <a href='/doc/" . basename($filename) . "'>"  . $filename .  "</a><br>";
} 
	
$maj = strtoupper($case1);

foreach (glob($dir. '*' .$maj. '*') as $filename) {
	echo "Nom du fichier : <a href='/doc/" . basename($filename) . "'>"  . $filename .  "</a><br>";
}
?>
J'ai essayer et ça fonctionne bien, après je trouve que c'est pas très "propre".

Mammouth du PHP | 1967 Messages

07 févr. 2017, 15:19

la solution de moogli devrait fonctionner avec quelque modifs propre à ton code. retire le premier niveau de if/else
<?php
session_start();
 foreach (glob('C:\\wamp64\\www\\doc\\*' .$_SESSION['name']. '*') as $filename) {
     if (strpos(strtolower($filename), strtolower($_POST['le nom du champ de formulaire']))) {
         echo 'Nom du fichier : <a href="/doc/' , basename($filename) , '">'  , $filename , '</a><br>';
     }
 }
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube