formulaire avec champ "select"

  • Auteur de la discussion Auteur de la discussion aventvoy
  • Date de début Date de début
WRInaute discret
Bonjour,
Je fais un formulaire (page1.php) avec nom d'utilisateur, et mot de passe, pas de problème pour vérifier tout ça.
Sur cette même page1 (et à condition que le nom et mdp sont valides, jusque là j'y arrive...), l'utilisateur doit pouvoir choisir un fichier dans une liste de fichiers, que je veux montrer dans un menu déroulant, comme par exemple
<select name="fichier"><br />
<option value="vide">choisissez un fichier</option>
<option value="fichier1">Fichier 1</option>
<option value="fichier2">Fichier 2</option>
etc...
Les fichiers sont stockés dans un dossier (./dossier).
Mais dans le dossier, il y a des fichiers .txt, des fichiers.jpg, et je ne veux que montrer les fichiers .txt.
Alors faire tout ça en html, pas de problème, et récupérer le tout sur une page2.php pas de problème non plus. Sauf que ça m'oblige à écrire à la main en html une ligne de <option value="etc"...> par fichier et il y en a un max!!
Donc, on doit pouvoir arriver à utiliser php pour sortir tous les fichiers .txt
contenus dans le dossier et les afficher dans un menu déroulant pour sélection, non?
Comment on fait ça? (j'ai regardé sur le site du zéro, pas trouvé. Idem sur le manuel php.net)
Merci pour votre patience avec les néophytes!
A.
 
WRInaute passionné
Je n'ai pas vérifié, mais avec une regex :
Code:
if(preg_match("![A-Za-z]\.txt!",$fichier))
{
    // On affiche que les noms de fichier ayant l'extension .txt
}
Ou sinon y'a encore plus simple :
Code:
     $sub=substr($fichier,-4);
     if($sub==".txt")
     {
          // It's good !
     }

Ou encore avec... blabla :D
 
WRInaute discret
Ok David96, merci pour avoir pris le temps de répondre.
Je comprend bien comment fonctionnerait la regex (bien que je ne vois pas ce que viennent faire les !, moi je connais que ereg("cecicela",$fichier)...)
Seulement le nullos que je suis ne comprend pas comment ton code (le premier ou le deuxième...) peut aller chercher dans un dossier les fichiers en question. Faut il pas un truc comme
if("is_dir("dossier")) //pour aller chercher dans le dossier en question
{
echo //et c'est là que je ne sais pas comment mettre les <option value="fichier1"> etc...

Bref, je suis largué...
A vouloir trop en apprendre tout seul on se perd...
 
WRInaute passionné
Pour les !, ce ne sont simplement que des délimiteurs, tu peux mettre autre chose si tu veux à la place.

Sinon ha la la ! Je vois que tu démarres en php !

Le mieux est que lorsque tu uploades un fichier, tu mettes son nom dans une table SQL que tu auras défini au préalable, mais là va falloir repenser tout ton scrypt à partir de zéro.

Donc premier conseil ! Va du côté du site du zéro qui doit t'expliquer les rudiments de MySQL je pense.

Ensuite tu reviendras ici et on parlera de l'upload ;-)
 
WRInaute discret
C'est clair, je démare, et heureusement que j'ai pas mal de cheveux, because à force de me les arracher m'en resterait pas beaucoup...
Je pense pas qu'il faille absolument une bd mySQL pour faire ça (mais bon, j'en connais si peu sur le sujet que vaut mieux que je me taise...)
J'ai lu un truc sur comment parcourir un dossier pour en isoler des fichiers, ça me donne un truc du genre:

$directory = dir("./dossier/");
$directory->rewind(); //pour parcourir tout le dossier
while($fichier=$directory->read())
{
if($fichier=="_notes") //pour éviter les trois premiers trucs inutiles
{
continue;
}
if($fichier==".")
{
continue;
}
if($fichier=="..")
{
continue;
}
//c'est là que j'intégre ta premiere regex, super, merci! si j'ai bien compris ça donne
if(preg_match("^[A-Za-z]\.txt$",$fichier))
{
echo"$fichier<br />"; // On affiche que les noms de fichier ayant l'extension .txt. Et c'est là que je voudrais les resultats dans un menu déroulant pour selection
}
}
Bon, en faisant ça, j'arrive à imprimer tous les fichiers qui sont dans "dossier". Maintenant ce que je veux faire c'est les rendre disponibles dans un menu déroulant pour que l'utilisateur puisse en selectionner un, pour qu'il puisse le lire sur la page2...
Quant au site du zéro, je peux te dire que je l'ai lu et relu, et tout... Ben y'a pas la réponse à mon problème...
 
WRInaute passionné
Code:
     $directory = dir("./dossier/");
     $directory->rewind(); 
echo "<select name=\"fichier\">";
while($fichier=$directory->read())
{
        if(preg_match("![A-Za-z]\.txt!",$fichier))
        {
             echo "<option value=\"$fichier\">$fichier</option>\n"; 
        }
} 
echo "</select>";
:wink:
 
WRInaute discret
Merci, ça progresse!!
J'ai bien un menu déroulant, mais si je laisse la regex if(preg_match("![A-Za-z]\.txt!",$fichier))
alors le menu est vide.
Quand j'enlève la regex, alors le menu affiche tous les fichiers présents dans le dossier (mieux que rien!) mais faut que je me débrouille pour n'afficher que les fichiers .txt.
J'ai essayé en remplaçant par if(ereg("^[A-Za-z]\.(txt)$",$course)); vu que jusqu'à maintenant c'est la syntaxe que je connaissais pour les regex, mais ça marche pas mieux...
Alors j'ai essayé avec if(eregi("^[a-z].\.(txt)$",$course)); //doit commencer avec 1 ou plusieurs caractères entre a et z, peu importe majuscule ou non, ensuite doit être suivi d'un point, puis du groupe de 3 lettres txt, et doit finir comme ça.
Ben ça marche pas mieux, ça filtre rien et les fichiers .jpg ou autre sortent quand même...
C'est raide ce truc php...
:evil:
 
WRInaute discret
Merci pour la participation Ramses. Ça me donne un nouveau site à visiter pour en apprendre plus!
Pour l'instant, ça ne marche pas mieux...
En plus, je me suis apperçu que quel que soit le fichier selectionné, c'est toujours le même qui s'ouvre en page2.php...
Bref, faut savoir s'arrêter, respirer un bon coup et revenir. Donc pour l'instant je laisse (jusqu'à demain matin...)
Merci à ceux qui mettront leur grain de sel dans ce problème...
A.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut