Page 1 sur 5

Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 18 juin 2015, 12:49
par lucieemtl
Bonjour à toutes et à tous,

Je me présente Lucie MUTEREL, 19 ans et étudiante en SIO (Services Informatiques aux Organisations) suis actuellement en stage.

Mon tuteur m'ayant demandé une tâche difficile, mon stage prenant fin, et ne trouvant aucunes solutions, je me tourne vers vous pour être un peu plus éclairée sur le sujet.

Ne sachant comment publier des photos (je suis nouvelle depuis quelques minutes), je vais essayer d'être la plus claire possible dans la difficulté que je rencontre.

J'ai des fichiers qui sont situés dans un dossier du site (s'intitulant documents), et ceux-ci sont directement visible sur le site via ce répertoire. Il est possible de les télécharger, mais en fait, on ne peut les télécharger que un par un. Là est le soucis, mon tuteur voudrait dans un premier temps qu'il soit possible d'en télécharger plusieurs en même temps, le clic-droit ne permettant pas (comme on le pourrait dans un explorateur de documents dans un système informatique) de copier/coller le contenu (normal !).
Les fichiers ou photos n'étant pas sélectionnables, j'ai donc pensé à des checkboxs.

C'est donc ici que je suis coincé : comment à partir des checkboxs cochées, puis-je appuyé sur un bouton (ne se trouvant pas dans la même div !), et ainsi télécharger les fichiers sélectionner ? Quel langage puis-je utilisé ?

J'ai vraiment besoin d'aide.

Cordialement,
Lucie MUTEREL

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 18 juin 2015, 13:46
par @rthur
Modération :
Afin d'obtenir plus de réponses, le sujet a été déplacé dans un forum plus approprié (Emplois > PHPdébutant).

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 18 juin 2015, 14:16
par tof73
une manière de contourner le problème, c'est de mettre un formulaire autour de la liste des cases à cocher du document, d'envoyer cela vers un script php, qui a va récupérer les fichiers cochés, les ajouter à une archive zip, et renvoyer cette archive zip.

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 18 juin 2015, 14:19
par lucieemtl
Entendu, mais qu'entendez-vous par liste des cases à cocher ? Sauriez-vous comment envoyer une photo sur phpfrance afin d'être la plus claire possible ?

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 18 juin 2015, 14:24
par lucieemtl
Autrement, la balise <form> autour des checkbox me paraît inévitable, vous avez raison, le problème c'est que mon bouton envoyer ne peut pas se trouver dans mon formulaire puisque cela ne correspondrait pas à la bonne architecture du site.

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 18 juin 2015, 15:27
par lucieemtl
Bon je viens de réussir à faire vérifier si mes checkboxs étaient bien cochées, et qu'il s'agisse d'une ou plusieurs checkbox.
Maintenant il va falloir que je trouve comme faire pour faire une archive zip avec les checkboxs sélectionnés, quelqu'un aurait-il une idée ? Merci d'avance.

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 18 juin 2015, 15:31
par yann18
si ton bouton ne peut pas se trouver dans ton formulaire il va falloir alors faire un appel ajax.Le clic sur le bouton "envoyer" fera 2 actions en JS
1. recupérer toutes les cases cochées(donc les noms des fichiers)
2.appel au script de traitement pour archiver et lancer le download.

Par rapport à ton problème initial, download des fichiers du serveur vers le local, tu peux aussi utiliser la fonction ftp_get de php. Cette fonction, analogue à un client ftp comme filezilla, permet de rapatrier les fichiers du serveur vers le local.L'idée d'utiliser des checkbox est tout autant valable dans ce dernier cas.

Pour parcourir les fichiers situés dans un répertoire, il y a plusieurs fonctions dont scandir

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 18 juin 2015, 16:04
par lucieemtl
Et bien en fait j'ai procédé comme suivant :

[...]
<form action="#">
<input type="checkbox" name="checkbox" id="myCheck" style="float: right;">
</form>
[...]

Un peu plus haut dans le code :
<div id="bouttontelecharger">
<button onclick="myFunction()" name="telecharger" class="telecharger">
<br/>
</div>

<script>
function myFunction() {
if( $('input[name=checkbox]').is(':checked') ){
document.location.href="js/download.php";
}
else{
alert('Veuillez sélectionner au moins un fichier');
}
}
</script>

Par contre, mon site qui est un explorateur de fichiers comme windows, classe les répertoires, qui contiennent des fichiers ou des images, tout en dépendant directement du contenu du dossier document compris de mon site internet.

Pour afficher le contenu de mon répertoire courant (donc documents), je procède comme suivant :

<div id="contenu_repertoire">
<?php
$contenu_repertoire = listDir($repertoire_courant);

