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

标签 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表示答案是正确还是错误。

最佳答案

删除这部分:

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 变量而不是新插入的结果 - 如果该问题的统计信息不存在(选择结果为空,获取语句返回 false/null,$lastId 为 false/null 等),则插入到统计表中,将正确和错误答案设置为零

还将最后一行之前的行替换为以加号开头的行:

-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'");
+} 

关于php - 如何在多个用户输入后更新同一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28930056/

相关文章:

php - 将下拉列表中的多个选择放入sql查询中

c# - C# 中的反射生成 SQL?

jquery - 如何将 php 邮件与动态输入值合并

javascript - 在自定义 WordPress 主题中的页面更改时保持 Accordion 子菜单打开

php - 如何使用 Zend_Db 有效地读取大量行?

php - 修改 YAML 对真值和假值的解析

php - 获取一张表中所有行的总和

mysql - Wordpress 页面信息存储在哪里

MySQL Workbench 导入/导出 : ERROR 2003 (HY000): Can't Connect to MySQL server on 'localhost' (110)

java - Android JDBC 不工作 : ClassNotFoundException on driver