多个用户输入后如何更新同一行?

时间:2015-03-08 18:11:46

标签: php mysql

我有一组问题,当用户按钮点击其中一个单选按钮时,取决于值[0或1],表格会更新。现在发生的事情是,当用户单击问题的单选按钮时,该值将插入到数据库中,但当另一个用户单击该问题的单选按钮时,将插入另一行而不是更新该行。

以下代码设置问题和单选按钮。

$sql1 = mysqli_query($connection,"SELECT * FROM list WHERE id='$data' LIMIT 1");
while($row = mysqli_fetch_array($sql1)){
    $id = $row['id'];
    $a = $row['data'];

    $data_id = $row['data_id'];
    $first = '<h2>'.$a.'</h2>';
    $sql2 = mysqli_query($connection,"SELECT * FROM replies WHERE d_id='$data'");
    while($row2 = mysqli_fetch_array($sql2)){
        $ch = $row2['reply'];
        $val = $row2['val'];
        $replies .= '<label><input type="radio" name="radio" onclick = "vote()" value="'.$val.'">'.$ch.'</label> 
        <input type="hidden" id="did" value="'.$id.'" name="did">
        ';

    }
    $displ = ''.$first.','.$answers.',<input type = "submit" name = "submit" value="submit" onClick = "post_reply()">';
    echo $displ;
   }

这是在用户单击单选按钮后将值添加到数据库中的方式:

    $q = intval($_GET['rads']);
$con = mysqli_connect('localhost','root','','poll');
if (!$con) {
    die('Could not connect: ' . mysqli_error($con));
}

mysqli_select_db($con,"");

if($q == 1){
    $sql="INSERT INTO stats (correct,wrong) VALUES (1,0)";

} else {
$sql="INSERT INTO stats (correct,wrong) VALUES (0,1)";  
//$sql = "UPDATE stats SET correct = correct + 0, wrong = wrong + 4 WHERE id = 1 LIMIT 1";
}
$result = mysqli_query($con,$sql);
$lastId = mysqli_insert_id($con);
mysqli_query($con, "UPDATE stats SET question_id='$lastId' WHERE id='$lastId' LIMIT 1");
mysqli_close($con);

该表可能看起来像这样。所以第二行也是与第一行相同的问题。

id----|----question_id----|----corect---|---wrong---

1               1              1               0
2               2                0              1

所以我想避免的是为同一个问题插入另一行,而我想更新它,所以它看起来像这样:

id----|----question_id----|----corect---|---wrong---

1               1              3              1
2                2              2             2

可以为下一个问题插入另一行。在上表中,第二行是一个不同的问题。

修改 这就是问题表的样子

 id----|----question_id----|----question-------|---type--------

    1               1              ...a..              tf
    2               2             ....b...             tf

答案表

-------id----|----question_id----|----answer-------|---correct--------

        1               1              False              0
        2               1               True             1
        3               2               False             1
        4               2                True              0

0/1表示答案是对还是错。

1 个答案:

答案 0 :(得分:0)

删除此部分:

if($q == 1){
    $sql="INSERT INTO stats (correct,wrong) VALUES (1,0)";

} else {
$sql="INSERT INTO stats (correct,wrong) VALUES (0,1)";  
//$sql = "UPDATE stats SET correct = correct + 0, wrong = wrong + 4 WHERE id = 1 LIMIT 1";
}

然后找到一种方法来获取该问题的统计数据(以及用户?)(因为我无法看到表格,所以可以提供更多帮助),以及 - 从连接到您的条件的统计表中选择ID(无法查看所需的代码部分)。将正确的id返回到$ lastId变量而不是新插入的结果 - 如果该问题的统计数据不存在(选择结果为空,fetch语句返回false / null,$ lastId为false / null等),则对stats表进行插入,设置正确和错误答案为零

同时将最后一行之前的行替换为以plus:

开头的行
-mysqli_query($con, "UPDATE stats SET question_id='$lastId' WHERE id='$lastId' LIMIT 1");
+if ($q == 1) {
+    mysqli_query($con, "UPDATE stats SET correct += 1 WHERE id='$lastId'");
+} else {
     mysqli_query($con, "UPDATE stats SET wrong += 1 WHERE id='$lastId'");
+}