Checkbox ne passant pas lors de la validation

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 : Checkbox ne passant pas lors de la validation

Re: Checkbox rebelles

par Teenoo » 09 sept. 2011, 09:23

Petit up car mon sujet semble être tombé dans l'oublie et j'ai grandement besoin de vos conseils :wink: Merci!

EDIT : exemple de formulaire sur le même moule.
<?php
// Couleur du texte des champs si erreur saisie utilisateur
$color_font_warn="#FF0000";
// Couleur de fond des champs si erreur saisie utilisateur
$color_form_warn="#FFCC66";
// Ne rien modifier ci-dessous si vous n’êtes pas certain de ce que vous faites !
$list['f_1']=array("mouton", "chat", "canard");
if(isset($_POST['submit'])){
	$erreur="";
	// Nettoyage des entrées
	while(list($var,$val)=each($_POST)){
	if(!is_array($val)){
		$$var=strip_tags($val);
	}else{
		while(list($arvar,$arval)=each($val)){
				$$var[$arvar]=strip_tags($arval);
			}
		}
	}
	// Formatage des entrées
	$f_2=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_2)));
	// Verification des champs
	if(!$f_1){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Test &raquo; requiert au moins une sélection.</span>";
		$errf_1=1;
	}
	if(strlen($f_2)<2){
		$erreur.="<li><span class='txterror'>Le champ &laquo; Test &raquo; est vide ou incomplet.</span>";
		$errf_2=1;
	}
	if($erreur==""){
		// Création du message
		$titre="Message de votre site";
		$tete="From:[email protected]\n";
		for($id=0; $id<count($list['f_1']); $id++){
			if($f_1[$id]==1){
				$corps.="Test : ".$list['f_1'][$id]."\n";
			}
		}
		$corps.="Test : ".$f_2."\n";
		if(mail("[email protected]", $titre, stripslashes($corps), $tete)){
			$ok_mail="true";
		}else{
			$erreur.="<li><span class='txterror'>Une erreur est survenue lors de l'envoi du message, veuillez refaire une tentative.</span>";
		}
	}
}
?>

<head><style type="text/css" media="screen">
INPUT { color: #000; font-size: 11px; font-family: verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; background-color: #EEEEEE }
SELECT { color: #000; font-size: 11px; font-family: verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; background-color: #EEEEEE }
TEXTAREA { color: #000; font-size: 11px; font-family: verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; background-color: #EEEEEE }
.txterror { color: black; font-size: 11px; font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular }
.txtform { color: black; font-size: 12px; font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular }
</style></head>

<body><? if($ok_mail=="true"){ ?>
	<table width='100%' border='0' cellspacing='1' cellpadding='1'>
		<tr><td><span class='txtform'>Le message ci-dessous nous a bien été transmis, et nous vous en remercions.</span></td></tr>
		<tr><td>&nbsp;</td></tr>
		<tr><td><tt><?echo nl2br(stripslashes($corps));?></tt></td></tr>
		<tr><td>&nbsp;</td></tr>
		<tr><td><span class='txtform'>Nous allons y donner suite dans les meilleurs délais.<br>A bientôt.</span></td></tr>
	</table>
<? }else{ ?>
<form action='<? echo $PHP_SELF ?>' method='post' name='Form'>
<table width='100%' border='0' cellspacing='1' cellpadding='1'>
<? if($erreur){ ?><tr><td colspan='2' bgcolor='red'><span class='txterror'><font color='white'><b>&nbsp;ERREUR, votre message n'a pas été transmis</b></font></span></td></tr><tr><td colspan='2'><ul><?echo$erreur?></ul></td></tr><?}?>
<tr><td colspan='2'><span class='txterror'>Les champs marqué d'un * sont obligatoires</span></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Test* :</span></td><td>
<table border='0' cellspacing='0' cellpadding='0'>
<? for($id=0;$id<count($list['f_1']);$id++){
if($f_1[$id]==1){$ct="checked";}
print("<tr><td><input ".$ct." type='checkbox' name='f_1[$id]' value='1' border='0'></td><td><span class='txtform'>".$list[f_1][$id]."</span></td></tr>");
unset($ct);
}?>
</table>
</td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Test* :</span></td><td><input type='text' style='width:200 <?if($errf_2==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_2' value='<?echo stripslashes($f_2);?>' size='24' border='0'></td></tr>
<tr><td align='right' width='30%'></td><td><input type='submit' name='submit' value='Envoyer' border='0'></td></tr>
</table>
</form>
<? } ?></body>

Re: Checkbox rebelles

par Teenoo » 07 sept. 2011, 15:11

Hum... j'y ai pensé mais je bloque du coup sur ce morceau de code.
<?php for($id=0;$id<count($list['f_26']);$id++){
if($f_26[$id]==1){$ct="checked";}
print("<input ".$ct." type='checkbox' name='f_26[$id]' value='1' border='0'><label class='case'>".$list[f_26][$id]."</label>");
unset($ct);
}?>
Le but étant que "checked" soit inséré et reste après validation du formulaire car du coup ce dernier ne peut jamais être envoyé (les choix par case étant obligatoire). Si j'enlève le caractère obligatoire bien sûr la valeur n'est pas récupéré dans le mail.

Code de la liste à afficher :
$list['f_26']=array("SA","SARL","EIRL","EI","Autre");
Code pour l'intégration dans le mail :
for($id=0; $id<count($list['f_26']); $id++){
			if($f_26[$id]==1){
				$corps.="Forme Juridique : ".$list['f_26'][$id]."\n";
			}
		}
Merci pour vos lumières :D

Remarque : pas de soucis avec les "input text" et "textarea"

Re: Checkbox rebelles

par moogli » 06 sept. 2011, 19:14

salut,

une idée simple : utilisation d'une méthode de codage qui n'est "universelle" en gros je pense à un codage pour registers globals = on alors que ce n'est pas le cas par défaut de php et donc la différence est dû a une configuration des serveurs différentes :)

@+

Checkbox ne passant pas lors de la validation

par Teenoo » 06 sept. 2011, 13:27

Bonjour,

j'ai créé un long et lourd formulaire qui me pose quelques soucis au niveau de mes checkbox... Impossible de les garder en mémoire après validation et de récupérer la valeur. Je retourne le soucis dans tous les sens je ne trouve aucune solution : ce n'est pas un soucis de compatibilité PHP4/5, pas un problème de code car sous OVH (en PHP5) il marche mais pas sur Hostpapa ni sur mon serveur local (PHP5 tous les deux). #-o

Une idée ? Je deviens chèvre !

Merci beaucoup :D