Redirection sous conditions cases à cocher

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 : Redirection sous conditions cases à cocher

par coxine » 19 sept. 2006, 14:20

Merci!
Alors mon petit "moineau" :wink: (je parle de l'avatar hein) merci de ton idée des sessions, effectivement, le header me fait perdre les données postées, c'est pour cela que je m'étais rabattue sur une redirection avec erreur=1 ou erreur=2.
Je vais tenter cela.

Nathaire : non je ne veux pas utiliser JS, d'une part car tous les navigateurs ne le supportent pas, et d'autre part, cela n'empeche pas l'envoi du formulaire avec les erreurs :wink: et il est très important de cocher cette case (type newsletter par exemple) :D

Je retourne à mes essais, je reviens avec ma copie !

par Ryle » 19 sept. 2006, 11:39

Groumpf... j'ai ma connexion qui yoyotte aujoud'hui.. v'la que je perds mes sessions entre deux pages :(

par Invité » 19 sept. 2006, 11:33

Pour la validation utilise le javascript, c'est tout aussi simple et tu peux tester ça avant le faire le post.
C'est un "plus" en effet, et cela permet à l'utilisateur de corriger avant de venir importuner le serveur avec un formulaire à moitié rempli, mais ça n'est en rien une solution de remplacement :)

Le controle des données reçues (controllées par php) est bien plus important que celui des données qui seront potentiellement envoyées (controllées par js)

par Nathaire » 19 sept. 2006, 11:14

Pour la validation utilise le javascript, c'est tout aussi simple et tu peux tester ça avant le faire le post.

par Ryle » 19 sept. 2006, 11:04

Je pense qu'il y a quand même plus simple que de faire des cas, les tests pouvant être totalement indépendant :)

Premier soucis en revanche, je viens de voir que tu fais un header() pour rediriger vers ton formulaire en cas d'erreur. Le problème de la redirection c'est que tu ne conserves pas les données qui ont été envoyées.
Il te faut soit les repasser en GET dans l'url, soit les stocker en session pour en disposer sur la page suivante, soit revoir ton code pour que le formulaire s'appelle lui même, fasse le traitement et ne redirige qu'en cas de succes. Tu aurais alors en cas d'erreur les données qui ont été postées sous le coude pour les réafficher (et le code donnée plus haut fonctionnerait beaucoup mieux ;))

par coxine » 19 sept. 2006, 09:06

Bon, je reviens un peu à la charge....
En fait, je ne m'en sors pas, carj e dois vérifier trois cases ](*,)
Tout d'abord, les deux boutons radio, puis la case à cocher.
Je n'arrive pas à conserver l'état coché par exemple du bouton radio, si l'on oublie de cocher la case.

Comment dois-je procéder ?
Dois-je afficher sous conditions les cases/boutons trois fois ?
1. Si j'ai cliqué sur le bouton, mais pas sur la case, alors j'affiche le bouton en état checked="checked" et mon message d'alerte sur la case.
2. Si j'ai cliqué sur le second bouton, mais pas sur la case, alors j'affiche le bouton en état checked="checked" et mon message d'alerte sur la case
3. et Enfin, si j'ai coché la case, mais pas le bouton 1 ou le bouton 2 alors, j'affiche l'état de la case Checked avec un message d'erreur pour les boutons ?

C'est cette piste que je dois prendre ? Ou bien il y a plus simple ?

Merci de vos lanternes ! :idea: :merci:

par coxine » 15 sept. 2006, 08:34

Merci à vous deux !
Mais ça marche po
:(
Jene comprends pas pourquoi, peut-être parce qu'en haut de code j'ai déjà posé les conditions avec les cases ?
et qu'ensuite dans le formulaire le message d'erreur + la condition (cocher si ce choix a été posté) est de trop ou mal placée ?
Je vais revoir tout ça !

par Ryle » 14 sept. 2006, 15:44

Le principe est quasiment le même pour tes case à cocher ou tes boutons radio que pour tes champs textes :)

