8797 sujets

Développement web côté serveur, CMS

Yo les copains,

Derrière ce titre un peu capricieux, se cache mon dénuement face à une seule (ou peut-être deux) ligne de code php pour obtenir… un tableau (oui, un array, pff). Voilà voilà, le html, le css je gère mais le php j'apprends par l'exemple ; je pense ne pas m'en sortir trop mal Smiley langue mais là je bloque Smiley fache .

Tout commence ici :

J'ai un formulaire (affiché par un module sous joomla) qui donne ceci en condensé et nettoyé des autres fonctions (checkboxes, select-all checkboxes avec jquery, etc) qui elles, tournent au poil.

Le formulaire


<form name="downloadForm" method = "post" action= "download.php">
	<input type="checkbox" name="chk[]" value="path/file1.pdf"><label>file1</label>
	<input type="checkbox" name="chk[]" value="path/file2.pdf"><label>file2</label>
	<input type="checkbox" name="chk[]" value="path/file3.pdf"><label>file3</label>
	<input type="checkbox" name="chk[]" value="path/file4.pdf"><label>file4</label>
	<button onclick="document.downloadForm.submit();" type="button">Downloads</button>
</form>



Le php qui reçoit les données du formulaire (download.php)

J'ai une fonction en en-tête du fichier php qui vérifie les checkboxes qui ont été sélectionnées


<?php
for($i=0;$i<count($_POST["chk"]);$i++){
	if(trim($_POST["chk"][$i]) != "")
{
	echo $_POST["chk"][$i]; // test 1
        // ou 
        echo print_r ($_POST['chk'],true); // test 2

	}
}


J'arrive bien à récupérer les "values" de chaque checkbox sélectionnée dans le formulaire mais je n'arrive pas à les obtenir sous le bon format. Pour une sélection des deux premiers checkboxes :

La ligne test 1 me donne les données en vrac :
path/file1.pdfpath/file2.pdf
par exemple

La ligne test 2 me donne ceci :

Array ( [0] => path/file1.pdf [1] => path/file2.pdf ) Array ( [0] => path/file1.pdf [1] => path/file2.pdf )



La fonction (download.php)

L'objectif est d'obtenir les données sous le format suivant :

$files = array('path/file1.pdf','path/file2.pdf');



Ce qui me permet ensuite de "faire tourner" la fonction suivante qui fonctionne bien quand je teste en dur



function zipdownload()
{
        $files = array('path/file1.pdf','path/file2.pdf'); // test en dur

	$zip = new ZipArchive;
	$zip->open('Downloads.zip', ZIPARCHIVE::OVERWRITE);
	foreach ($files as $file) {
		$zip->addFile($file);}
		$zip->close();
		
	header('Content-type: application/zip'); 
	header('Content-Disposition: attachment; filename=Downloads.zip'); 
	header('Pragma: no-cache'); 
	header('Expires: 0'); 
	readfile('Downloads.zip');
	echo $files;
	exit;
		}
zipdownload();
?>



En résumé

Donc voilà en résumé, avec ça :


<?php
for($i=0;$i<count($_POST["chk"]);$i++){
	if(trim($_POST["chk"][$i]) != "")
{
	// je mets quoi ?
	}
}


je veux ça :

$files = array('path/file1.pdf','path/file2.pdf');

Smiley lol

Ca doit pas être compliqué quand même, moi j'arrive pas

Maaaaaaaaarchi
Modifié par Tefnack (10 Jul 2012 - 15:59)
Salut, en fait... c'est ...

$files = $_POST['chk'];


Pas besoin de boucle, car $_POST['chk'] est déjà un tableau indicé. Et comme c'est ce dont tu as besoin, c'est gôgné !
P**ain c'est de la balle, le pied… waouh , j' savais bien que j'étais pas loin.

Maaaaaaaaarchi beacouuuuup