Является ли Javascript причиной того, что моя форма не выбрана эхом после перезагрузки страницы из-за ошибки?

Я все еще новичок в PHP / Javascript / Ajax, и мне очень трудно (уже несколько недель) решить эту проблему.

На моем сайте есть страница регистрации, на которой необходимо заполнить все поля. Это веб-сайт сообщества по муковисцидозу, поэтому в форме есть раздел, в котором вы выбираете свое отношение к муковисцидозу. (У меня есть / у кого-то, кого я знаю, есть). Если вы выберете У меня, появится раскрывающийся список, в котором вам будет предложено выбрать Fibro (мужской) или Cyster (женский). Если вы выберете кого-то, кого я знаю, откроется другой раскрывающийся список с различными вариантами (тетя, дядя и т. Д.)

У меня есть множество возможных ошибок, которые можно сделать. Пароли не совпадают, капча или условия использования не проверены / заполнены и т. Д., Поэтому страница перезагружается, чтобы отобразить сообщение об ошибке. Я поставил "echo selected" во все значения моих параметров, чтобы страница загружала ранее выбранную информацию должным образом. Когда вы выбираете «У меня CF», происходит следующее:

При регистрации - если я выбираю «У меня CF» в первый раз, но забываю ввести «Cyster or Fibro», я получаю сообщение об ошибке. ТОГДА, когда я возвращаюсь и добавляю Cyster или Fibro, он продолжает говорить мне, что мне нужно ввести мое отношение к CF, даже если в поле ПОКАЗАНО, что выбраны Cyster или Fibro.

Если я подписываюсь. Заполнили отношение к CF как «У меня есть CF» И заполнили «Cyster or Fibro», но получили ЛЮБОЕ сообщение об ошибке (неправильный адрес электронной почты, пароли не совпадают и т. Д.), Ответ Cyster или Fibro выпадает (не там) и если я выберу его снова, он не примет мой выбор и продолжит говорить, что «вы должны выбрать свое отношение», даже если он явно выбран.

Как я уже сказал, я боролся с этим в течение нескольких недель, и, насколько я могу судить, мой код выглядит правильным. Я думаю, это как-то связано с Javascript? Вот мой код:

(Пожалуйста, дайте мне знать, если вам понадобится окружающий код, чтобы помочь, спасибо)

<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>

Вот другой вариант (я знаю кое-кого с CF), который отлично работает:

<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>

Вот фрагмент 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>

person Ralph The Mouf    schedule 09.02.2010    source источник


Ответы (2)


Лучший способ добиться этого - использовать JavaScript для загрузки значений и проверки. Я бы использовал фреймворк, чтобы было проще.

  • ExtJS
  • Додзё
  • JQuery

являются одними из самых известных. В них встроены валидаторы форм, а также функциональность AJAX, чтобы упростить вам задачу.

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

person Todd Moses    schedule 10.02.2010

Лучшее решение - выполнить проверку на стороне PHP (с использованием AJAX) и вернуть результат проверки в виде JSON. Также см. здесь.

person Vivin Paliath    schedule 10.02.2010