Aller au contenu

Maintenir la case cochée dans un formulaire


dorjee

Sujets conseillés

Voici un script php de formulaire simplifié pour permettre la réflexion de tous. Nota : le problème ne concerne pas ce formulaire globalement, mais plus précisément la question de maintenir la case cochée, lorsque le client l'a cochée, mais qu'il lui est rappelé qu'il doit remplir un autre champ, la page du formulaire étant alors réaffichée. Mais voici le code complet...

<?php include "crypt/functions.php"; ?>

<?php
// Adresse mail à indiquer ci-dessous
$email_webmaster = "monemail_AT_domain.com";
// === traitement des données du formulaire ===============
if (isset($_POST["envoyer"])){
// le formulaire a été soumis
$etat = "erreur";
// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur
// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur
// --- mise en forme des champs saisis dans le formulaire lors de sa soumission ---
if (isset($_POST["nomprenom"])) {
$_POST["nomprenom"]=trim(stripslashes($_POST["nomprenom"]));
}
// --- test de la validité des champs saisis ---
if (empty($_POST["nomprenom"])) {
// le nom d'utilisateur est vide
$erreur="Saisissez vos nom et prénom...";
}
[b]elseif (empty($_POST["acceptation_tou"])) {
// la case n'est pas cochée
$erreur="Vous devez accepter les conditions d'utilisation...";
}[/b]
//***************************
// insérer ici le test d'acceptation
//***************************
elseif (empty($_POST["code"])) {
// le code n'est pas saisi
$erreur="Saisissez le code de vérification...";
}
else {
// --- Vérification de la validité du code captcha ---
if (chk_crypt($_POST['code']))
// --- tous les champs sont correctement remplis : on pourra envoyer le mail ---
$etat="ok";
// --- Le code captcha n'est pas valide ---
else $erreur="Code de vérification non valide ...";
}
}
else {
// --- le formulaire n'a pas été soumis ---
$etat="attente";
}
// === fin de traitement des données du formulaire =======================================================
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Essai</title>
<style type="text/css"><!--
body {margin-left: 20px;
margin-top: 20px;
margin-right: 20px;
margin-bottom: 20px;}
--></style>
</head>

<body bgcolor="#ffffff">

<center>FORMULAIRE ESSAI</center><br>

<?php
if ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur
if ($etat=="erreur"){
//le formulaire a été soumis avec une erreur
echo "<center><font size=3 color=#ff0000 face=arial><b>".$erreur."</b></font></center>\n";
// afficher le message d'erreur
}
?>

<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">

<label for="nomprenom">Nom - Prénom :</label><br>
<input type="text" size="40" name="nomprenom" id="nomprenom" value="<?php
if (!empty($_POST["nomprenom"])) {
// le nom-prénom de l'expéditeur a été saisi : le réafficher
echo htmlspecialchars($_POST["nomprenom"],ENT_QUOTES);
}
?>" /><br><br>

[b]<input type="checkbox" name="acceptation_tou" id="acceptation_tou" value="<?php echo htmlspecialchars("Conditions utilisation acceptées");?>" /> <label for="acceptation_tou">J'ai lu et j'accepte les <a title="Afficher les Conditions d'utilisation dans une autre fenêtre" href="t-o-u.html" class="men" target="_blank">Conditions d'utilisation</a></label>[/b]<br>

<table width="90%" align="center" border="0" cellspacing="0" cellpadding="2">
<tr><td width=60%>
<?php dsp_crypt(0,1); ?></td>
<td><label for="code">Veuillez saisir le code* :</label><br />
<input type="text" id="code" name="code" /><br />
(lettres minuscules uniquement)</td></tr></table><br>

<center><input type="reset" name="delete" value="Effacer" /> <input type="submit" name="envoyer" value="Envoyer" /></center>

</form>

<?php
}
else {
// le formulaire a été soumis sans erreur, on envoie le mail
$entete = "From : ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n";
$entete .= "MIME-Version: 1.0";
$message="Provenance : ". $_SERVER['HTTP_REFERER'] . "\n";
$message.="Adresse IP : ". $_SERVER['REMOTE_ADDR'] . "\n";
$message.="Navigateur : ". $_SERVER['HTTP_USER_AGENT'] . "\n";
$message.="Nom-Prénom : ". $_POST["nomprenom"] . "\n";
[b]$message.="Conditions utilisation : ". $_POST["acceptation_tou"];[/b]
if (@mail($email_webmaster,$_POST["titre"],$message,$entete)){
// mail envoyé
echo "<br><br><center><font face=arial>Votre inscription a été envoyée. Nous allons bientôt la traiter, merci.</font></center>";
}
else {
// erreur lors de l'envoi du mail
echo "<br><br><font color=#ff0000 face=arial>Un problème s'est produit lors de l'envoi du formulaire d'inscription.</font>\n";
echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a>";
}
}
?>
</body>
</html>

Attention, vous devez aussi récupérer le répertoire "crypt" que vous trouverez en téléchargeant le code complet chez :

http://www.cryptographp.com/

Installez ce script php sur votre site (après l'avoir copié-collé dans un fichier texte et l'avoir appelé, par exemple, essai.php). Pensez aussi à indiquer votre adresse mail à la 3e ligne. En mettant le répertoire "crypt" et tout ce qu'il contient dans le même répertoire que ce fichier essai.php cela va marcher. Maintenant voici le problème.

