Ce code est très bien, cependant je me demandais s'il était possible d'ajouter quelque chose, permettant à l'utilisateur d'ouvrir le document listé, dans une nouvelle fenetre ? Par l'intérmédiaire d'un bouton ou autre.
Merci d'avance pour vos idées, suggestions ou réponses,
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 17 oct. 2009 à 22:37
Salut,
Désolé, mais non, ce code n'est pas bien. Cette ligne notamment :
while($file = readdir($rep))
n'est pas rigoureuse. Cf : readdir() (Avertissement et exemple 1) pour voir ce qui ne va pas.
Pour afficher le contenu d'un fichier listé, il faut un script qui le fasse... Ta liste se trouve dans un formulaire, c'est donc le script qui gère le formulaire qui va gérer ça.
Le script doit simplement faire :
Si tu souhaites afficher le contenu du fichier dans une popup, il peut être utile d'utiliser Javascript, avec l'évènement onchange de la liste <select>, lequel soit ouvre une nouvelle fenêtre (window.open) soit charge le résultat du script dans un
caché, affiché à ce moment là (ou avec une bibliothèque genre shadowBox, LightBox,...), avec un peu d'Ajax.
!!! ATTENTION !!!
Ce genre de code est très dangereux : il est INDISPENSABLE de vérifier que l'utilisateur a LE DROIT de lire le contenu du fichier (authentification ?) et de vérifier que le fichier demandé est AUTORISE (qu'il se trouve donc bien dans le répertoire, avec realpath(), pour éliminer les ../ du chemin qui pourraient provoquer une faille de sécurité).
acetouk
Messages postés7Date d'inscriptionvendredi 14 octobre 2005StatutMembreDernière intervention18 octobre 2009 17 oct. 2009 à 23:11
Merci beaucoup pour votre réponse très complète Neige.
En fait ce code est apparu comme une solution à un problème auquel je ne trouve pas encore de solution. L'idée étant d'envoyer un document sur le serveur ; que ce document puisse être listé dans un menu déroulant automatiquement ; permettre l'ouverture de ce document comme le ferait un simple lien hypertexte qui ouvrirait une nouvelle page...si la phase 1 et 2 semble opérationnelle, la phase 3 ne l'est pas.
Peut être auriez vous une solution plus adaptée que mon code pas si évident ? Au final il s'agit bien de choisir un document dans une liste et pouvoir le consulter...cependant sans avoir à modifier la liste au cas par cas.
Merci d'avance,
Seb
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 18 oct. 2009 à 00:15
Que veux-tu dire exactement par
permettre l'ouverture de ce document comme le ferait un simple lien hypertexte qui ouvrirait une nouvelle page...
???
Faut-il afficher le contenu du fichier ? Ou bien... En fait, quel genre de fichier est-ce ? Du HTML, du PHP à exécuter, du texte, une image, autre chose ?
Et que faut-il comprendre également par
sans avoir à modifier la liste au cas par cas
???
Là, je ne vois pas du tout...
Actuellement, ton code affiche une liste déroulante avec les fichiers présents dans un certain répertoire. Est-ce que c'est bien sous cette forme que tu veux la liste, ou bien est-ce que tu veux des liens ? Parce que c'est soit l'un, soit l'autre (encore qu'il soit possible d'afficher les deux listes sur la même page, mais je n'en vois pas bien l'intérêt...).
Avec les réponses à ces questions, j'espère pouvoir t'aider au mieux :)
acetouk
Messages postés7Date d'inscriptionvendredi 14 octobre 2005StatutMembreDernière intervention18 octobre 2009 18 oct. 2009 à 01:03
Il s'agit de documents Txt ou html.
Lorsque j'up le document sur le serveur, la liste se met à jour.
Le fameux :
sans avoir à modifier la liste au cas par cas
Puis, lorsqu'un indivdu consulte la liste, il lui faut pouvoir l'ouvrir et le consulter. Donc, choisir dans la liste et ouvrir.
Tout l'intérêt du truc consiste dans l'actualisation automatique du menu déroulant (a chaque fois qu'un nouveau document est uploadé dans le répertoire) et pouvoir consulter ce document en le choisissant dans le menu.
Donc dans l'absolu il faudrait permettre :
- Uploader un document dans un répertoire : fait
- Voir se document s'ajouter automatiquement dans le menu déroulant :fait
- Le choix d'un document dans la liste : fait
- pouvoir l'ouvrir dans une nouvelle fenêtre / ou l'ouvrir tout court : probleme
Vous n’avez pas trouvé la réponse que vous recherchez ?
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 18 oct. 2009 à 02:06
Ok. Mais il y a encore une chose qui n'est pas claire pour moi : tu veux afficher le document comment ?
Si c'est un txt, ok, on affiche le texte. Mais si c'est du HTML : faut-il afficher la source ou le document tel qu'il est interprété par le navigateur ?
Parce que c'est quand même pas la même chose...
Sinon, j'ai deux solutions pour l'affichage, à te proposer :
- dans un élément
sur la page en cours, sans la recharger, à l'aide de Javascript et de jQuery
- dans une popup (nouvelle fenêtre/onglet)
Première option
Il faut jQuery, téléchargeable sur jquery.com. Il faut ajouter le script principal de jQuery au code source de sa page :
Il faut donner un ID à ton select (c'est plus pratique pour manipuler l'élément) :
<select name="fichier" id="fichier">
Il faut, dans ton HTML, un élément
vide avec un ID de ton choix (mais unique, hein, évidemment).
Il faut un script JS qui appelle un autre script PHP pour afficher le contenu du fichier dans le div (à placer n'importe où dans la page, idéalement, là où ça fait propre...) :
Enfin, un script affiche_fichier.php qui sera chargé d'afficher le fichier (dans le format que tu veux).
Là, j'ai supposé qu'il se trouvait à la racine (cf son appel dans le Javascript juste au-dessus). Tu peux le mettre où tu veux, pour peu que tu fasses attention au chemin dans le Javascript qui le charge ;)
<?php
# A adapter en fonction du chemin du répertoire, relativement au script affiche_fichier.php
$rep = 'upload/resultats/';
if (isset($_GET['fichier']) && is_file($rep.$_GET['fichier']) {
$fichier = $rep.$_GET['fichier'];
# Avec PHP 4.3 et +
if (version_compare(PHP_VERSION, '4.3.0' '>') {
$contenu_fichier = file_get_contents($fichier);
}
else {
# Avec PHP 4 < 4.3 :
ob_start();
readfile($fichier);
$contenu_fichier = ob_get_clean();
}
# Si on veut afficher le contenu du fichier tel quel, sans se poser de question (la variable $sortie_brute est à définir) :
if ($sortie_brute) {
echo $contenu_fichier;
}
# Si on veut afficher le contenu du fichier, en texte brut, donc la source pour du html :
else {
echo html_entities($contenu_fichier);
}
}
else {
echo '';
}
?>
Deuxième option
On ne va changer que le Javascript. Au lieu de charger le résultat de affiche_fichier.php dans un div, on va directement appeler ce fichier dans une nouvelle fenêtre :
C'est du super basique. Il reste possible d'avoir une case à cocher pour choisir le mode d'affichage du fichier si on le souhaite (et exécuter l'un ou l'autre script JS selon le cas).
Par ailleurs, le code que je fournis ici n'est pas vraiment sécurisé : la variable $_GET['fichier'] est utilisée telle quelle, il faudrait en supprimer les caractères interdits (ne laisser que ceux qui peuvent effectivement composer le nom d'un fichier), interdire les chemins relatifs (avec ../bidule.txt) pour empêcher d'accéder à n'importe quel fichier du serveur.
Et puis je reconnais n'avoir pas testé : c'est essentiellement une trame directrice, pas un code tout fait (même s'il ne me semble pas avoir fait d'erreur, je te laisse corriger si besoin est).
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
acetouk
Messages postés7Date d'inscriptionvendredi 14 octobre 2005StatutMembreDernière intervention18 octobre 2009 18 oct. 2009 à 13:27
Merci beaucoup pour cette réponse très élaborée. Je vais de ce pas tester votre code et je vous tiens informé. Merci pour cette aide précieuse,
Sebastien;
Ps : oui dans le cas d'un document html, il s'agit de l'afficher interprété.
acetouk
Messages postés7Date d'inscriptionvendredi 14 octobre 2005StatutMembreDernière intervention18 octobre 2009 18 oct. 2009 à 17:11
Bon, je ne sais pas si j'ai tout compris, je vous présente les étapes que j'ai actuellement réalisé :
- Sur la racine du site : jquery-1.3.2.js
- sur la page contenant listant les fichiers inséré en racine :
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 19 oct. 2009 à 02:30
Je crois qu'il manque la balise <select> ouvrante... En tout cas elle n'est pas dans le code que tu colles ici, ce qui pourrait expliquer que ça ne fonctionne pas.
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
snawnaw6
Messages postés1Date d'inscriptionmardi 6 octobre 2009StatutMembreDernière intervention20 octobre 2009 20 oct. 2009 à 19:00
bonjour!
je suis entraint de créer un site web dynamique de la gestion de bibliothèque. j'ai trouvée quelque problèmes au niveau de php concernat la partie contact.
S.V.P aidez moi.
- Il me fallait céer un formulaire contenant les coordonées de contact(nom,prénom,téléphone,message à envoyer)et un bouton envoyer.
_les enregistrer dans un tableau mysql
_les lire dans un tableau et puis les répondre enfin les supprimer(cette étape est faite par l'administrateur)