if(isset($contenu_repertoire) && !empty($contenu_repertoire) ){
foreach($contenu_repertoire as $element) {
switch($element['type']) {
case 'repertoire': ?>

<div class="element1 repertoire" id="element_<?php echo rawurlencode($repertoire_courant."/".$element['nom']), "&orderby=nom&order=", $order ?>" title="<?php echo $element['nom.extension'] ?>">
<div class="element1_1"><img alt="repertoire" src="themes/original/images/48/repertoire.png" /></div>
<div class="element1_2"><span> <?php echo normalizeString($element['nom']) ?></span></div>
<div class="element1_3"><span>Dossier de fichiers</span></div>
<div class="element1_4">&nbsp;</div>
</div>
<?php break;

case 'fichier':
if( in_array(strtolower($element['extension']), $t_extensions_reconnues) ) { ?>
<div class="element1 fichier" id="element_<?php echo rawurlencode($repertoire_courant."/".$element['nom.extension']), "&orderby=nom&order=", $order ?>" title="<?php echo $element['nom.extension'] ?>">
<form action="#">
<input type="checkbox" name="checkbox" id="myCheck" style="float:right;">
</form>
<div class="element1_1"><img alt="fichier" src="themes/original/images/48/<?php echo strtolower($element['extension']) ?>.png" /></div>
<div class="element1_2"><span><?php echo shortenString(normalizeString($element['nom.extension']), 35) ?></span></div>
<br/>
<div class="element1_3"><span><?php echo $t_extensions[strtolower($element['extension'])]?></span> <span><?php echo formatSize($element['taille'])?></div>
</div>

<?php }
break;

[...]

</div><!-- fin contenu_repertoire -->

[...] On s'intéressera au cas de fichier dans un premier temps.
Mais ne-je vais pas rencontré un problème si je prends en compte le name de l'input type checkbox et non pas l'id de mon fichier ?

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 18 juin 2015, 22:30
par hunomina972
Bonjour Lucieemtl je ne pense pas que le PHP soit une obligation pour faire ce que tu veut faire personnellement je pense que t peut exécuter un script javascript comme celui ci :
<html>
<head>
	<script>
	function verif() {
		for (var i = 1; i <= 3; i++) {
			if (document.getElementById(i).checked == true) {
	        var url = 'http://ton-site/'+i;
	        window.open(url, '_blank');
	    	}
		}
	}
	</script>
</head>
<body>
	<form>
		<input type="checkbox" id='1'/> 
			<label for="1">Doc 1</label>
		<input type="checkbox" id='2' /> 
			<label for="2">Doc 2</label>
		<input type="checkbox" id='3' /> 
			<label for="3">Doc 3</label>
		<input type="submit" onClick="verif();">
	</form>
</body>
</html>
Ce script javascript va donc vérifier lorsque tu clique sur le submit tout les document sélectionnés via les checkboxs. Il va ouvrir les liens des documents en questions, vu que c'est des fichiers "non lisibles par le navigateur" ça va les télécharger directement.
Dans la boucle for tu peut aussi, au lieu de faire entrer des nombres, utiliser un tableau du type :
array = [["doc 1", "lien doc1"],["doc 2", "lien doc2"],...];
Et ainsi afficher les checkbox en fonction du tableau avec la liste des documents en l appelant comme ça :
for (var i = 0; i <= ...; i++) {
		document.write("<input type='checkbox' id='array[i][1]'/> 
			<label for='1'>"+array[i][1]+"</label>");
	}
Ainsi tu le lira ligne par ligne (d'ou le i++) :
for (var i = 0; i <= ...; i++) {
		var url = array[i][2];
		window.open(url, '_blank');
	}
Donc une fois que tu aura verifié chaque checkbox coché, cela ouvrira un lien vers chaque document qui se téléchargera ;)

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 19 juin 2015, 08:03
par lucieemtl
Merci pour ta réponse je vais essayé de mettre ton script en œuvre aujourd'hui. Mais je vois que dans la première photo tu as mis : var url = 'http://ton-site/'+i;
Pour le moment je teste tout en local alors je mets un chemin relatif ou absolu non ?

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 19 juin 2015, 08:18
par hunomina972
C est comme tu veut mais je te conseille l absolu, c est toujours plus clair ^^
Et donc pour l url :
var url = 'localhost/documents/';

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 19 juin 2015, 08:21
par lucieemtl
Plutôt var url ='localhost/KINEBOX/document/.. Que représente le i ?

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 19 juin 2015, 08:22
par lucieemtl
Comment envoie-t-on des photos que je t'envoies mon code, ce sera plus simple ;)

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 19 juin 2015, 08:32
par hunomina972
Le i c est pour faire tourer la boucle for :)
Pour les "images" il faut que tu réponde avec l éditeur avancé et que tu mette ton code entre les balises html qui sont dans la liste pour gérer le texte écrit ;)

Re: Créer un bouton qui permet le téléchargement de plusieurs fichiers cochés.

Posté : 19 juin 2015, 08:33
par hunomina972
C est comme tu veut mais je te conseille l absolu, c est toujours plus clair ^^
Et donc pour l url :
var url = 'localhost/documents/'+i;
J ai modifié, c etait mal écrit au dessus ;)