Téléchargement au clic multifiles

Wormblaster
Invité n'ayant pas de compte PHPfrance

18 sept. 2006, 15:09

Slt tlm !!!

J'ai une couille dans le potage et voulais savoir commenti qu'chpe faire pour que lorsque je clique sur un lien ou une icône il m'ouvre une boite de téléchargement (ouvrir/télécharger/annuler) plutôt que de passer par les fonctionnalités du navigateur.

Il faut savoir que j'affiche des enregistrements issus d'une base dans laquelle je stocke les chemins de chaque document.

Wormblaster :twisted:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 sept. 2006, 15:27

Bonjour,

Pour ton problème, nous avons une solution toute faite dans la FAQ du forum :
http://www.phpfrance.com/forums/voir_sujet-7700.php

Ce n'est pas pour t'embeter que je dit ça mais recherche avant de poster ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

18 sept. 2006, 15:30

Bonjour,

Je n'ai pas compris la question... qu'entends tu par "ouvrir une boite de téléchargement (ouvrir/télécharger/annuler) plutôt que de passer par les fonctionnalités du navigateur"
Tu peux donner un exemple?
Quand tout le reste a échoué, lisez le mode d'emploi...

Invité
Invité n'ayant pas de compte PHPfrance

18 sept. 2006, 15:40

No problemo jle prends pas mal tkt ;)

J'avais vu votre topic dans la faq (d'ailleurs c'est cool de donner ce genre de tuto) mais comme j'chui noob j'arrive pas à intégrer à mon exemple.

Perso j'ai :

- inséré la fonction dans mon code.
- affecté mon $rows["chemin"] à $filename
- mis dans le a href de chaque ligne produite par le while <a href='download($filename)'...

J'ai faux ? Enfin je sais que j'ai faux puisque ca marche pas lol :roll:

Worm B (la nouvelle spice girl ou destiny's child 8))

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 sept. 2006, 15:57

premierement, je te demanderais de soigner un peu ton écriture s'il te plait ;)

Ensuite, cette fonction doit être appellée dans une page qui ne sert qu'a lancer le téléchargement.

Chacun de tes liens doit être un lien vers cette page avec un parametre GET te permettant de savoir quel fichier il faut télécharger. Dans cette page cible, tu récupères le fichier à télécharger et tu lances la fonction dowload sur ce fichier.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Wormblaster
Invité n'ayant pas de compte PHPfrance

18 sept. 2006, 16:09

Oui mais par contre ca m'oblige a ouvrir une autre page alors que moi je veux rester sur ma liste...

Wormblaster

Invité
Invité n'ayant pas de compte PHPfrance

18 sept. 2006, 16:31

Non ?

Worm B
Invité n'ayant pas de compte PHPfrance

18 sept. 2006, 16:51

C'est bon j'ai réussi grâce à toi merci.

Par contre j'aurai une dernière question. Que peut-on faire au niveau de la sécurité pour pas voir le paramètre dans l'url ou bien fausser celle-ci car ca me donne un download.php?id=1 et moi qui n'est pourtant pas beaucoup de jugeote (si si c'est possible et désolé pour l'hortographe si ce n'est pas la bonne) je me dis que si je mets dans l'url un download.php?id=2 je vais avoir accès à un autre document (peut être secret et personnel à l'origine)

Que préconises-tu ? As-tu une idée d'expert ?

Worm B

Wormblaster
Invité n'ayant pas de compte PHPfrance

19 sept. 2006, 10:27

Re,

Je préfère pas afficher l'id mais j'ai fait plusieurs tests et voudrais savoir pourquoi quand je mets un download.php?id=20 ca me propose de télécharger le fichier download.php et non pas le fichier dont l'id dans ma base est 20 (à la limite tant mieux mais je serais curieux de savoir ^^)

Wormblaster

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 sept. 2006, 10:31

Surement parce que le nom de fichier que tu passes à la fonction download est le fichier dowload.php et non pas le fichier que tu voudrais télécharger ;)

Mais sans le code de ton dowload, je ne pourrais pas plus t'aider :oops:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Wormblaster
Invité n'ayant pas de compte PHPfrance

19 sept. 2006, 16:25

Mon script en 2 pages marche bien mais c'est juste que je voudrais savoir comment se fait cette protection naturelle car je demeure un petit filou.

Pour être plus clair, j'ai sur ma page liste.php ce genre de résultats (en fonction d'un critère c) :
<a href="download.php?id=15">file 15</a>
<a href="download.php?id=27">file 27</a>
...

Ma page download.php, elle, est comme ca :
<? 
include "param.php";
$q="SELECT * FROM files WHERE id='".$_GET["id"]."'";
$r=mysql_query($q);
while($rows=mysql_fetch_array($r)){
$filename = $rows["path"];
}
function download($filename) { 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($filename) ); 
    header('Accept-Ranges: bytes'); 
    header('Content-Length: '.filesize($filename) ); 
    readfile($filename); 
} 
download($filename);
?>
Tout cela marche nickel, mais je me suis dit : si je tappe dans l'url directement http://www.monsite.com/download.php?id=1 je vais avoir accès au document 1 qui normalement ne m'est pas proposé (en admettant que je sois un pirate de bas étage), tu me suis ? Hors là ca me propose (et tant mieux) de télécharger la page download.php, je voulais juste savoir le pourquoi du comment.

Wormblaster