2010-02-09 14 views
0

Je suis encore nouveau sur PHP/Javascript/Ajax et j'ai beaucoup de mal (ça dure depuis des semaines) à résoudre ce problème.Est-ce que Javascript fait en sorte que mon formulaire ne renvoie pas d'écho lorsque l'erreur recharge la page?

Mon site a une inscription pour être une page de membre qui nécessite que tous les champs soient remplis. Il s'agit d'un site Web pour la communauté de la fibrose kystique, il y a donc une section sur le formulaire où vous choisissez votre relation à la fibrose kystique. (Je l'ai/Quelqu'un que je connais l'a) Si vous choisissez je l'ai, une liste déroulante apparaît et vous donne l'option Fibro (mâle) ou Cystère (femelle). Si vous choisissez quelqu'un que je connais, une liste déroulante différente s'ouvre avec diverses options (tante, oncle, etc.)

J'ai une myriade d'erreurs possibles qui peuvent être faites. Les mots de passe ne correspondent pas, captcha ou les termes d'utilisation ne sont pas cochés/remplis, etc ... donc la page se recharge pour afficher le message d'erreur. J'ai mis "echo selected" dans toutes mes valeurs d'options pour que la page charge les informations précédemment sélectionnées comme il se doit. Lorsque vous choisissez 'J'ai CF', voici ce qui se passe:

Lors de l'inscription - si je sélectionne "J'ai CF" la première fois mais oublie de remplir "Cyster ou Fibro" je reçois le message d'erreur. PUIS quand je reviens et j'ajoute Cyster ou Fibro, ça continue à me dire, que j'ai besoin d'entrer ma relation à CF, même si elle MONTRE dans la case que Cyster ou Fibro est sélectionné.

Si je m'inscris. Avoir rempli la relation à CF comme "J'ai CF" ET rempli le "Cystère ou Fibro" mais obtenir un message d'erreur (mauvais email, mots de passe ne correspondent pas etc etc) la réponse Cystère ou Fibro tombe (pas là) et si je le sélectionne à nouveau, il n'acceptera pas mon choix et continuera à dire que "vous devez choisir votre relation" même si elle est clairement sélectionnée. Comme je l'ai dit, cela fait des semaines que je me bats avec ça, et pour autant que je sache, mon code a l'air correct. Je pense qu'il a quelque chose à voir avec le Javascript? Voici mon code:

(S'il vous plaît laissez-moi savoir si vous avez besoin du code environnant pour aider, merci)

<tr> 
          <td class="left"> 
           <span style="color:#FF0000;">*</span> Relation to CF: 
          </td> 
          <td class="right"> 
           <select name="CFDistance" onchange="switch_distance(this);"> 
            <option value="null" disabled selected>choose one</option> 
            <option value="self" <?php if($_POST['CFDistance'] == "self") { echo "selected"; } ?>>I have CF</option> 
            <option value="others" <?php if($_POST['CFDistance'] == "others") { echo "selected"; } ?>>Someone I know has CF</option> 
           </select> 

           <div id="self_cf_box" class="signup_dropdowns" style="margin:10px 0px 0px 0px;<?php if($_POST['CFDistance'] != "self") { echo "display:none;"; } ?>"> 
          <span style="color:#FF0000;">*</span> I am a 
            <select id="RelationToCF_self" name="RelationToCF" <?php if($_POST['CFDistance'] != "self") { echo "display:none;"; } ?>> 
             <option value="null" disabled selected>choose one</option> 
             <option value="Fibro" <?php if($_POST['RelationToCF'] == "Fibro") { echo "selected"; } ?>>Fibro (male)</option> 
             <option value="Cyster" <?php if ($_POST['RelationToCF'] == "Cyster") { echo "selected";} ?>>Cyster (female)</option> 

            </select> 
           </div> 

Voici l'autre option (je sais someon avec CF) qui fonctionne très bien:

<div id="others_cf_box" class="signup_dropdowns" style="margin:10px 0px 0px 0px;<?php if($_POST['CFDistance'] != "others") { echo "display:none;"; } ?>"> 
           <span style="color:#FF0000;">*</span> I am this person's 
            <select id="RelationToCF_others" name="RelationToCF" <?php if($_POST['CFDistance'] != "others") { echo "display:none;"; } ?>> 
             <option value="null" disabled selected>choose one</option> 
             <option value="Mom" <?php if ($_POST['RelationToCF'] == "Mom") { echo "selected"; } ?>>Mom</option> 
             <option value="Dad" <?php if ($_POST['RelationToCF'] == "Dad") { echo "selected"; } ?>>Dad</option> 
             <option value="Aunt" <?php if ($_POST['RelationToCF'] == "Aunt") { echo "selected"; } ?>>Aunt</option> 
             <option value="Brother" <?php if ($_POST['RelationToCF'] == "Brother") { echo "selected"; } ?>>Brother</option> 
             <option value="Caregiver" <?php if ($_POST['RelationToCF'] == "Caregiver") { echo "selected"; } ?>>Caregiver</option> 
             <option value="Child" <?php if ($_POST['RelationToCF'] == "Child") { echo "selected"; } ?>>Child</option> 
             <option value="Cousin" <?php if ($_POST['RelationToCF'] == "Cousin") { echo "selected"; } ?>>Cousin</option> 
             <option value="Friend" <?php if ($_POST['RelationToCF'] == "Friend") { echo "selected"; } ?>>Friend</option> 
             <option value="Grandma" <?php if ($_POST['RelationToCF'] == "Grandma") { echo "selected"; } ?>>Grandma</option> 
             <option value="Grandpa" <?php if ($_POST['RelationToCF'] == "Grandpa") { echo "selected"; } ?>>Grandpa</option> 
             <option value="Guardian" <?php if ($_POST['RelationToCF'] == "Guardian") { echo "selected"; } ?>>Guardian</option> 
             <option value="Husband" <?php if ($_POST['RelationToCF'] == "Husband") { echo "selected"; } ?>>Husband</option> 
             <option value="Nephew" <?php if ($_POST['RelationToCF'] == "Nephew") { echo "selected"; } ?>>Nephew</option> 
             <option value="Niece" <?php if ($_POST['RelationToCF'] == "Niece") { echo "selected"; } ?>>Niece</option> 
             <option value="Partner" <?php if ($_POST['RelationToCF'] == "Partner") { echo "selected"; } ?>>Partner</option> 
             <option value="Sister" <?php if ($_POST['RelationToCF'] == "Sister") { echo "selected"; } ?>>Sister</option> 
             <option value="Uncle" <?php if ($_POST['RelationToCF'] == "Uncle") { echo "selected"; } ?>>Uncle</option> 
             <option value="Wife" <?php if ($_POST['RelationToCF'] == "Wife") { echo "selected"; } ?>>Wife</option> 
            </select> 


          </div> 

Voici le chunck javascript:

<script type="text/javascript"> 
    function switch_distance(el) { 
     if(el.value == 'self') { 
      document.getElementById('self_cf_box').style.display = "block"; 
      document.getElementById('RelationToCF_self').disabled = false; 
      document.getElementById('others_cf_box').style.display = "none"; 
      document.getElementById('RelationToCF_others').disabled = true; 
     }else{ 
      document.getElementById('self_cf_box').style.display = "none"; 
      document.getElementById('RelationToCF_self').disabled = true; 
      document.getElementById('others_cf_box').style.display = "block"; 
      document.getElementById('RelationToCF_others').disabled = false; 
     } 
    } 
</script> 

Répondre

1

la meilleure façon d'y arriver est d'utiliser Ja vaScript pour charger les valeurs et la validation. J'utiliserais un cadre pour le rendre plus facile. sont quelques-unes des plus connues

  • ExtJS
  • Dojo
  • JQuery

. Ceux-ci ont des validateurs de formulaire intégrés avec la fonctionnalité AJAX pour faciliter votre recherche.

Voir http://www.extjs.com/deploy/dev/examples/form/dynamic.html

1

La meilleure solution est de valider sur le côté PHP (en utilisant AJAX) et renvoyer le résultat de validation comme JSON. Voir également here.