我正在编写一个测验网站。
应该发生的是:
- 页面上有一个问题和四个按钮或一个文本框。
- 当你点击一个按钮时,它会调用自己
地址中的答案号码
例如:
?q=[问题编号]&a=[答案]。
- 如果问题 使用文本框发布答案。
- 此代码应该检测到 已向其发送了一些内容并且 将其写入数据库。
- 用户 ID 存储在 Cookie 中。
- 数据库中还有一个键列。这个想法是,它存储用户随时间提交的所有答案,并且用户可以更改他们的答案。
<?PHP mysql_connect("------", "------", "------") or die(); mysql_select_db("------") or die(); $q=$_GET['q']; if(isset($_GET['a'])){ $a=$_GET['a']; } else { $a=$_POST['longanswer']; } if(isset($a)){ $u=$_COOKIE['id']; if($qust['atype']==1){ mysql_query("INSERT INTO answers (`userid` ,`answer` ,`qid`) VALUES ($u, $a, $q);"); } else { mysql_query("INSERT INTO answers (`userid` ,`answer` ,`qid`) VALUES ($u, '$a', $q);"); } } ?>
我认为这不重要,但稍后在代码中,它使用 SELECT 命令查询数据库。
当我运行此代码时,似乎向数据库输入了 2 或 3 个条目。趋势似乎是,当我运行代码时,它会输入之前的答案,然后输入新的答案。
任何帮助将不胜感激。谢谢,
洛根
最佳答案
您似乎想要做的是只允许每个用户对每个问题有一个答案。如果是这种情况,您需要在表上对 userid 和 qid 进行 UNIQUE 约束:
ALTER TABLE answers ADD UNIQUE(userid,qid);
当您尝试插入具有相同用户 ID 和 qid 的行时,这将导致错误。如果您希望允许用户更改其错误,您可以将 INSERT 查询更改为:
INSERT INTO answers (userid ,answer ,qid) VALUES ($uid, '$answer', $qid) ON DUPLICATE KEY UPDATE answer='$answer'
这将阻止多条记录显示在数据库中,但您的 PHP 代码仍可能调用多个 INSERT。为了解决这个问题,我们必须查看您的更多代码。
关于php - INSERT 命令插入重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1911527/