Questionnaire sautant toutes les étapes pour la dernière

Mammouth du PHP | 2937 Messages

18 oct. 2006, 11:55

Salut à tous!

Pour un site pro, je dois mettre en place un questionnaire comportant des dizaines et des dizaines de champs à remplir. Pour simplifier et alléger le fichier, j'ai divisé le questionnaire en plusieurs étapes et créé des fichiers séparés pour l'affichage des morceaux de formulaire.

Or, lorsqu'on appelle la page dudit questionnaire, ce n'est pas l'étape 1 qui est affichée, mais la toute dernière, qui remercie d'avoir rempli le questionnaire! :shock:

Je me demande ce qui peut bien clocher dans le code suivant (prévoyez de l'aspirine, on ne sait jamais... :oops: ).
<?php 
include ("fonctions/encodage-html.php");

  // Définition des champs du formulaire (avec protection de l'adresse électronique, en remplaçant @ par *at*)
  $nom=(isset($_POST['nom']))? strtoupper(encodage_html($_POST['nom'])): '';
  $prenom=(isset($_POST['prenom']))? strtoupper(encodage_html($_POST['prenom'])): '';
  $naissance=(isset($_POST['naissance']) && ereg("([0-3][0-9])-([0-1][0-9])-([0-9]{4})", $_POST['naissance']))? $_POST['naissance']: '';
  $adresse=(isset($_POST['adresse']))? strtoupper(encodage_html($_POST['adresse'])): '';
  $code_postal=(isset($_POST['code_postal']) && is_numeric($_POST['code_postal']))? $_POST['code_postal']: '';
  $ville=(isset($_POST['ville']))? strtoupper(encodage_html($_POST['ville'])): '';
  $telephone_fixe=(isset($_POST['telephone_fixe']))? $_POST['telephone_fixe']: '';
  $telephone_mobile=(isset($_POST['telephone_mobile']))? $_POST['telephone_mobile']: '';
  $courriel=(isset($_POST['courriel']))? str_replace('@', '*at*', $_POST['courriel']): '';
  $situation=(isset($_POST['situation']))? $_POST['situation']: '';
  $personne_foyer=(isset($_POST['personne_foyer']) && is_numeric($_POST['personne_foyer']))? $_POST['personne_foyer']: '';
  $enfant_foyer=(isset($_POST['enfant_foyer']) && is_numeric($_POST['personne_foyer']))? $_POST['enfant_foyer']: '';
  $profession=(isset($_POST['profession']))? encodage_html($_POST['profession']): '';
  $profession_conjoint=(isset($_POST['profession_conjoint']))? encodage_html($_POST['profession_conjoint']): '';
  $naissance_enfant1=(isset($_POST['naissance_enfant1']))? $_POST['naissance_enfant1']: '';
  $naissance_enfant2=(isset($_POST['naissance_enfant2']))? $_POST['naissance_enfant2']: '';
  $naissance_enfant3=(isset($_POST['naissance_enfant3']))? $_POST['naissance_enfant3']: '';
  $naissance_enfant4=(isset($_POST['naissance_enfant4']))? $_POST['naissance_enfant4']: '';
  $naissance_enfant5=(isset($_POST['naissance_enfant5']))? $_POST['naissance_enfant5']: '';
  $revenu=(isset($_POST['revenu']))? $_POST['revenu']: '';
  $habitation=(isset($_POST['habitation']))? $_POST['habitation']: '';
  $proprietaire=(isset($_POST['proprietaire']))? $_POST['proprietaire']: '';
  $chauffage=(isset($_POST['chauffage']))? $_POST['chauffage']: '';
  $piscine=(isset($_POST['piscine']))? $_POST['piscine']: '';
  $permis=(isset($_POST['permis']))? $_POST['permis']: '';
  $vehicule=(isset($_POST['vehicule']))? $_POST['vehicule']: '';
  $vehicule_foyer=(isset($_POST['vehicule_foyer']) && is_numeric($_POST['vehicule_foyer']) && $_POST['vehicule_foyer']!=0)? $_POST['vehicule_foyer']: '';
  $vehicule_marque=(isset($_POST['vehicule_marque']))? encodage_html($_POST['vehicule_marque']): '';
  $vehicule_modele=(isset($_POST['vehicule_modele']))? encodage_html($_POST['vehicule_modele']): '';
  $vehicule_achat=(isset($_POST['vehicule_achat']))? $_POST['vehicule_achat']: '';
  $autoroute=(isset($_POST['autoroute']))? $_POST['autoroute']: '';
  $station_service=(isset($_POST['station_service']))? encodage_html($_POST['station_service']): '';
  $ordinateur=(isset($_POST['ordinateur']))? $_POST['ordinateur']: '';
  $ordinateur_achat=(isset($_POST['ordinateur_achat']))? $_POST['ordinateur_achat']: '';
  $ordinateur_pc=(isset($_POST['ordinateur_pc']))? $_POST['ordinateur_pc']: '';
  $internet=(isset($_POST['internet']))? $_POST['internet']: '';
  $internet_asdl=(isset($_POST['internet_adsl']))? $_POST['internet_adsl']: '';
  $internet_forfait=(isset($_POST['internet_forfait']))? $_POST['internet_forfait']: '';
  $internet_operateur=(isset($_POST['internet_operateur']))? encodage_html($_POST['internet_operateur']): '';
  $internet_site1=(isset($_POST['internet_site1']))? encodage_html($_POST['internet_site1']): '';
  $internet_site2=(isset($_POST['internet_site2']))? encodage_html($_POST['internet_site2']): '';
  $internet_site3=(isset($_POST['internet_site3']))? encodage_html($_POST['internet_site3']): '';
  $internet_site4=(isset($_POST['internet_site4']))? encodage_html($_POST['internet_site4']): '';
  $mobile=(isset($_POST['mobile']))? $_POST['mobile']: '';
  $mobile_achat=(isset($_POST['mobile_achat']))? $_POST['mobile_achat']: '';
  $mobile_marque=(isset($_POST['mobile_marque']))? encodage_html($_POST['mobile_marque']): '';
  $mobile_operateur=(isset($_POST['mobile_operateur']))? $_POST['mobile_operateur']: '';
  $mobile_forfait=(isset($_POST['mobile_forfait']))? $_POST['mobile_forfait']: '';
  $mobile_wap=(isset($_POST['mobile_wap']))? $_POST['mobile_wap']: '';
  $tv=(isset($_POST['tv']))? $_POST['tv']: '';
  $tv_canal=(isset($_POST['tv_canal']))? $_POST['tv_canal']: '';
  $tv_cable=(isset($_POST['tv_cable']))? $_POST['tv_cable']: '';
  $tv_satellite=(isset($_POST['tv_satellite']))? $_POST['tv_satellite']: '';
  $vpc=(isset($_POST['vpc']))? $_POST['vpc']: '';
  $infometeo=(isset($_POST['infometeo']))? $_POST['infometeo']: '';
  $infotrafic=(isset($_POST['infotrafic']))? $_POST['infotrafic']: '';
  $taxi=(isset($_POST['taxi']))? $_POST['taxi']: '';
  $bourse=(isset($_POST['bourse']))? $_POST['bourse']: '';
  $parfum=(isset($_POST['parfum']))? $_POST['parfum']: '';
  $parfum_marque1=(isset($_POST['parfum_marque1']))? encodage_html($_POST['parfum_marque1']): '';
  $parfum_marque2=(isset($_POST['parfum_marque2']))? encodage_html($_POST['parfum_marque2']): '';
  $maquillage=(isset($_POST['maquillage']))? $_POST['maquillage']: '';
  $maquillage_rouge=(isset($_POST['maquillage_rouge']))? encodage_html($_POST['maquillage_rouge']): '';
  $maquillage_mascara=(isset($_POST['maquillage_mascara']))? encodage_html($_POST['maquillage_mascara']): '';
  $maquillage_fond=(isset($_POST['maquillage_fond']))? encodage_html($_POST['maquillage_fond']): '';
  $creme=(isset($_POST['creme']))? $_POST['creme']: '';
  $creme_marque=(isset($_POST['creme_marque']))? encodage_html($_POST['creme_marque']): '';
  $peau=(isset($_POST['peau']))? $_POST['peau']: '';
  $allergie=(isset($_POST['allergie']))? $_POST['allergie']: '';
  $allergie_type=(isset($_POST['allergie_type']))? encodage_html($_POST['allergie_type']): '';
  $boisson=(isset($_POST['boisson']))? encodage_html($_POST['boisson']): '';
  $cereale=(isset($_POST['cereale']))? encodage_html($_POST['cereale']): '';
  $viande=(isset($_POST['viande']))? encodage_html($_POST['viande']): '';
  $confiserie=(isset($_POST['confiserie']))? encodage_html($_POST['confiserie']): '';
  $vetement=(isset($_POST['vetement']))? encodage_html($_POST['vetement']): '';
  $supermarche=(isset($_POST['supermarche']))? encodage_html($_POST['supermarche']): '';
  $enseigne=(isset($_POST['enseigne']))? encodage_html($_POST['enseigne']): '';
  $tabac=(isset($_POST['tabac']))? $_POST['tabac']: '';
  $tabac_consommation=(isset($_POST['tabac_consommation']) && is_numeric($_POST['tabac_consommation']))? encodage_html($_POST['tabac_consommation']): '';
  $tabac_marque=(isset($_POST['tabac_marque']))? encodage_html($_POST['tabac_marque']): '';

  // Définition des menus déroulants
  $choix_oui=array('OUI', 'NON');
  $choix_situation=array('MARIÉ(E)', 'VEUF(VE)', 'DIVORCÉ(E)', 'CÉLIBATAIRE', 'EN CONCUBINAGE', 'PACSÉ(E)');
  $choix_revenu=array('MOINS DE 3000 EUROS', 'ENTRE 3000 ET 5000 EUROS', 'ENTRE 5000 ET 10 000 EUROS', 'ENTRE 10 000 ET 30 000 EUROS', 'PLUS DE 30 000 EUROS');
  $choix_habitation=array('APPARTEMENT', 'PAVILLON');
  $choix_proprietaire=array('LOCATAIRE', 'PROPRIÉTAIRE');
  $choix_chauffage=array('CENTRAL', 'ÉLECTRIQUE');
  $choix_vehicule_achat=array('NEUF', 'D\'OCCASION');
  $choix_ordinateur_pc=array('PC', 'MAC');
  $choix_internet_forfait=array('5H', '10H', '20H', '50H', 'ILLIMITÉ', 'À LA CARTE');
  $choix_mobile_operateur=array('ORANGE', 'SFR', 'BOUYGUES TELECOM');
  $choix_mobile_forfait=array('CARTE LIBRE', '45 MINUTES', '1 HEURE', '1 HEURE 30', '2 HEURES', '3 HEURES', '4 HEURES', '5 HEURES OU PLUS');
  $choix_peau=array('GRASSE', 'MIXTE', 'SÈCHE', 'NORMALE');
  
  // Étapes de remplissage du formulaire
  if (!isset($nom) || !isset($prenom) || !isset($naissance) || !isset($adresse) || !isset($code_postal) || !isset($ville) || !isset($courriel) || !isset($situation) || !isset($personne_foyer) || !isset($enfant_foyer)) $etape=1;
  
  // Étape 1: données personnelles
  if (isset($nom) && isset($prenom) && isset($naissance) && isset($adresse) && isset($code_postal) && isset($ville) && isset($courriel) && isset($situation) && isset($personne_foyer) && isset($enfant_foyer)) $etape=2; else $etape=1;
  
  // Étape 2: données personnelles (suite)
  /*if (isset($profession) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)) $etape=3; else $etape=2;*/
  if (!ereg("VEU|DIV|CÉL", $situation)){
    switch ($enfant_foyer){
      case 0:
        switch (isset($profession) && isset($profession_conjoint) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
      case 1:
        switch (isset($profession) && isset($profession_conjoint) && isset($naissance_enfant1) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
      case 2:
        switch (isset($profession) && isset($profession_conjoint) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
      case 3:
        switch (isset($profession) && isset($profession_conjoint) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
      case 4:
        switch (isset($profession) && isset($profession_conjoint) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($naissance_enfant4) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
      case 5:
        switch (isset($profession) && isset($profession_conjoint) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($naissance_enfant4) && isset($naissance_enfant5) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
    }
  }
  else{
    switch ($enfant_foyer){
      case 0:
        switch (isset($profession) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
      case 1:
        switch (isset($profession) && isset($naissance_enfant1) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
      case 2:
        switch (isset($profession) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
      case 3:
        switch (isset($profession) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
      case 4:
        switch (isset($profession) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($naissance_enfant4) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
      case 5:
        switch (isset($profession) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($naissance_enfant4) && isset($naissance_enfant5) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
          case true: $etape=3; break;
          default: $etape=2; break;
        }
      break;
    }
  }
  
  // Étape 3: permis et véhicule
  if (isset($permis) && isset($vehicule) && $vehicule=='OUI') $etape=4; else if (isset($permis) && isset($vehicule) && $vehicule=='NON') $etape=5; else $etape=3;
  
  // Étape 4: véhicule (suite)
  if (isset($vehicule_foyer) && isset($vehicule_marque) && isset($vehicule_modele) && isset($vehicule_achat) && isset($autoroute) && isset($station_service)) $etape=5; else $etape=4;
  
  // Étape 5: ordinateur
  if (isset($ordinateur)) $etape=6; else $etape=5;
  
  // Étape 6: ordinateur (suite)
  if ($ordinateur=='NON'){
    if (isset($ordinateur_achat)) $etape=8; else $etape=6;
  }
  else {
    if (isset($ordinateur_pc) && isset($internet) && $internet=='NON') $etape=8; else if (isset($ordinateur_pc) && isset($internet) && $internet=='OUI') $etape=7; else $etape=6;
  }
  
  // Étape 7: Internet
  if (isset($internet_adsl) && isset($internet_forfait) && isset($internet_operateur) && isset($internet_site1) && isset($internet_site2) && isset($internet_site3) && isset($internet_site4)) $etape=8; else $etape=7;
  
  // Étape 8: mobile
  if (isset($mobile)) $etape=9; else $etape=8;
  
  // Étape 9: mobile (suite)
  if ($mobile=='NON'){
    if (isset($mobile_achat)) $etape=10; else $etape=9;
  }
  else {
    if (isset($mobile_marque) && isset($mobile_operateur) && isset($mobile_forfait) && isset($mobile_wap)) $etape=10; else $etape=9;
  }
  
  // Étape 10: télévision
  if (isset($tv) && $tv=='NON') $etape=12; else if (isset($tv) && $tv=='OUI') $etape=11; else $etape=10;
  
  // Étape 11: télévision (suite)
  if (isset($tv_cananl) && isset($tv_cable) && isset($tv_satellite)) $etape=12; else $etape=11;
  
  // Étape 12: services
  if (isset($vpc) && isset($infometeo) && isset($infotrafic) && isset($taxi) && isset($bourse)) $etape=13; else $etape=12;
  
  // Étape 13: parfum
  if (isset($parfum) && $parfum=='NON') $etape=15; else if (isset($parfum) && $parfum=='OUI') $etape=14; else $etape=13;
  
  // Étape 14: parfum (suite)
  if (isset($parfum_marque1) && isset($parfum_marque2)) $etape=15; else $etape=14;
  
  // Étape 15: maquillage
  if (isset($maquillage) && $maquillage=='NON') $etape=17; else if (isset($maquillage) && $maquillage=='OUI') $etape=16; else $etape=15;
  
  // Étape 16: maquillage (suite)
  if (isset($maquillage_rouge) && isset($maquillage_mascara) && isset($maquillage_fond)) $etape=17; else $etape=16;
  
  // Étape 17: crème
  if (isset($creme) && $creme=='NON') $etape=19; else if (isset($creme) && $creme=='OUI') $etape=18; else $etape=17;
  
  // Étape 18: crème (suite)
  if (isset($creme_marque)) $etape=19; else $etape=18;
  
  // Étape 19: type de peau et allergies
  if (isset($peau) && isset($allergie) && $allergie=='NON') $etape=21; else if (isset($peau) && isset($allergie) && $allergie=='OUI') $etape=20; else $etape=19;
  
  // Étape 20: allergies (suite)
  if (isset($allergie_type)) $etape=21; else $etape=20;
  
  // Étape 21: consommation
  if (isset($boisson) && isset($cereale) && isset($viande) && isset($confiserie) && isset($vetement) && isset($supermarche) && isset($enseigne)) $etape=22; else $etape=21;
  
  // Étape 22: tabac
  if (isset($tabac) && $tabac='NON') $etape=24; else if (isset($tabac) && $tabac=='OUI') $etape=23; else $etape=22;
  
  // Étape 23: tabac (suite)
  if (isset($tabac_consommation) && isset($tabac_marque)) $etape=24; else $etape=24;
  
  // Affichage de la page
  switch ($etape){
    case 1: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape1.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 2: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape2.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 3: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape3.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 4: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape4.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 5: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape5.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 6: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape6.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 7: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape7.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 8: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape8.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 9: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape9.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 10: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape10.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 11: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape11.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 12: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape12.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 13: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape13.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 14: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape14.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 15: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape15.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 16: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape16.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 17: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape17.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 18: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape18.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 19: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape19.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 20: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape20.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 21: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape21.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 22: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape22.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 23: include ("biblio/inscription-client-mystere-en-tete.php"); include ("biblio/inscription-client-mystere-etape23.php"); include ("biblio/inscription-client-mystere-pied.php"); break;
    case 24: include ("biblio/inscription-client-mystere-etape24.php"); break;
  }
?>
Soit dit en passant, aucune erreur ne se produit en provenance des fichiers inclus.

ant
Eléphant du PHP | 161 Messages

18 oct. 2006, 11:59

ah oui effectivement, c'est pas de l'aspirine qu'il faut là mais la boite d'efferalgan au grand complet :shock: :lol:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 oct. 2006, 12:17

En théorie, avec ce que je viens de prendre je n'aurais plus mal à la tête pendant 3 mois ;) Ceci dit voilà ce que j'ai trouvé :
if (isset($tabac_consommation) && isset($tabac_marque)) $etape=24; else $etape=24; 
Donc si c'est vrai je vais à l'étape 24, mais si c'est faux, je vais à l'étape 24 !! ;)

Ceci dit, à moins de mettre des elseif partout, ton $etape ne sera jamais égal à 1, vu que les tests suivant en écrasent innévitablement la valeur dans le if ou dans le else. Ca serait pas plus simple de mettre un champ caché avec la valeur de l'étape à laquelle en est l'utilisateur plutôt que de faire à chaque fois tout ces tests bizares ?

Enfin et histoire de simplifier ton code (et soulager ceux qui le maintiendront de migraines carrabinée) , ne serait il pas plus simple de dégager le dernier switch et de simplement faire :
include ("biblio/inscription-client-mystere-en-tete.php"); 
include ("biblio/inscription-client-mystere-etape"+$etape+".php"); 
include ("biblio/inscription-client-mystere-pied.php"); 

Mammouth du PHP | 2937 Messages

18 oct. 2006, 13:02

Salut, Ryle!

J'ai ajouté un champ caché à chaque morceau de formulaire comme suit:
<input id="etape" name="etape" type="hidden" value="<?php echo $etape ?>" />
et modifié le code comme suit (le reste du code étant inchangé):
<?php 
  // Étapes de remplissage du formulaire
  $etape=(isset($_POST['etape'])&& is_numeric($_POST['etape']))? $_POST['etape']: 1;
  
  // Étape 1: données personnelles
  if ($etape==1){
    if (isset($nom) && isset($prenom) && isset($naissance) && isset($adresse) && isset($code_postal) && isset($ville) && isset($courriel) && isset($situation) && isset($personne_foyer) && isset($enfant_foyer)) $etape=2; else $etape=1;
  }
  
  // Étape 2: données personnelles (suite)
  if ($etape==2){
    if (!ereg("VEU|DIV|CÉL", $situation)){
      switch ($enfant_foyer){
        case 0:
          switch (isset($profession) && isset($profession_conjoint) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
        case 1:
          switch (isset($profession) && isset($profession_conjoint) && isset($naissance_enfant1) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
        case 2:
          switch (isset($profession) && isset($profession_conjoint) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
        case 3:
          switch (isset($profession) && isset($profession_conjoint) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
        case 4:
          switch (isset($profession) && isset($profession_conjoint) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($naissance_enfant4) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
        case 5:
          switch (isset($profession) && isset($profession_conjoint) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($naissance_enfant4) && isset($naissance_enfant5) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
      }
    }
    else{
      switch ($enfant_foyer){
        case 0:
          switch (isset($profession) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
        case 1:
          switch (isset($profession) && isset($naissance_enfant1) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
        case 2:
          switch (isset($profession) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
        case 3:
          switch (isset($profession) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
        case 4:
          switch (isset($profession) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($naissance_enfant4) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
        case 5:
          switch (isset($profession) && isset($naissance_enfant1) && isset($naissance_enfant2) && isset($naissance_enfant3) && isset($naissance_enfant4) && isset($naissance_enfant5) && isset($revenu) && isset($habitation) && isset($proprietaire) && isset($chauffage) && isset($piscine)){
            case true: $etape=3; break;
            default: $etape=2; break;
          }
        break;
      }
    }
  }
  
  // Étape 3: permis et véhicule
  if ($etape==3){
    if (isset($permis) && isset($vehicule) && $vehicule=='OUI') $etape=4; else if (isset($permis) && isset($vehicule) && $vehicule=='NON') $etape=5; else $etape=3;
  }
  
  // Étape 4: véhicule (suite)
  if ($etape==4){
    if (isset($vehicule_foyer) && isset($vehicule_marque) && isset($vehicule_modele) && isset($vehicule_achat) && isset($autoroute) && isset($station_service)) $etape=5; else $etape=4;
  }
  
  // Étape 5: ordinateur
  if ($etape==5){
    if (isset($ordinateur)) $etape=6; else $etape=5;
  }
  
  // Étape 6: ordinateur (suite)
  if ($etape==6){
    if ($ordinateur=='NON'){
      if (isset($ordinateur_achat)) $etape=8; else $etape=6;
    }
    else {
      if (isset($ordinateur_pc) && isset($internet) && $internet=='NON') $etape=8; else if (isset($ordinateur_pc) && isset($internet) && $internet=='OUI') $etape=7; else $etape=6;
    }
  }
  
  // Étape 7: Internet
  if ($etape==7){
    if (isset($internet_adsl) && isset($internet_forfait) && isset($internet_operateur) && isset($internet_site1) && isset($internet_site2) && isset($internet_site3) && isset($internet_site4)) $etape=8; else $etape=7;
  }
  
  // Étape 8: mobile
  if ($etape==8){
    if (isset($mobile)) $etape=9; else $etape=8;
  }
  
  // Étape 9: mobile (suite)
  if ($etape==9){
    if ($mobile=='NON'){
      if (isset($mobile_achat)) $etape=10; else $etape=9;
    }
    else {
      if (isset($mobile_marque) && isset($mobile_operateur) && isset($mobile_forfait) && isset($mobile_wap)) $etape=10; else $etape=9;
    }
  }

  // Étape 10: télévision
  if ($etape==10){
    if (isset($tv) && $tv=='NON') $etape=12; else if (isset($tv) && $tv=='OUI') $etape=11; else $etape=10;
  }
  
  // Étape 11: télévision (suite)
  if ($etape==11){
    if (isset($tv_cananl) && isset($tv_cable) && isset($tv_satellite)) $etape=12; else $etape=11;
  }
  
  // Étape 12: services
  if ($etape==12){
    if (isset($vpc) && isset($infometeo) && isset($infotrafic) && isset($taxi) && isset($bourse)) $etape=13; else $etape=12;
  }
  
  // Étape 13: parfum
  if ($etape==13){
    if (isset($parfum) && $parfum=='NON') $etape=15; else if (isset($parfum) && $parfum=='OUI') $etape=14; else $etape=13;
  }
  
  // Étape 14: parfum (suite)
  if ($etape==14){
    if (isset($parfum_marque1) && isset($parfum_marque2)) $etape=15; else $etape=14;
  }
  
  // Étape 15: maquillage
  if ($etape==15){
    if (isset($maquillage) && $maquillage=='NON') $etape=17; else if (isset($maquillage) && $maquillage=='OUI') $etape=16; else $etape=15;
  }
  
  // Étape 16: maquillage (suite)
  if ($etape==16){
    if (isset($maquillage_rouge) && isset($maquillage_mascara) && isset($maquillage_fond)) $etape=17; else $etape=16;
  }
  
  // Étape 17: crème
  if ($etape==17){
    if (isset($creme) && $creme=='NON') $etape=19; else if (isset($creme) && $creme=='OUI') $etape=18; else $etape=17;
  }
  
  // Étape 18: crème (suite)
  if ($etape==18){
    if (isset($creme_marque)) $etape=19; else $etape=18;
  }
  
  // Étape 19: type de peau et allergies
  if ($etape==19){
    if (isset($peau) && isset($allergie) && $allergie=='NON') $etape=21; else if (isset($peau) && isset($allergie) && $allergie=='OUI') $etape=20; else $etape=19;
  }
  
  // Étape 20: allergies (suite)
  if ($etape==20){
    if (isset($allergie_type)) $etape=21; else $etape=20;
  }
  
  // Étape 21: consommation
  if ($etape==21){
    if (isset($boisson) && isset($cereale) && isset($viande) && isset($confiserie) && isset($vetement) && isset($supermarche) && isset($enseigne)) $etape=22; else $etape=21;
  }
  
  // Étape 22: tabac
  if ($etape==22){
    if (isset($tabac) && $tabac='NON') $etape=24; else if (isset($tabac) && $tabac=='OUI') $etape=23; else $etape=22;
  }
  
  // Étape 23: tabac (suite)
  if ($etape==23){
    if (isset($tabac_consommation) && isset($tabac_marque)) $etape=24; else $etape=23;
  }
  
  // Affichage de la page
  if ($etape<24){
    include ("biblio/inscription-client-mystere-en-tete.php");
    include ("biblio/inscription-client-mystere-etape$etape.php");
    include ("biblio/inscription-client-mystere-pied.php");
  }
  else include ("biblio/inscription-client-mystere-etape24.php");
?>
À présent, c'est l'étape 3 qui est directement affichée. :shock:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

18 oct. 2006, 14:20

Il y a une appli en open source et en PHP qui permet de faire des quizz, il me semble...
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 oct. 2006, 15:16

Tu dois effectivement avoir un soucis avec tes isSet(). Cette fonction t'informe de l'existance d'une variable, et puisque toutes tes variables sont définies au début de ton script, elles retournent toutes "vrai" :
<?php
isSet($nom); // retourne faux
$nom=(isset($_POST['nom']))? strtoupper(encodage_html($_POST['nom'])): ''; 
isSet($nom); // retournera toujours vrai quelle que soit la valeur de $nom
isSet($_POST['nom']); // ne retourne vrai que si une variable "nom" a été envoyée en post
?>

Mammouth du PHP | 1029 Messages

18 oct. 2006, 15:52

De plus je dirais que si tes input de formulaire ressemble à ceci
<input type="text" name="machin" value="">
Tu enveras d'office une valeur, mais si celle-ci n'est composé que de guillements.

Et du coup dans ton switch comme tout est à true, cela renvoie directement à $étape=3
L'expérience est la somme de toutes nos erreurs.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 oct. 2006, 16:13

Pourquoi ne pas faire un petite session pour conserver les valeurs et ne les mettre à jour que lorsque tu es dans l'étape qui va bien ?

Personnellement, je verrais bien un truc du genre :
if($etape==1) {
  $_SESSION["nom"] = (isset($_POST['nom']))? strtoupper(encodage_html($_POST['nom'])): '';
  ... // traitement
  $etapeSuivante = 2; // affichera le formulaire de l'étape 2
}

if($etape==2) {
  ... // traitement
  if($erreurEtape2)
    $etapeSuivante = 2; // affichera à nouveau le formulaire de l'étape 2
  elseif($sauteEtape3)
    $etapeSuivante = 4; // affichera directement le formulaire de l'étape 4
  else
    $etapeSuivante = 3; // affichera le formulaire suivant
}

...

afficherFormulaire($etapeSuivante); // formulaire idoine
echo '<input type="hidden" name="etape" value="'.$etapeSuivante.'" />'; // étape en cours

Mammouth du PHP | 2937 Messages

18 oct. 2006, 16:19

Salut!

J'ai modifié le code de l'étape 1 comme suit:
<?php
  // Étape 1: données personnelles
  if ($etape==1){
    if (isset($nom) && !empty($nom) && isset($prenom) && !empty($prenom) && isset($naissance) && !empty($naissance) && isset($adresse) && !empty($adresse) && isset($code_postal) && !empty($nom) && isset($ville) && !empty($ville) && isset($courriel) && !empty($courriel) && isset($situation) && isset($personne_foyer) && !empty($personne_foyer) && isset($enfant_foyer)) $etape=2; else $etape=1;
  }
?>
Lorsque j'appelle la page, l'étape 1 est bel et bien affichée. En revanche, une fois tous les champs dûment remplis, lorsque je valide, l'étape 1 est à nouveau affichée. :oops: D'après le code source, la valeur du champ caché (récupérée par la variable $etape) est 1, aussi bien avant qu'après validation.

Pour rappel, la variable $etape est définie ainsi:
<?php
$etape=(isset($_POST['etape']) && is_numeric($_POST['etape']))? $_POST['etape']: 1;
?>