使用PHP和MYSQL的问答系统

使用PHP和MYSQL的问答系统,php,mysql,Php,Mysql,我的在线测验系统一切正常,但上传问题的页面并没有正常工作 用户被限制一次添加20个问题。如果超过限制,将提示一条消息,并将他重定向到他的帐户 这是允许用户输入问题、四个选项和一个正确选项的表单 <html> <body> <form action="be_uploadquiz.php" method="post"> <table><tr><td>Enter Question Here</td> <td>

我的在线测验系统一切正常,但上传问题的页面并没有正常工作

用户被限制一次添加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>

在这里输入问题
输入第一个选项
输入第二个选项
输入第三个选项
输入第四个选项
选择正确的选项
A.
B
C
D
下面是uploadquick.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();
?>

您的变量
$i
不会在整个导航中维护。您可以为此使用会话变量,如下所示:

start_session();
if (!isset($_SESSION["counter"])) {
    $_SESSION["counter"] = 0;
}
然后使用
$\u会话[“计数器”]
而不是
$i

$_SESSION["counter"]++
不要破坏会话,否则将无法保留此值。因此,删除这一行:

destroy_session();
如果要确保会话在某段时间不活动(同时重置该用户的计数器)后被销毁,请阅读如何执行此操作


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

没有任何地方设置
$i
的值,没有任何地方有循环,没有任何地方在单独的post操作之间保持
$i
的值,并且您很容易受到攻击。@developerjk:为什么?简单的表单不需要php…您需要从数据库中读取数据库中已有的问题数量。执行页面时,
$i
的值不会保留,而是丢弃。因此,
$i
只是从下一次上传开始。(您可以使用会话,但如果有人在不同的时间添加问题,这实际上不会起作用。)您不存储问题的所有者吗?20限制是适用于每个连接的用户,还是适用于整个问题计数?何时应再次重置限制?还是永久性的?如果可以,你应该。已在PHP7中删除。了解使用PDO的语句,并考虑使用PDO,不客气。您可能想接受答案:-)我尝试了此代码,但只运行了一次,当我第二次运行时,它不起作用,上传继续进行任何帮助。您可以编辑您的问题并添加“编辑:我将代码改编为此:”然后添加您的代码,因为它现在看起来仍然存在问题。然后我会看一看。我已经解决了这个问题,但我在尝试测试脚本中遇到了问题,该脚本将从同一个表中选择数据并向学生显示,我无法计算学生是否选中了正确选项的次数。如果是,则增加一些变量以在最后显示结果。您的后续问题有点像主题。您需要做的是在
insert
语句中包含学生的
id
。但这也要求学生登录到你的应用程序,你有他们的用户名,全名,可能还有一些其他信息,比如班级,还有密码管理。请看一下这个主题,然后问一个新问题,因为它超出了你原来问题的范围。如果你想让我看的话,你也可以在这里发布新问题的链接,我一定会看的。