Validation d'un formulaire BDD + check-box

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 : Validation d'un formulaire BDD + check-box

par Sarawak » 20 oct. 2006, 19:55

Bonsoir,

J'ai suivi ton conseil de tester chaque valeur en utilisant une boucle et en verifiant si il existait au moins une valeur correspondant au début du nom de ma check-box
  	$sel_form = 0 ; 
      	foreach($_POST as $cle=>$val) {
      		if(substr($cle, 0, 5) == "cadit") {
  		$sel_form = $sel_form + 1 ;
  		}
  	}	
Si ma variable $sel_form reste à 0 c'est qu'aucune check box n'a été sélectionnée ==> donc message d'erreur.

Merci pour ton aide. Je ferme le message.

par Ryle » 20 oct. 2006, 12:34

Pour savoir si une checkbox a été cochée, il suffit de vérifier si elle est définie (isSet($_POST['ma_case']), une case non cochée n'est pas envoyée via le formulaire). Tel que c'est fait, il te faut malheureusement tester toutes tes checkbox une par une. Il te faudrait donc relancer ta requête, récupérer les valeurs, reconstruire tes noms et tester chaque case.

La meilleure solution à mon sens serait de renommer tes cases pour qu'elles aient toutes le même nom (avec des [] pour que php récupère le résultat sous forme de tableau), et ainsi savoir aisément si au moins une case a été cochée, voire même laquelle en spécifiant sa valeur :)
Je te recommande donc d'écrire tes cases ainsi :
echo '<input type="checkbox" name="cadit[]" value="' . $row[id_formation] . '">';
côté traitement du formulaire :
isSet($_POST['cadit']) => est vrai si au moins une case est cochée
foreach($_POST['cadit'] as $valeurCase) => te permet de boucler sur le tableau et de lire les valeurs des cases cochées :)

Validation d'un formulaire BDD + check-box

par Sarawak » 19 oct. 2006, 22:13

Bonsoir,

Voilà, je reprend le code d'un formulaire créé par une autre personne, afin d'y rajoutter des contrôles côté serveur.
J'ai un problème pour vérifier qu'au moins une check-box a été sélectionnée.

Le principe est le suivant. Je crée une ligne par enregistrement d'une BDD en y ajoutant une check-box pour sélectionner la ligne
<form id="formulaire" action="reservation.php5" method=post onsubmit="return verif();">
<div class="contenu" STYLE="top:220; left:30px; width:700px;">
  <p class="titre">Planning des formations</p>

  <table border=0 width=100% class=contenu>
<?
  $nb = 0;
  while($row = mysql_fetch_array($res)) {
?>
  <tr><td>
    <hr STYLE="color:#ff8718; background-color:#ff8718; border:0;" width=100%>
    <b>Type de formation : </b><?=$row[type_formation]?><br>
    <b>Durée :</b> <?=$row[duree]?> heures<br>
    <b>Planning :</b> <?=$row[planning]?><br>
    <b>Nombre de places :</b> <?=$row[maxclient]?> candidats<br><br>
    <?
      if($row[complet] == "N")
        echo("<img src=\"images/caddie.png\" align=left><input type=checkbox name=cadit" . $row[id_formation] . " value=1> Formation sélectionnée");
      else
        echo("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Complet");
    ?>
Plus loin, le formulaire est validé
<input type=submit value="Envoyer" name="reserv">
La validation des champs du formulaire s'effectue dans la même page en testant $reserv. (cela fonctionne pour tous les autres champs du formulaire)

Comment puis je faire afin de savoir si au moins une check-box a été cochée sachant que les check-box ne portent pas le même nom :?:

Merci