在 php 中使用 concat、foreach 和 explode 显示问题时出现问题
problem in displaying a question with concat, foreach and explode in php
我在 mysql 中有一个 table。这个table的名字是questiontbl
。问题存储在这个 table 中。随机向用户显示一个问题。这个问题不应该重复。所以用户 ID 存储在名为 uid
的列中。我有一些问题:
首先,问题会显示多次而不是一次。
其次,uid
字段更新不能正常工作。例如用户ID为40,必须在字段中添加一次,则添加三次。
请检查我的代码并帮助我解决问题。
我的table:
id
questiontitle
uid
5
questionA
19,40,15,17,
6
questionB
19,
注意:uid
列中用户ID不要重复存放。
我的代码:
<?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
值匹配,但每次这些值都不匹配匹配您正在更新 table。相反,在 explode
ing 值之后,使用 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
尽管对于那个查询来说它应该是不必要的。
我在 mysql 中有一个 table。这个table的名字是questiontbl
。问题存储在这个 table 中。随机向用户显示一个问题。这个问题不应该重复。所以用户 ID 存储在名为 uid
的列中。我有一些问题:
首先,问题会显示多次而不是一次。
其次,uid
字段更新不能正常工作。例如用户ID为40,必须在字段中添加一次,则添加三次。
请检查我的代码并帮助我解决问题。
我的table:
id | questiontitle | uid |
---|---|---|
5 | questionA | 19,40,15,17, |
6 | questionB | 19, |
注意:uid
列中用户ID不要重复存放。
我的代码:
<?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
值匹配,但每次这些值都不匹配匹配您正在更新 table。相反,在 explode
ing 值之后,使用 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
尽管对于那个查询来说它应该是不必要的。