Php 插入命令插入重复项

Php 插入命令插入重复项,php,mysql,Php,Mysql,我正在写一个测验网站。 应该做的是: 页面上有一个问题和四个按钮或一个文本框 当你点击一个按钮时,它会用 地址中的应答号 比如:?q=[问题编号]&a=[答案]。 如果这个问题 使用文本框发布答案 然后,该代码应该检测到 已经发送了一些东西给它并且 将其写入数据库 用户id存储在cookie中 数据库中还有一个键列。其思想是,它存储用户随时间提交的所有答案,用户可以更改其答案。 <?PHP mysql_connect("------", "------", "------") o

我正在写一个测验网站。
应该做的是:

  • 页面上有一个问题和四个按钮或一个文本框
  • 当你点击一个按钮时,它会用 地址中的应答号 比如:
    ?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);"); } } ?>
    似乎您想要做的是每个用户只允许每个问题有一个答案。如果是这种情况,您将需要在表上的userid和qid上有一个唯一的约束:

    ALTER TABLE answers ADD UNIQUE(userid,qid);
    
    当您尝试插入具有相同用户ID和qid的行时,这将导致错误。如果要允许用户更改其错误,可以将插入查询更改为:

    INSERT INTO answers (userid ,answer ,qid) VALUES ($uid, '$answer', $qid) ON DUPLICATE KEY UPDATE answer='$answer'
    

    这将防止多条记录显示在数据库中,但仍可能从PHP代码中调用多个插入。要解决这个问题,我们必须查看更多的代码。

    如果每个用户只允许一个答案,则必须添加CMPTRGEEKEN提到的唯一约束,但如果出现主键冲突,还必须处理它:通知用户它已经回复或替换以前的值,取决于您希望站点如何工作

    此外,出于某种原因,请求是否触发了多次?也许是javascript,或者你的其他逻辑?如果只单击一次时出现重复答案,则情况似乎就是这样


    /B

    另一种选择是首先尝试检索要输入数据库的数据。如果您找到它,它已经在那里了,所以不要再添加它。使用约束的建议是合理的,但是如果您试图防止重复的数据不容易添加到约束中,或者您不希望重复的数据不是完全相同的数据(比如说只是相似的数据),那么这是另一种选择。

    对于特定用户的问题,有多个答案无效吗?您可能想考虑在表上使用一个唯一约束。您可能已经切断了一些代码,如果是CASE,是否可以包含其余的代码。这看起来很容易受到SQL注入的攻击。请转义您的变量…它正在运行,并且在本地服务器上,没有人想注入它。我想我把代码放回去了。对于代码块,用4个空格缩进,或者使用工具栏上的“代码格式”按钮。仅对短
    内联
    代码段使用反勾号。