Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Запись данных формы в файл по условию (https://javascript.ru/forum/server/70312-zapis-dannykh-formy-v-fajjl-po-usloviyu.html)

Sonya 26.08.2017 18:18

Запись данных формы в файл по условию
 
Здравствуйте!
Помогите, пожалуйста!
Есть код, который выполняет подсчет результатов теста, выбор ответов на вопросы теста происходит через нажатие радиокнопок. Перед подсчетом скрипт проверяет все ли кнопки отмечены, если нет, то выводит сообщение, если да то считает, и по замыслу должен записывать результаты в БД или файл, в этом и проблема. Если кнопку сделать type="submit", то вне зависимости появилось сообщение или нет, то есть на все ли вопросы ответил пользователь или нет, запись происходит пустой строкой, а если type="button", то данные не записываются. Как записывать данные по условию, когда пользователь выбрал все ответы, и скрипт произвел подсчет (результат которых он и будет записывать). Пыталась вставлять после document.C.tDiagnosis.value = document.D.elements[dx].value; вызов submit формы, но записи нет. Как можно такое реализовать?
<script type="text/javascript">
<!--
       function checkRadio(elem, radioName){
            var sel = false;
            var radios  = elem.getElementsByTagName("input");
            for(var k = 0; k < radios.length; k++){
                if(radios[k].type == "radio" && radios[k].name == radioName){
                    if(radios[k].checked){                        
                        sel = true;
                        break;
                    }
                }
            }
            return sel;
        }                      
        function makeDiagnosis(){            
            var sel = false;
            var radioDiv = document.getElementById("rb");
            var radioNames = new Array("rb1", "rb2", "rb3", "rb4", "rb5", "rb6", "rb7", "rb8");
            for(var k = 0; k < radioNames.length; k++){
                sel = checkRadio(radioDiv, radioNames[k]);
                if(!sel){
                    break;
                }
            }            
            if(!sel){
                alert("Укажите Ваше отношение ко всем предложенным утверждениям");
            }else{
            tQcnt = 8;
            tDcnt = 17;
            summa = 0;
            for( j=0; j<document.Q.rb1.length; j++ ) {
            if( document.Q.rb1[j].checked ) {
            summa += eval(document.Q.rb1[j].value);
            }
            }
            for( j=0; j<document.Q.rb2.length; j++ ) {
            if( document.Q.rb2[j].checked ) {
            summa += eval(document.Q.rb2[j].value);
            }
            }
            for( j=0; j<document.Q.rb3.length; j++ ) {
            if( document.Q.rb3[j].checked ) {
            summa += eval(document.Q.rb3[j].value);
            }
            }
            for( j=0; j<document.Q.rb4.length; j++ ) {
            if( document.Q.rb4[j].checked ) {
            summa += eval(document.Q.rb4[j].value);
            }
            }
            for( j=0; j<document.Q.rb5.length; j++ ) {
            if( document.Q.rb5[j].checked ) {
            summa += eval(document.Q.rb5[j].value);
            }
            }
            for( j=0; j<document.Q.rb6.length; j++ ) {
            if( document.Q.rb6[j].checked ) {
            summa += eval(document.Q.rb6[j].value);
            }
            }
            for( j=0; j<document.Q.rb7.length; j++ ) {
            if( document.Q.rb7[j].checked ) {
            summa += eval(document.Q.rb7[j].value);
            }
            }
            for( j=0; j<document.Q.rb8.length; j++ ) {
            if( document.Q.rb8[j].checked ) {
            summa += eval(document.Q.rb8[j].value);
            }
            }
            dx = -1;
            for( i=0; i<tDcnt; i++ ) {
            if( summa >= eval(document.L.elements[i].value) && summa <= eval(document.H.elements[i].value) ) {
            dx = i;
            break;
            }
            }
            document.C.tDiagnosis.value = document.D.elements[dx].value;
            }
        }
// -->
</script>
<FORM action="" method=post name="C">
<TEXTAREA cols=60 name="tDiagnosis" rows=6></TEXTAREA>
<CENTER><INPUT name="pbSubmit" onclick=makeDiagnosis() type="button" class="button" value=Продолжить></CENTER>
</FORM>

laimas 26.08.2017 19:56

<FORM action="" method="post" onsubmit="return makeDiagnosis(this)">
<INPUT name="pbSubmit" type="submit" class="button" value=Продолжить>

Функция должна возвращать false в случае ошибок заполнения или true если Ок.

Вот только сервер обязан проверять данные сам, а не надеяться на клиента, иначе "запись происходит пустой строкой", это будут лишь мелкие шалости, могут быть и куда более неприятные вещи.

Sonya 26.08.2017 20:47

"Функция должна возвращать false в случае ошибок заполнения или true если Ок."
Как это сделать?

Sonya 26.08.2017 20:51

Цитата:

Сообщение от laimas (Сообщение 462796)
Вот только сервер обязан проверять данные сам, а не надеяться на клиента, иначе "запись происходит пустой строкой", это будут лишь мелкие шалости, могут быть и куда более неприятные вещи.

Какие, например?

laimas 27.08.2017 04:32

Цитата:

Сообщение от Sonya
Как это сделать?

Даже не могу представить, что за тест у вас, для которого выбор проверяется eval(). Код кошмар напоминает, но коли он проверяет, то должен возвращать либо положительный ответ, либо отрицательный - return true/false. Какие это у вас условия вам виднее.

Цитата:

Сообщение от Sonya
Какие, например?

От атак до взлома.


Часовой пояс GMT +3, время: 00:03.