有一个问答表单,用户选择好选项之后提交,我先用一个sql语句加上限制,使得回答正确的人就不用再回答了:
select * from q_record where username='$username' and  isright=1 limit 1如果找不到,则执行插入语句:
insert into q_record...但是发现,数据库里面仍然会有个用户的isright=1的数量大于1,而且时间是同一秒的,不知道是什么原因?是不是数据库反应不过来了,还没有做好select判断,就执行了insert语句?

解决方案 »

  1.   

    我想看看你的php代码. 另外SQL也不需要这么写.
      

  2.   

    <?php
    $query = "select * from q_record where username='$username' and  isright=1 limit 1";
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    if ($row) {
    echo "你已经答对该题了,不需要再回答哦!";
    exit;
    }
    $query = "insert into q_record (pid,question,isright,time) values ('$pid','$question','$isright','$time')";
    $result = mysql_query($query);
    ?>username:用户名
    isright:0或者1
    pid:题目编号,数字类型
    question:答案:a或b或c或d
    time:时间
      

  3.   

    你这个不是同个表么?q_record 怎么是用insert into 不是update set?
      

  4.   

    加个时间限制,js和php都限制,js限制是一般情况的限制,php再在session中存放上次回答时间,到时候进行限制就行了,如果问题是因为极短时间内重复提交的原因
      

  5.   

    insert into是记录用户的回答记录,如果已经答对了,就提示用户不用再答了,否则就让用户再来回答。
      

  6.   

    insert into是记录用户的回答记录,如果已经答对了,就提示用户不用再答了,否则就让用户再来回答。
      

  7.   


    重新看了一下 有很多 pid(题目)?
    那你怎么放在一个表里呢?重新设计一下表吧 用户和 你的考试题目结果分开 再做一个用户id 的关联...然后根据运行情况再来处理发现的问题。
      

  8.   

    哦,但是现在还是不明白,到底是什么原因导致数据库的SQL限制被突破了
      

  9.   

    说起这个防止用户重复提交,连号称最大社区的csdn也没解决,,昨天一个getTime()的问题,,我只提交了一遍,出来显示2个,扣了40分,我擦
      

  10.   

    <?php
    $query = "select * from q_record where username='$username' and  isright=1 limit 1";
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    if ($row) {
        echo "你已经答对该题了,不需要再回答哦!";
       
    }else{
    $query = "insert into q_record (pid,question,isright,time) values ('$pid','$question','$isright','$time')";
    $result = mysql_query($query);
    }
    ?>
    这样试一下