par
Victor BRITO » 14 nov. 2006, 18:16
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ête vente privé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é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 échoué. Veuillez réessayer plus tard.</p>
<?php
}
else{
?>
<p>Merci d'avoir pris le temps de ré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 échoué. Veuillez réessayer plus tard.</p>
<?php
}
else{
?>
<p>Merci pour votre ré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.
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]
<?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ête vente privé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é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 échoué. Veuillez réessayer plus tard.</p>
<?php
}
else{
?>
<p>Merci d'avoir pris le temps de ré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 échoué. Veuillez réessayer plus tard.</p>
<?php
}
else{
?>
<p>Merci pour votre ré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>
[/php]
Aucun problème du côté de MySQL ou des messages d'erreurs.