L'utilisateur remplit le champ "nomprenom"

L'utilisateur coche la case à cocher

Mais l'utilisateur oublie de saisir le code captcha

en conséquence, la page du formulaire de réaffiche (se recharge) en affichant en rouge le message qui rappelle que "il faut saisir le code" !!!

au cours de ce rechargement de la page, le nomprenom est bien réaffiché, mais pas la case précédemment cochée (bien sûr sur ce formulaire d'essai c'est pas grave, mais imaginez un gros formulaire avec plusieurs cases à cocher, certaines cochées, d'autre pas par l'utilisateur... voyez le problème !

J'ai mis en gras le code qui concerne la case à cocher :

Affichage de la case à cocher dans le formulaire :

<input type="checkbox" name="acceptation_tou" id="acceptation_tou" value="<?php echo htmlspecialchars("Conditions utilisation acceptées");?>" /> <label for="acceptation_tou">J'ai lu et j'accepte les <a title="Afficher les Conditions d'utilisation dans une autre fenêtre" href="t-o-u.html" class="men" target="_blank">Conditions d'utilisation</a></label>

Vérification que la case à cocher est bien cochée (pour le cas ou la coche est obligatoire) :

elseif (empty($_POST["acceptation_tou"])) {
// la case n'est pas cochée
$erreur="Vous devez accepter les conditions d'utilisation...";
}

Ajout du value de la case à cocher au message à envoyer :

$message.="Conditions utilisation : ". $_POST["acceptation_tou"];

Donc, voilà le problème : comment maintenir la case à cocher entre deux rafraîchissements de la page, comme cela est fait pour le type text avec la variable nomprenom. La solution sera aussi valable pour le cas des select (liste de choix) et des boutons radio.

merci d'avance. :wub:

Lien vers le commentaire
Partager sur d’autres sites

Dans mon exemple la case coché est égale à 1 sinon 0

Récupération de la variable "deroulant" lors du post

$deroulant = $_POST['deroulant'];

La case coché lors du post reste coché

Menu déroulant ? : <input type="radio" name="deroulant" value="1" <?php if ($deroulant == 1) {echo "checked";} ?> />oui <input type="radio" name="deroulant" value="0" <?php if ($deroulant == 0) {echo "checked";} ?> />non

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Hé bien un grand merci, ça marche fort bien. J'ai adapté ça pour les checkbox et les select, voici les codes.

Pour les boutons radio donc :

Menu déroulant ? : <input type="radio" name="deroulant" value="Oui" <?php if ($deroulant == "Oui") {echo "checked";} ?> /> Oui   
<input type="radio" name="deroulant" value="Non" <?php if ($deroulant == "Non") {echo "checked";} ?> /> Non<br><br>

Je remets ton code avec une petite modif qui rend le message envoyé plus explicite, car au lieu de 1 ou 0 on a "Oui" ou "Non". De plus le formulaire se présente sans aucun bouton radio présélectionné, ça peut être intéressant dans certains cas (alors qu'avec "0" ça sélectionne le bouton, pourquoi ?...).

Pour les checkbox (case à cocher) :

<input type="checkbox" name="acceptation_tou" id="acceptation_tou" value="Conditions utilisation acceptées" <?php if ($acceptation_tou == "Conditions utilisation acceptées") {echo "checked";} ?> /> <label for="acceptation_tou">J'ai lu et j'accepte les <a title="Afficher les Conditions d'utilisation dans une autre fenêtre" href="t-o-u.html" class="men" target="_blank">Conditions d'utilisation</a></label>

Enfin, pour une liste à choix (select) :

<select  id="jour" name="jour">
<option value="0" <?php if ($jour == "0") {echo "selected";} ?> />Sélectionnez
<option value="Lundi" <?php if ($jour == "Lundi") {echo "selected";} ?> />Lundi
<option value="Mardi" <?php if ($jour == "Mardi") {echo "selected";} ?> />Mardi
<option value="Mercredi" <?php if ($jour == "Mercredi") {echo "selected";} ?> />Mercredi
<option value="Jeudi" <?php if ($jour == "Jeudi") {echo "selected";} ?> />Jeudi
<option value="Vendredi" <?php if ($jour == "Vendredi") {echo "selected";} ?> />Vendredi
<option value="Samedi" <?php if ($jour == "Samedi") {echo "selected";} ?> />Samedi
<option value="Dimanche" <?php if ($jour == "Dimanche") {echo "selected";} ?> />Dimanche
</select>

Fastoche !!! :P

Pour récupérer les réponses dans le message à envoyer, c'est comme d'habitude, on rajoute dans la partie basse du script :

$message.="Conditions utilisation : ". $_POST["acceptation_tou"] . "\n";
$message.="Menu déroulant : ". $_POST["deroulant"]. "\n";
$message.="Choix du jour : ". $_POST["jour"];

Ainsi, comme prévu, au rechargement de la page, bouton radio sélectionné, case cochée ou choix dans la liste sont bien maintenus dans l'état où le client les avait mis. Voilà, encore merci.

Modifié par dorjee
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...