Page 1 sur 1

Retour perpétuel au premier formulaire

Posté : 14 nov. 2006, 18:16
par Victor BRITO
Salut à tous!

Si vous vous souvenez de mes formulaires exposés hier, tant mieux, car j'ai encore un souci (d'une autre nature).

À la demande du client bénéficiaire, je dois changer l'ordre d'affichage des formulaires. Par conséquent, je modifie mon code.

À présent, le formulaire demandant l'adresse électronique apparaît en premier. Si le champ texte n'est pas renseigné, on maitient l'affichage; sinon (et après vérification que l'adresse est bien présente dans la base e données), on passe au formulaire comportant la question 1.

Or, si je valide ce dernier sans rien cocher, je retourne au premier formulaire au lieu de rester dans le même. Et il en est de même si je coche l'un des deux boutons (au lieu d'aller plus loin). En somme, c'est l'éternel retour qui fait plus plaisir à Nietzsche qu'à moi.

Voici le code:
<?php 
include ("mysql.php");

// Récupération des données des formulaires
$courriel=(isset($_POST['courriel'])
 && preg_match("/^([-_.0-9a-z]+)@([-_.0-9a-z]+)\.([a-z]{2,3})$/", $_POST['courriel']))? str_replace('@', '*at*', $_POST['courriel']): '';
$question1=(isset($_POST['question1']) && is_numeric($_POST['question1']))? $_POST['question1']: '';
$question2=(isset($_POST['question2']) && is_numeric($_POST['question2']))? $_POST['question2']: '';
$question3a=(isset($_POST['question3a']) && is_numeric($_POST['question3a']))? $_POST['question3a']: '';
$question3b=(isset($_POST['question3b']) && is_numeric($_POST['question3b']))? $_POST['question3b']: '';
$question3c=(isset($_POST['question3c']) && is_numeric($_POST['question3c']))? $_POST['question3c']: '';
$question4=(isset($_POST['question4']) && is_numeric($_POST['question4']))? $_POST['question4']: '';
$question4a=(isset($_POST['question4a']))? encodage_html($_POST['question4a']): '';
$question5a=(isset($_POST['question5a']) && is_numeric($_POST['question5a']))? $_POST['question5a']: '';
$question5b=(isset($_POST['question5b']) && is_numeric($_POST['question5b']))? $_POST['question5b']: '';
$question5c=(isset($_POST['question5c']) && is_numeric($_POST['question5c']))? $_POST['question5c']: '';
$question6=(isset($_POST['question6']) && is_numeric($_POST['question6']))? $_POST['question6']: '';
$question6a=(isset($_POST['question6a']))? encodage_html($_POST['question6a']): '';
$etape=(isset($_POST['etape']))? $_POST['etape']: '';
$etape=(isset($courriel) && !empty($courriel))? 1: '';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Enqu&ecirc;te vente priv&eacute;e - Questionnaire en ligne</title>
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>

