[RESOLU] Formulaire checkbox + input text

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Formulaire checkbox + input text

Re: Formulaire checkbox + input text

par PortgasDKiba » 27 févr. 2015, 19:39

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

Re: Formulaire checkbox + input text

par Ryle » 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');

Formulaire checkbox + input text

par PortgasDKiba » 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 :)