Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.08.2017, 18:18
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

Запись данных формы в файл по условию
Здравствуйте!
Помогите, пожалуйста!
Есть код, который выполняет подсчет результатов теста, выбор ответов на вопросы теста происходит через нажатие радиокнопок. Перед подсчетом скрипт проверяет все ли кнопки отмечены, если нет, то выводит сообщение, если да то считает, и по замыслу должен записывать результаты в БД или файл, в этом и проблема. Если кнопку сделать 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>
Ответить с цитированием
  #2 (permalink)  
Старый 26.08.2017, 19:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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

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

Последний раз редактировалось laimas, 26.08.2017 в 20:14.
Ответить с цитированием
  #3 (permalink)  
Старый 26.08.2017, 20:47
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

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

Последний раз редактировалось Sonya, 26.08.2017 в 20:48. Причина: Ошибка
Ответить с цитированием
  #4 (permalink)  
Старый 26.08.2017, 20:51
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

Сообщение от laimas Посмотреть сообщение
Вот только сервер обязан проверять данные сам, а не надеяться на клиента, иначе "запись происходит пустой строкой", это будут лишь мелкие шалости, могут быть и куда более неприятные вещи.
Какие, например?
Ответить с цитированием
  #5 (permalink)  
Старый 27.08.2017, 04:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

Сообщение от Sonya
Какие, например?
От атак до взлома.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод данных из БД в .js файл Loromir jQuery 5 18.12.2014 17:38
Вывод по условию данных из xml OblivionR Общие вопросы Javascript 4 02.04.2014 17:01
Двойная Фильтрация данных таблицы David0707 Общие вопросы Javascript 0 19.03.2012 13:00
Автоматическое получение данных из формы Beck jQuery 6 06.11.2009 18:01
Обработка данных из формы в новом окошке diktator Events/DOM/Window 1 20.10.2008 12:51