Page 1 sur 1

Une case à cocher qui ne fait pas passer à l'étape suivante

Posté : 12 avr. 2006, 09:01
par Victor BRITO
Salut à tous!

Soit un formulaire contenant une case à cocher et un bouton d'envoi de formulaire. Lorsque la case n'est pas cochée, le formulaire demeure affiché. Si elle est cochée, le formulaire cède la place à l'étape suivante (en l'occurence, un message).

Or, je n'obtiens qu'une page toute blanche dès le chargement de la page. :(

En voici le code:
<?php 
$message='';
if (!isset($_POST["checkbox"])) $checkbox=""; else $checkbox=$_POST["checkbox"];
if (!isset($_POST["etape"])) $etape=1; else $etape=$_POST["etape"];
if ($etape==1){
	if (!isset($_POST["checkbox"])) $etape--;
}
if ($etape==2) $message='Gagn&eacute;&nbsp;!';
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans nom</title>
</head>

<body>
<?php 
if ($etape==1){
?>
<form name="form1" method="post" action="">
  <input name="checkbox" type="checkbox"<?php if($checkbox) echo ' checked'; else echo ''; ?>>
  <input type="hidden" name="etape" value="<?php echo $etape ++ ?>">
  <input type="submit" name="Submit" value="Envoyer">
</form>
<?php 
}
else if ($etape==2) echo $message
?>
</body>
</html>

Posté : 12 avr. 2006, 09:52
par ouckileou
Tu n'affiches ton formulaire que si $etape == 1, or au début $etape est vide :
if (!isset($_POST["checkbox"])) $checkbox="";
si tu veux faire pointer un formulaire vers la même page, tu peux faire comme ça :
<form action="<?php echo _SERVER['PHP_SELF']; ?>" method="post">
C'est peut-être un peu plus propre que laisser vide ;)

Posté : 12 avr. 2006, 09:57
par Ryle
Hello !

Ton code m'a l'air un peu bizare si j'ai bien compris ce que tu veux faire... déjà lorsque tu fais le echo de "$etape++", il faut savoir que la valeur affichée est $etape et pas $etape+1 :
$etape = 1;
echo $etape++; // affiche 1 puis incrémente $etape
echo $etape; // affiche 2

// Si tu veux afficher la valeur incrémentée, il faut placer le ++ avant :
$etape = 1;
echo ++$etape; // affiche 2
Le 2nd problème que tu peux rencontrer est celui-ci : ton formulaire ne s'affiche que si $etape est égale à 1. Hors, au début de ton code, si $etape est égale à 1, et que la case n'est pas cochée, tu le fais passer à 0 :
if ($etape==1){ 
    if (!isset($_POST["checkbox"])) $etape--; 
} 

Posté : 12 avr. 2006, 13:41
par Victor BRITO
Salut!

J'ai modifié le code comme suit:
<?php
$message='';
if (!isset($_POST["checkbox"])) $checkbox=""; else $checkbox=$_POST["checkbox"];
if (!isset($_POST["etape"])) $etape=1; else $etape=$_POST["etape"];
if ($etape==1){
	if (!isset($_POST["checkbox"])) $etape=1; else $etape++;
}
if ($etape==2) $message='Gagn&eacute;&nbsp;!';
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans nom</title>
</head>

<body>
<?php 
if ($etape==1){
?>
<form name="form1" method="post" action="">
  <input name="checkbox" type="checkbox">
  <input type="hidden" name="etape" value="<?php if (!isset($_POST["checkbox"])) echo $etape; else echo ++$etape; ?>">
  <input type="submit" name="Submit" value="Envoyer">
</form>
<?php 
}
else if ($etape==2) echo $message
?>
</body>
</html>
Et ça marche nickel!

Merci. :D