Page 1 sur 1

Formulaire "multidimensionnel"

Posté : 24 nov. 2012, 19:26
par Arcachon
Bonjour,

Je me bats depuis des heures avec un bout de code. Comme j'ai décidé de prendre du recul, je m'adresse à vos lumières.

Mon formulaire permet d'indiquer une durée et les jours qui s'appliquent à cette durée. Il peut y avoir plusieurs durées selon les jours. Je prends deux durées pour simplifier la question, mais il peut y en avoir davantage.

Exemple... 1/ 30 minutes le lundi, le mardi, le mercredi. 2/ 15 minutes le samedi et le dimanche...

Mon problème est que je ne parviens pas lors du traitement du formulaire à distinguer les durées, times[], 1/ et 2/ et les jours associés, days[].

J'espère que ma question est assez claire.

Voici mon code simplifié et raccourci...
<?php
if (isset($_POST['submit'])) :
	print_r($_POST);
	foreach ( $_POST['times'] as $key => $time) :
		foreach($_POST['days'] as $key => $day) :
		echo $time; echo '->'; echo $day;
		// echo 'Je me trompe'
		endforeach;
	endforeach;
else : 
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<h1>Première tranche</h1>
<select name="times[]">
<option selected="selected" value="00">00</option>
<option value="15">15</option>
<option value="30">30</option>
<option value="45">45</option>
<label><input type="checkbox" name="days[]" value="Lundi">Lundi</label>
<label><input type="checkbox" name="days[]" value="Mardi">Mardi</label>
<!-- Jours suivants -->
<h1>Deuxième tranche</h1>
<select name="times[]">
<option selected="selected" value="00">00</option>
<option value="15">15</option>
<option value="30">30</option>
<option value="45">45</option>
<label><input type="checkbox" name="days[]" value="Lundi">Lundi</label>
<label><input type="checkbox" name="days[]" value="Mardi">Mardi</label>
<!-- Jours suivants -->
<button type="submit" name="submit">Envoyer</button>
</form>
<?php endif; ?>
Je pense que mon formulaire est peut être mal conçu. En tout cas, je tourne en rond et ne trouve pas l'issue.

Merci pour votre aide. :D

A.

Re: Formulaire "multidimensionnel"

Posté : 24 nov. 2012, 21:58
par Saian
Je penses que tu pourrais concevoir ton formulaire différemment.

Comme tu as 4 tranches, tu pourrais répéter 4 fois un bloc avec tous les jours de la semaine en checkbox.
Tu fais un bloc pour chaque tranche en nommant les checkbox days_tranche_00[] sur le premier bloc, days_tranche_30[] sur le deuxième etc et en value le nom du jour.

Ou alors à l'inverse un bloc pour chaque jour de la semaine avec en case à cocher les tranches et des noms de champs type times_lundi[], times_mardi[], etc et en value le nom de la tranche.

Re: Formulaire "multidimensionnel"

Posté : 25 nov. 2012, 01:12
par Arcachon
Saian Merci de ta réponse... Je suis arrivé à peu près à la même conclusion que toi. Sauf que je ne pouvais prévoir à l'avance le nombre de possibilités, puisque le formulaire se rapporte à des horaires. Sinon, j'aurai du reproduire mon code à 96 reprises (24 heures par palier de quinze minutes).

Mon code ressemble désormais à...
<?php
if (isset( $_POST['submit'] ) ) :
        //print_r($_POST);
        foreach ( $_POST['timetable'] as $key => $value ) :
			 foreach ( $_POST['timetable'][$key]['days'] as $value ) :
				 if ( isset( $_POST['timetable'][$key]['days']['monday'] ) ) :
					$lundi[] .= $_POST['timetable'][$key]['times'];
				endif;
				 if ( isset( $_POST['timetable'][$key]['days']['thursday'] ) ) :
					$mardi[] .= $_POST['timetable'][$key]['times'];
				endif;
			endforeach;
        endforeach;
	echo '<h1>Lundi</h1>';
        print_r($lundi);
        echo '<h1>Mardi</h1> ';
        print_r($mardi);
else : 
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<h1>Première tranche</h1>
<select name="timetable[0][times]">
<option selected="selected" value="00">00</option>
<option value="15">15</option>
<option value="30">30</option>
<option value="45">45</option>
<label><input type="checkbox" name="timetable[0][days][monday]">Lundi</label>
<label><input type="checkbox" name="timetable[0][days][thursday]">Mardi</label>
<!-- Jours suivants -->
<h1>Deuxième tranche</h1>
<select name="timetable[1][times]">
<option selected="selected" value="00">00</option>
<option value="15">15</option>
<option value="30">30</option>
<option value="45">45</option>
<label><input type="checkbox" name="timetable[1][days][monday]">Lundi</label>
<label><input type="checkbox" name="timetable[1][days][thursday]">Mardi</label>
<!-- Jours suivants -->
<button type="submit" name="submit">Envoyer</button>
</form>
<?php endif; ?>

... et semble fonctionner sous réserve d'un bogue.

Je continue à tester, et demanderai peut-être des précisions.

Encore merci.

A.