2015-11-19 47 views
-2

Every Thing对我的在线测验系统工作正常,但上传问题的页面不能正常工作。使用PHP和MYSQL的测验系统

如果限制超过,用户被限制为一次添加20个问题,系统会提示一条消息,并且他将被重定向到他的帐户。

这是允许用户输入他的问题,四个选项和一个正确的选项的形式。

<html> 
<body> 
<form action="be_uploadquiz.php" method="post"> 
<table><tr><td>Enter Question Here</td> 
<td> 
<input name="question" type="text" maxlength="100" /></td></tr> 
<tr><td>Enter First Option</td> 
<td> 
<input name="opt1" type="text" maxlength="100" /></td></tr> 
<tr><td>Enter Second Option</td><td> 
<input name="opt2" type="text" maxlength="100" /></td></tr> 
<tr><td>Enter Third Option</td> 
<td> 
<input name="opt3" type="text" maxlength="30" /></td></tr> 
<tr><td>Enter Fourth Option</td> 
<td> 
<input name="opt4" type="text" maxlength="30" /></td></tr> 
<tr><td>Select The Correct Option</td> 
<td> 
<select name="woptcode"> 
<option>A</option> 
<option>B</option> 
<option>C</option> 
<option>D</option> 
</select> 
</td></tr> 
<tr><td> 
<input name="submit" type="submit" value="Next" /> 
</td></tr></table></form> 
</body> 
</html> 

这里是uploadquiz.php文件,插入问题

<?php 
session_start(); 
$link = mysql_connect("localhost","root",""); 
mysql_select_db("quiz",$link); 
$question = $_POST['question']; 
$opt1 = $_POST['opt1']; 
$opt2 = $_POST['opt2']; 
$opt3 = $_POST['opt3']; 
$opt4 = $_POST['opt4']; 
$woptcode = $_POST['woptcode']; 
if (isset($_POST['submit'])) { 
    $sql = "INSERT INTO be_quiz (question,opt1,opt2,opt3,opt4,woptcode) VALUES ('$question', '$opt1','$opt2','$opt3','$opt4','$woptcode')"; 
    $i++; 
header('Location:be_uploadquiz.html'); 
if($i==20) 
{ 
    header('Location:message.html'); 
} 
} 
session_destroy(); 
if(!mysql_query($sql)) 
{ 
    die('Error:'.mysql_error()); 
} 

mysql_close(); 
?> 

我希望用户再次重定向到uploadquiz.html如果没有达到极限,到一个文件message.html如果达到最大限度(即已达到20个问题),然后到达他的账户。这不工作需要帮助。

+0

你没有为'$ i'设置一个值,你没有任何循环,无处可存在'$ i'在单独的post操作之间的值,而且你很容易受到[sql注入攻击]的影响。 http://bobby-tables.com)。 –

+0

@developerwjk:为什么?不需要php的简单表单... –

+0

您需要从数据库中读取数据库中已有的问题数量。 '$ i'的值不会被保留,而是在页面执行完毕时被丢弃。所以'$ i'只是从下一次上传开始。 (您可以使用会话,但如果有人在不同的时间添加问题,那实际上不会有效。) – developerwjk

回答

1

您的变量$i未在导航中维护。你可以使用一个会话变量为,像这样:

start_session(); 
if (!isset($_SESSION["counter"])) { 
    $_SESSION["counter"] = 0; 
} 

然后用$_SESSION["counter"]代替$i;

$_SESSION["counter"]++ 

不要销毁会话,否则您不会保留该值。所以删除这一行:

destroy_session(); 

如果你想确保会话处于非活动状态一定时间后销毁(也重置该用户的计数器),然后阅读here你如何能做到这一点。

现在仍然存在一个问题:您对20限制的检查发生得太晚,并且不会阻止用户继续提交。您应该在实际发生insert之前进行该测试。

+0

真的帮助和工作,谢谢一吨:) –

+0

不客气。您可能想接受答案:-) – trincot

+0

我试过这段代码,但一次工作,然后当我第二次运行它没有工作,并上传任何帮助 –