<body>
<h1>Questionnaire</h1>
<?php 
if (isset($courriel) && !empty($courriel) && !empty($etape)){
  $requete_courriel="SELECT email FROM clients WHERE email='".mysql_real_escape_string($courriel)."'";
  $resultat_courriel=mysql_query($requete_courriel);
  if (mysql_num_rows($resultat_courriel)==0){
?>
<p>L'adresse ne figure pas sur notre base de donn&eacute;es.</p>
<?php 
  }
  else{
    // Affichage du deuxième formulaire
    if (!isset($question1) || empty($question1)){
?>
<!-- Affichage du formulaire de la question 1 (+champ caché "etape") -->
<?php 
    }
    else{
      if ($question1==2){
        // Affichage du dernier formulaire (questions 2 à 4)
        if (!isset($question2) || empty($question2)
|| !isset($question3a) || empty($question3a)
|| !isset($question3b) || empty($question3b)
|| !isset($question3c) || empty($question3c)
|| !isset($question4) || empty($question4)
|| ($question4==3 && (!isset($question4a) || empty($question4a)))){
?>
<!-- Affichage du formulaire des questions 2 à 4 (+champs cachés "etape" et "question1" -->
<?php 
        }
        else{
          if (isset($question5a) && !empty($question5a)
&& isset($question5b) && !empty($question5b) 
&& isset($question5c) && !empty($question5c) 
&& isset($question6) && !empty($question6) 
&& (($question6==2 && isset($question6a) && !empty($question6a)) 
xor ($question6!=2 && (!isset($question6a) || empty($question6a))))){
            $requete_reponses_insertion="INSERT INTO questionnaire
 (email, question1, question2,
 question3a, question3b, question3c,
 question4, question4a,
 question5a, question5b, question5c,
 question6, question6a) 
VALUES ('".mysql_real_escape_string($courriel)."', '".intval($question1)."', '".intval($question2)."',
 '".intval($question3a)."', '".intval($question3b)."', '".intval($question3c)."',
 '".intval($question4)."', '".mysql_real_escape_string(decodage_html($question4a))."',
 '".intval($question5a)."', '".intval($question5b)."', '".intval($question5c)."',
 '".intval($question6)."', '".mysql_real_escape_string(decodage_html($question6a))."')";
            mysql_query($requete_reponses_insertion);
            if (mysql_insert_id()==0){
?>
<p>La saisie a &eacute;chou&eacute;. Veuillez r&eacute;essayer plus tard.</p>
<?php 
            }
            else{
?>
<p>Merci d'avoir pris le temps de r&eacute;pondre, etc.</p>
<?php 
            }
          }
          // Affichage du dernier formulaire (questions 5 et 6)
          else{
?>
<!-- Affichage du formulaire des questions 5 et 6 (+champs cachés "etape" et "question1...4a" -->
<?php 
          }
        }
      }
      else{
        $requete_reponses_insertion="INSERT INTO questionnaire (question1)
 VALUES ('".intval($question1)."')";
        mysql_query($requete_reponses_insertion);
        if (mysql_insert_id()==0){
?>
<p>La saisie a &eacute;chou&eacute;. Veuillez r&eacute;essayer plus tard.</p>
<?php 
        }
        else{
?>
<p>Merci pour votre r&eacute;ponse, etc.</p>
<?php 
        }
      }
    }
  }
  mysql_free_result($resultat_courriel);
}
// Affichage du premier formulaire
else{
?>
<form id="questionnaire" method="post" action="questionnaire-en-ligne.php">
  <h2>Veuillez indiquer votre adresse e-mail</h2>
  <fieldset>
    <input id="courriel" name="courriel" type="text" />
  </fieldset>
  <p><input class="validation" type="image" src="validation-court.png" alt="Validez" /></p>
</form>
<?php 
}
?>
</body>
</html>
Aucun problème du côté de MySQL ou des messages d'erreurs.

Posté : 15 nov. 2006, 13:10
par Victor BRITO
Alors, on sèche? :? Quelqu'un aurait-il la gentillesse de m'aider, d'autant que cette réalisation est destinée à un client de la boîte où je travaille et qu'elle doit être prête dans les prochains jours. :oops:

Posté : 15 nov. 2006, 13:22
par DocType
Petit rappel avant tout : Cela a beau être pressé, on fait comme on peut !

Sinon, je pencherai pour
$courriel=(isset($_POST['courriel']) 
 && preg_match("/^([-_.0-9a-z]+)@([-_.0-9a-z]+)\.([a-z]{2,3})$/", $_POST['courriel']))? str_replace('@', '*at*', $_POST['courriel']): '';
essaie
$courriel=(!empty($_POST['courriel']) 
 && preg_match("/^([-_.0-9a-z]+)@([-_.0-9a-z]+)\.([a-z]{2,3})$/", $_POST['courriel']))? str_replace('@', '*at*', $_POST['courriel']): '';

Posté : 15 nov. 2006, 13:28
par Victor BRITO
Salut!
Petit rappel avant tout : Cela a beau être pressé, on fait comme on peut !
Il n'y a pas de souci là-dessus. :wink:
essaie
$courriel=(!empty($_POST['courriel']) 
 && preg_match("/^([-_.0-9a-z]+)@([-_.0-9a-z]+)\.([a-z]{2,3})$/", $_POST['courriel']))? str_replace('@', '*at*', $_POST['courriel']): '';
La modification que tu proposes n'y change rien. :(

Posté : 15 nov. 2006, 13:31
par DocType
vois avec des variables placées a des endroit strategiques pour voir par ou passe ton script, et d'afficher les variable dans ta page. Y'a que comme ça que tu y arrivera :wink:

Posté : 15 nov. 2006, 17:08
par Victor BRITO
Salut!

En changeant l'imbrication du code, j'ai pu résoudre le problème.