Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在多个用户输入后更新同一行?_Php_Mysql - Fatal编程技术网

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

Php 如何在多个用户输入后更新同一行?,php,mysql,Php,Mysql,我有一组问题,当用户按钮根据值[0或1]单击其中一个单选按钮时,表格会更新。现在发生的情况是,当用户单击某个问题的单选按钮时,该值将插入到数据库中,但当另一个用户单击该问题的单选按钮时,将插入另一行,而不是更新该行 下面的代码设置问题和单选按钮 $sql1 = mysqli_query($connection,"SELECT * FROM list WHERE id='$data' LIMIT 1"); while($row = mysqli_fetch_array($sql1)){ $

我有一组问题,当用户按钮根据值[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;
   }
桌子可能看起来像这样。所以第二行也是和第一行一样的问题

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";
}
然后找到一种方法来获取该问题和用户是否有统计数据?我看不见那张桌子,实在帮不上忙 -从stats表中选择id,该id连接到您无法看到所需代码部分的条件。将正确的id返回到$lastId变量,而不是新插入的结果 -如果该问题的stat不存在,选择结果为空,fetch语句返回false/null、$lastId为false/null等,然后插入stats表,将正确答案和错误答案设置为零

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

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

您好,谢谢您的帮助,但是当我按照您建议的方式尝试时,没有任何内容进入数据库。另外,如果它是一个空的DB,你能用更新语句插入数据吗?抱歉,不能正确地格式化我的答案,但是我试图解释在中间部分,你需要创建一个流= =为自己写,它决定你是否需要选择和更新,或者你也需要插入,除非我对任务中的统计数据、问题和用户表了解更多,否则您需要自己编写。稍后您还将了解PHP框架自动执行这些操作,但在此之前,不幸的是您需要手动处理这些操作。我现在只是以非用户的身份测试它们。谢谢你的帮助。嗯,不太清楚任务是什么。但是,如果您离开当前代码,忘记我的代码,并且在从统计表中查询数据时,您稍后为用户请求SUMcorrect和sumError,那么它仍然可以工作。或者,如果统计表只是为了收集回答错误或正确的人数,那么请从统计表中选择id,其中问题id=$YouAreGettingThis from AnarlierVarinthecode,如果不存在,请在值中插入问题id,0,0感谢您的帮助。不过,如果所有其他方法都失败,我正在考虑进行求和。
-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'");
+}