2013-04-11 3 views
0

Я создал тестовую систему, которая имеет несколько этапов (с использованием jquery), позволяя пользователям проверять флажки, чтобы выбрать их ответы, с итоговой страницей и конечной кнопкой отправки ... все в форме. Теперь я хочу создать систему подсчета очков.Обновление скрытого ввода в зависимости от того, что пользователь проверил

1) Во-первых, это код (в цикле), который захватывает ответы от Wordpress для каждого вопроса:

<input type="checkbox" name="answer<?php echo $counter; ?>[]" value="<?php echo $row['answer']; ?>" /> 

2) В Wordpress рядом с каждым ответом является выпадающий да или нет опции чтобы определить, является ли ответ правильным или неправильным. Это выводится следующим образом:

<?php $row['correct']; ?> 

3) Каждый правильный ответ, который проверяет пользователь, должен стоить 1 балл. PassMark определяется полем:

<?php the_field('pass_mark'); ?> 

4) Я хочу, чтобы это обновить скрытое поле со счетом, как пользователь проверяет правильный ответ:

<input type="hidden" value="<?php echo $score; ?>" name="test-score" /> 

Как я могу обновить скрытый поле с оценкой пользователя, когда пользователь проверяет правильный ответ? Я не уверен, что попробовать с этим, даже дать ему первый шаг!


Хорошо, всякие заметили большую дыру в этом. Я полностью открыт, чтобы сделать это скрытым способом, чтобы люди не могли проверить источник. Тип пользователя, на который он нацелен, не будет иметь понятия, как смотреть на источник, но может также сделать это правильно, чтобы начать с!

Весь тест находится в пределах формы, чтобы он мог обновлять скрытое поле на отправке?

Мне все еще нужны примеры того, как это сделать.

+0

Не будет ли пользователь сможет обмануть таким образом? Он мог легко проверить вход, чтобы увидеть, получил ли он очки. – Spokey

+0

'$ ('# test-score'). Val ('10 ');' при условии, что вход имеет id = "test-score". Это то, что вы ищете? Вы должны определенно выполнить проверку на стороне сервера, чтобы убедиться, что они не обманывают. –

+0

Проверка источника страницы Я думаю, что вряд ли будет защищена –

ответ

0

Spokey прав - пользователь сможет обмануть, если ваш счет на стороне клиента, как с помощью предложенного вами метода.

Вместо этого пользователь может вызвать JQuery $ .post, чтобы опубликовать каждый ответ, а затем сохранить счет в сеансе PHP. Или просто подождите, пока вся форма будет отправлена, и оцените оценку формы в целом на стороне сервера.

* Обновление *

Вы должны отправить форму в скрипт, который может оценить форму. Так сказать, он получает представлен myForm.php

В myForm.php, получить пост ВАР:

$correct_answers = $however_you_get_your_correct_answers(); 

//Assuming $correct_answers is a associative array with the same keys being used in post - 

$results = array(); 
if($_POST){ 
    foreach ($_POST as $key=>$value) { 
     if ($_POST[$key] == $correct_answers[$key]){ 
      $results[$key] = 'correct'; 
     } 
     else $results[$key] = 'incorrect'; 
    } 
} 

Это проверялось, но он должен работать.

+0

Форма вызывает сценарий вставки mysql и вставляет данные (например, имя, оценка, тест, пропуск/сбой) в базу данных. Если бы я смог набрать тест на submit и затем ввести этот балл в базу данных, это было бы здорово. Можно ли использовать пример кода? – Rob

+0

Конечно, как вы определяете, что правильно и что не так? Вы сами корректируете форму самостоятельно или у вас есть правильные ответы, хранящиеся в вашей базе данных? – kevin

+0

Пункт 1 в вопросе проходит через ответы. Пункт 2 показывает, какой из них правильный. – Rob

0

На мой взгляд, вы должны использовать сеансы для этой цели, потому что любой вывод браузера может быть сохранен и просмотрен в ЛЮБОМ текстовом редакторе. Это неправильная цель для скрытых элементов ввода. Вы используете скрытые входы, когда вам нужно отправить что-то автоматически, но никогда не используйте его при обработке некоторых важных данных.

Составление своих вопросов и ответов через id позволит вам не выявлять реальные ответы и оценки в HTML.

Просто очень простой пример того, как сделать это:

<?php 
    $questions = array(
    125 => array("text"=>"2x2?", "answer"=>"4", 'points'=>3), 
    145 => array("text"=>"5x6?", "answer"=>"30", 'points'=>2), 
); 
?> 

<form method="post"> 
    <?php foreach ($questions as $id => $question): ?> 
    <div><?php echo $question['text'] ; ?></div> 
    <input type="text" name="question<?php echo $id ; ?>"/> 
    <?php endforeach ; ?> 
    <input type="submit" value="Submit"/> 
</form> 


/* In submission script */ 
<?php 
if (isset($_POST['submit'])){ 
    foreach($questions as $id => $question){ 
    if (isset($_POST["question{$id}"])){ 
     $answer = $_POST["question{$id}"] ; 
     if ($answer === $question['answer']){ 
     $_SESSION['score'] += $question['points'] ; 
     } 
    } 
    } 
} 
+0

Я не думаю, что это можно было бы сделать так. Тесты являются динамическими (все они добавлены через Wordpress), поэтому могут быть сотни тестов с сотнями вопросов и ответов. – Rob

Смежные вопросы