php - INSERT 命令插入重复项

标签 php mysql

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

  • 页面上有一个问题和四个按钮或一个文本框。
  • 当你点击一个按钮时,它会调用自己 地址中的答案号码 例如:?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/

相关文章:

PHP curl - 发布 asp.net viewstate 值

java - 如何通过 JPQL 从 SQL 计数返回 boolean 结果

php - 为什么 ORDER BY 子句中的绑定(bind)参数不对结果进行排序?

python - Django 找不到 MySQLdb python 模块

php - "header()"php函数是否取消设置全局变量?

Javascript 不会更新用 PHP 编写的变量

php - Yii2 如何给脚本标签添加参数

php - 将 MySQL 数据标记为 'read'

php - 计算两个日期之间的天数而不重复

php - 组合数组和 MySQL 结果