Au lieu d'écrire la valeur dans l'attribut value="", tu vas utiliser la valeur pour savoir si tu dois écrire ou non le "checked" dans la balise. (De même que pour une liste déroulante avec "selected" sur l'option que tu veux sélectionner par défaut :))

Ce que tu as fait est bon et ce que disais Zeus est que si ton bouton n'est pas coché, c'est soit parce que $choix n'est pas égal à 1, soit parce que d'autres boutons du même nom on un "checked" également (dans ce cas le dernier sera toujours sélectionné)

Tu dois donc avoir quelque chose de la forme :
<?php
// récupérer la valeur envoyée par le formulaire (si aucune utiliser éventuellement une valeur par défaut)
$choix = isSet($_POST['choix']) ? $_POST['choix'] : $valeurParDefaut ;
...
?>

<input name="choix" type="radio" value="1" <?php echo(($choix==1) ? 'checked="checked"' : ''); ?> /> 
<input name="choix" type="radio" value="2" <?php echo(($choix==2) ? 'checked="checked"' : ''); ?> /> 
...
Faut bien penser à adapter le test à la valeur de l'input :)

par coxine » 14 sept. 2006, 12:44

Bonjour
J'avoue ne pas comprendre ta réponse ou bien moi-même je ne l'ai pas bien formulée.
Il s'agit d'un formulaire en méthode POST.
Et je souhaite, si qqu'un oublie de cocher un case ou sélectionner un bouton radio, que l'on reste sur la page et que les cases précédemment cochées le restent aussi.
Faire en qque sorte une sorte de echo() comme pour un champ de formulaire.
J'avoue ne pas savoir le faire pour les boutons et cases !

par zeus » 14 sept. 2006, 10:10

Est-ce que tu es sûr que la valeur de choix est bien égale à 1 ? ;)

Regarde le code HTML généré et dit nous si checked="checked" est présent ou non

par coxine » 14 sept. 2006, 10:07

Bon les vérifs sont ok, mais bien sur les cases cochées ne restent pas cochées...
J'ai initalisé les variables et je mets la condition :
<input name="choix" type="radio" value="1"<?php echo(($choix=="1") ? " checked=\"checked\"": null); ?>/>
Prkoa ça marche po ?
:?

par coxine » 14 sept. 2006, 09:03

Bonjour Mr Ryle ! Magohamoth !! whouw!
Vi ça faisait lgtps, entre les vacances et les vacances !!!
Là je m'y remets un peu. D'où ma question car j'ai du mal à m'y remettre ! Mais faut progresser hein
Merci pour la réponse, je rigole tjs autant sur les messages d'erreur !
D'ailleurs celui je n'arrive pas à l'afficher malgré le page.php?erreur=1, mais je pense qu'il ne s'applique qu'à l'instruction de boutons radios et non case à cocher.
Je vais plancher un peu ce matin ma copie, et je pense que je reviendrais avec d'autres questions ! :lol:
A+ :wink:

par Ryle » 13 sept. 2006, 12:51

Bonjour vous, ca faisait un moment dites donc :)

La case à cocher fonctionne comme le bouton radio : la valeur n'est envoyée que si elle est cochée. Il te suffit donc de tester la présence de celle-ci, et puisqu'elle indispensable, c'est la première chose que je ferais avant d'aller vérifier les boutons radio :)
<?php
if (!isset($_POST['case'])) { // si la case n'est pas définie, elle n'a pas été cochée
  echo "Non mais les champs obligatoires vous croyez que c'est fait pour les chiens ?"; // :P 
  ...
}
else { // la case a été cochée, tu peux reprendre ton script normalement
  if (!isset($_POST['choix'])) 
    ...
}?>

Redirection sous conditions cases à cocher

par coxine » 13 sept. 2006, 11:04

Bonjour à tous ! :D
J'essaye de faire une redirection sous conditions : à savoir, sur un groupe de boutons radio + une case à cocher obligatoire.
Le groupe est composé de deux boutons, je fais un redirect par "header"; par défaut, j'affiche un message d'erreur.
je n'arrive pas à poser la seconde condition obligatoire, à savoir, forcer à cocher la case.
Je vous livre un bout du code, merci de votre aide !
:)

Code : Tout sélectionner

<tr> <td><p><input type="radio" name="choix" value="1" /></p></td> <td><p><strong>Choix1</strong></p></td> </tr> <tr> <td><p><input type="radio" name="choix" value="2" /></p></td> <td><p><strong>Choix2</strong></p></td> </tr> <tr> <td><p><input name="case" type="checkbox" id="case" value="oui" /></p></td> <td><p>Merci de cocher cette case</p></td> </tr>
Et le code PHP de vérification
if (isset($_POST['continuer'])=="ok")
{
		if (!isset($_POST['choix']))
		$choix=""; else $choix=$_POST['choix'];
		switch($choix) 
			{
			case "1":
				if(!isset($_POST['action'])) 
				$_SESSION['action']="ENREGISTRER";//mémorise l'action
				header('Location: page1.php');
				break;
			case "2":		
				if(!isset($_POST['action'])) 
				$_SESSION['action']="ENREGISTRER";//mémorise l'action
				header('Location: page2.php');
				break;
			default : 
				header('Location: page.php?erreur=1');
				exit;
			}			
}