[RESOLU] téléchargement d'un PDF avec liste déroulante méthode post

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] téléchargement d'un PDF avec liste déroulante méthode post

Re: téléchargement d'un PDF avec liste déroulante méthode post

par misterflo » 29 avr. 2011, 15:49

Salut,

pour un meilleur "confort" tu peux rajouter cette ligne, elle définit la taille du fichier et permet ainsi de savoir le temps de téléchargement restant et la taille du fichier
header("Content-Length: ".filesize($file));

Re: téléchargement d'un PDF avec liste déroulante méthode post

par Romain.H » 29 avr. 2011, 15:35

Et oui, le "echo citant que le fichier existe", me rapportais effectivement une erreur.
Merci à tous ;)

Re: téléchargement d'un PDF avec liste déroulante méthode post

par Romain.H » 29 avr. 2011, 15:33

Problème résolu !!!
Voila le code final !!

<?php
$file = '/var/www/wordpress/wp-content/themes/insight/DossierInfo/'.$_POST['dossierInf'].'.pdf';

if (file_exists($file)) {
header("Content-type: application/force-download");
header('Content-Disposition: attachment; filename='.$file);
readfile($file);
exit;
} else {
echo "Le fichier $file n'existe pas.";
}
?>

Re: téléchargement d'un PDF avec liste déroulante méthode post

par macgawel » 29 avr. 2011, 13:40

Mais "echo "Le fichier $file existe.";" ne sert à rien car il ne sera pas envoyer au navigateur
En fait, il risque même de générer des erreurs...
Si tu conserves ce code, que tu enregistres le fichier PDF et que tu l'ouvres avec un éditeur de texte, tu vas voir ton message... #-o

Une règle générale à retenir : ne rien afficher avant les header.

Re: téléchargement d'un PDF avec liste déroulante méthode post

par lusc » 29 avr. 2011, 12:49

Ah oui macgawel à raison "erreur de logique"donc ton code finale de "traitement.php" sera:

<?php
$file = 'DossierInfo/'.$_POST['dossierInf'].'.pdf';
if (file_exists($file)) {
        echo "Le fichier $file existe.";
        header('Content-type: application/pdf');
        header('Content-Disposition: attachment; filename='.$file);
        readfile($file);
}
else {
    echo "Le fichier $file n'existe pas.";
}
?>
Mais "echo "Le fichier $file existe.";" ne sert à rien car il ne sera pas envoyer au navigateur

Re: téléchargement d'un PDF avec liste déroulante méthode post

par lusc » 29 avr. 2011, 11:58

remplace
$file = '../DossierInfo/'.$_POST['dossierInf'].'.pdf';
Par
$file = 'DossierInfo/'.$_POST['dossierInf'].'.pdf';

Re: téléchargement d'un PDF avec liste déroulante méthode post

par macgawel » 29 avr. 2011, 11:48

Bonjour.

Pour débugger :
- echo realpath($_SERVER["SCRIPT_FILENAME"]); te donnera le chemin à prendre en compte...

- print_r($_POST); t'affichera le contenu de ton POST, histoire de vérifier.
Ne pas oublier que tu risques d'avoir des problèmes si ton nom de fichier contient des caractères "spéciaux" (même un bête espace). Au minimum, il faudra certainement faire un urldecode();

Au niveau de la logique, si le fichier n'existe pas tu ne voudras certainement pas l'ouvrir =>
if (file_exists($file)) {
    echo "Le fichier $file existe.";
	header('Content-type: application/pdf');
	header('Content-Disposition: attachment; filename='.$file);
	readfile($file);
} else {
    echo "Le fichier $file n'existe pas.";
}
Au niveau sécurité, il ne faut jamais utiliser les variables $_POST telles que.
Au minimum, supprime tout ce qui n'est pas alphanumérique dans $_POST['dossierInf']...

Edit : erreur de balises :oops:

téléchargement d'un PDF avec liste déroulante méthode post

par Romain.H » 29 avr. 2011, 10:43

Bonjour à tous,

Je viens vers vous car je suis face à un problème.
J'ai construit une liste déroulante sur mon site, et j'aimerais qu'a travers cette liste déroulante on puisse télécharger des fichiers pdf.
C'est à dire, que l'on sélectionne une valeur de la liste déroulante, et lors de la pression sur le bouton envoyer, un téléchargement du fichier concerné se produise.
Voila le code que j'ai :

Code : Tout sélectionner

<form method="post" action="traitement.php"> <select name="dossierInf"> <option value="fichier1">mon fichier1</option> <option value="fichier2">mon fichier2</option> </select> <input type="submit" value="telecharger" /> </form>
Et sur le page traitement.php :

Code : Tout sélectionner

<?php $file = '../DossierInfo/'.$_POST['dossierInf'].'.pdf'; if (file_exists($file)) { echo "Le fichier $file existe."; } else { echo "Le fichier $file n'existe pas."; } header('Content-type: application/pdf'); header('Content-Disposition: attachment; filename='.$file); readfile($file); ?>
Cependant une erreur lors de ce téléchargement se produit.
Le fichier téléchargé semble endommagé, et ne peut être ouvert par adobe reader.

Voici le message d'erreur :
"Adobe Reader n'a pas pu ouvrir avalanches.pdf, car le type de fichier n'est pas pris en charge ou le fichier est endommagé (il a été envoyé en tant que pièce jointe et n'a pas été décodé correctement, par exemple "

Avez-vous une idée d'ou provient cette erreur ? J'ai essayé tous les chemins possible, je ne trouve pas, mes fichiers existe pourtant bien.

Mon fichier traitement .php a ce chemin : \\gimli\www\wordpress\wp-content\themes\insight
Et mes fichiers pdf : \\gimli\www\wordpress\wp-content\themes\insight\DossierInfo