我正在开发一系列数据库驱动的测试,这些测试显示在mysite / test / $ test-url上。在用户选择他们的答案并单击提交按钮后,他们会转发到mysite / test / grade.php。
下面的脚本会捕获测试页的URL,以便在grade.php上显示正确的答案。
<div id="quiz" rel="key" style="margin-top: 50px;">
<form action="grade.php" method="post" id="quiz">
<ol>
<li style="display: none;">
<?php echo join ($Base, ''); ?>
</li>
</ol>
<input type="hidden" name="PreviousURL" value="<?php echo $MyURL; ?>" id="url" />
<input type="hidden" name="user_token" value="<?php echo isset($_POST['user_token']) ? $_POST['user_token'] : '' ; ?>" />
<input type="submit" value="Submit Quiz" />
</form>
</div>
如果有人在没有首先访问测试页面的情况下访问grade.php,他们所看到的只是一个非常空白的页面。但是,访问测试页并单击提交按钮而不回答任何问题的人将被转发到答案页面,该页面将显示答案。换句话说,它很容易作弊。
所以这是我的问题:除非用户选择每个问题的答案,否则如何修改我的脚本以便答案不会显示在grade.php上?另一种方法是修改它,这样除非用户选择了所有答案,否则用户不会首先转发到grade.php。
答案 0 :(得分:1)
如果它具有您在测试中提出的值(并且它们不为空),请检查$ _POST。如果是这样,那么你可以表现出类似于&#34;请在#34;之前回答测试。或者您通过标题功能重定向到test.php。
答案 1 :(得分:1)
你通过所有答案循环,如果一个是空的,你就不会显示任何答案。
想象一下你有3个问题;
$_POST['Question1']
$_POST['Question2']
$_POST['Question3']
如果你这样做:
if(!$_POST['Question1'] || !$_POST['Question2'] || !$_POST['Question3']){
// SHOW NOTHING
}
else{
// SHOW WHAT YOU WANT.
}
现在,如果你想在JQUERY中这样做。如果已经给出了所有答案,您可以通过检查来阻止表单加载到您的PHP。
在这里,您使用https://api.jquery.com/serializeArray/,然后通过数组的每个答案,例如:
$('#myform').submit(function(event){
var answers = $('#myform').serializeArray();
$.each(answers , function(index,value){
if(value == ''){
event.preventDefault();
alert('you did not answer all the questions');
}
});
}