[RESOLU] Formulaire checkbox + input text

Eléphanteau du PHP | 36 Messages

18 févr. 2015, 13:33

Bonjour, je suis confronté à plusieurs problèmes que je n'arrive pas à résoudre...

Je suis entrain de faire un formulaire contenant des examens qui existent dans une table examens.

Pour chaque examen une checkbox et si la checkbox est coché en jQuery j'affiche un champ texte.

Dans les faits voici mon script jQuery :

[javascript]
$(document).ready(function() {
var $examens = $('input[name="examens[]"]');
var $comments = $('input[name="comments[]"]');

$comments.hide(0);

$examens.each(function (i) {
$(this).on('change', function () {
if ($(this).is(':checked')) {
$comments.eq(i).show(0);
} else {
$comments.eq(i).hide(0);
}
});
});
});
[/javascript]

Voici mon script php :
	
<?php
	if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") {
		$errors = array();
		$examens = array();
		$comments = array();

		$examens = $_POST['examens'];
		$comments = $_POST['comments'];

		if(empty($examens)) {
			$errors[] = 'Il faut sélectionner au moins un examen.';
		}

		for ($i = 0; $i < count($examens); $i++) {
			$examen = $examens[$i];
			$comment = $comments[$i];
			var_dump($examen,$comment);
		}
		
		if(!empty($errors)) {
			echo '<div class="alert error">
			<ul>';
			foreach($errors as $error) {
				echo '<li>',$error,'</li>';
			}
			echo '</ul>
			</div>';
		} else { 

		}
	}
	?>
Et voici mon html :
	<form action="#" method="post" id="adddoc" class="add_form">
		<div class="form">
			<div class="control-group form-group" id="intitule-group">
				<?php
				$query = $connexion->prepare("SELECT * FROM examens WHERE ex_actif = 1 ORDER BY ex_ordre DESC");
				$query->execute();
				$rows = $query->fetchAll();
				foreach($rows as $row) {
					echo '<div class="form-radio"><input type="checkbox" name="examens[]" value="'. $row['ex_id'].'"> '. utf8e($row['ex_nom']) .'</div>
					<div class="form-item"><input type="text" name="comments[]"></div>';
				}
				?>
			</div>
		</div>
		<div class="row-fluid">
			<p class="span8"><input type="submit" class="btn btn-bsv span5" value="Ajouter"></p>
		</div>
	</form>
Je suis bloqué pour ma requête SQL d'insertion de données.

Comment faire pour dire, je veux que ':exam1'=>$examen1,':document1'=>$document1 et ainsi de suite...

Parallèlement quand je soumet mon formulaire sans rien cocher, j'ai bien mon message "Il faut sélectionner" au moins un examen mais j'ai également une erreur PHP : Notice: Undefined index : examens in...

[Edit] J'ai corrigé l'erreur ci-dessus en faisant :
		if(empty($_POST['examens'])) {
			$errors[] = 'Il faut sélectionner au moins un examen.';
		} else {
			$examens = $_POST['examens'];
		}
Une idée s'il vous plait ?

Merci de votre aide :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 févr. 2015, 22:36

Hello !

Dans ton code html, lorsque tu génères tes checkbox et input, dans le nom de ceux-ci, tu peux ajouter un id entre les crochets :
foreach ($rows as $row) {
  echo '<div class="form-radio">
    <input type="checkbox" name="examens[' . $row['ex_id'] . ']" value="' . $row['ex_id'] . '"> ' . utf8e($row['ex_nom']) . '</div>
    <div class="form-item"><input type="text" name="comments[' . $row['ex_id'] . ']"></div>';
}
Cette information est envoyée et php va traiter le résultat comme un tableau associatif que tu n'auras qu'à parcourir :)

Par exemple, si tu as 5 champs/ids et que les cases 1, 2 et 5 sont cochées lorsque le formulaire est soumit, tu recevras les informations suivantes :
$examens : array( 1=> 1, 2=> 2, 5=> 5);
$comments : array( 1=> 'commentaire 1', 2=> 'commentaire 2', 3=>'', 4=>'' 5=> 'commentaire 5');
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 36 Messages

27 févr. 2015, 19:39

Bonjour Ryle et merci beaucoup pour ta réponse ! J'ai réussi à faire fonctionner le bazar :)