如何解决在php
我在 mysql 中有一张表。此表的名称是 questiontbl
。问题存储在此表中。向用户随机显示一个问题。这个问题不应该重复。因此,用户 ID 存储在名为 uid
的列中。我有一些问题:
首先,问题会显示多次而不是一次。
其次,uid
字段更新无法正常工作。比如用户ID是40,字段必须添加一次,就添加3次。
请检查我的代码并帮助我解决它的问题。
我的桌子:
id | 问题标题 | uid |
---|---|---|
5 | questionA | 19,40,15,17, |
6 | questionB | 19, |
注意:用户 ID 不应重复存储在 uid
列中。
我的代码:
<?php
$uid2=$_SESSION['id'];
$get1 = "SELECT * FROM questiontbl ORDER BY RAND() LIMIT 1";
$get2=mysqli_query($conn,$get1);
$get3=mysqli_fetch_assoc($get2);
$questionid=$get3['id'];
$now=$get3['uid'];
$now2=explode(',',$now);
foreach ($now2 as $data)
{
if (strpos($data,$uid2) !== FALSE )
{
header("Location: startnew.php");
}
else
{
$final_show=$get3['questiontitle'];
echo $final_show;
$update_idq = "UPDATE questiontbl SET uid=concat(uid,'$uid2,') WHERE id='$questionid' LIMIT1";
mysqli_query($conn,$update_idq);
}
}
?>
解决方法
您之所以重复,是因为您要遍历 uid
列中的所有值以查看您是否与会话 id
值匹配,并且每次这些值都与您不匹配正在更新您的表。相反,在 explode
值之后,使用 in_array
查看会话 id
值是否存在于 uid
列中:
$uid2=$_SESSION['id'];
$get1 = "SELECT * FROM questiontbl ORDER BY RAND() LIMIT 1";
$get2=mysqli_query($conn,$get1);
$get3=mysqli_fetch_assoc($get2);
$questionid=$get3['id'];
$now=$get3['uid'];
$now2=explode(',',$now);
if (in_array($uid2,$now2)) {
header("Location: startnew.php");
}
else {
$final_show=$get3['questiontitle'];
echo $final_show;
$update_idq = "UPDATE questiontbl SET uid=concat(uid,",$uid2") WHERE id='$questionid' LIMIT 1";
mysqli_query($conn,$update_idq);
}
另请注意,变量替换仅发生在双引号字符串中(并且您需要在 id
值之前使用逗号),因此您需要更改
SET uid=concat(uid,'$uid2,')
到
SET uid=concat(uid,$uid2")
最后你有一个错字,LIMIT1
应该是 LIMIT 1
,尽管它对于那个查询来说应该是不必要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。