当前位置: 首页 > 知识库问答 >
问题:

在php中使用concat、foreach和explode显示问题时出现的问题

邰昀
2023-03-14

我在MySQL中有一个表。此表的名称为questiontbl。问题存储在这个表中。向用户随机显示一个问题。这个问题不应重复。因此用户ID存储在名为uid的列中。我有一些问题:

第一,问题显示多次而不是一次。

第二,uid字段更新不能正常工作。例如,如果用户ID是40,并且必须添加到字段中一次,则会添加三次。

请审查我的代码,并帮助我解决它的问题。

我的桌子:

注意:用户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);
    }           
}
?>

共有1个答案

利博远
2023-03-14

您会得到重复,因为您正在迭代UID列中的所有值,以查看是否与会话ID值匹配,每次值不匹配时,您都在更新表。相反,在explordeing值之后,使用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应该是limit1,尽管该查询应该不需要它。

 类似资料:
  • 我一直在尝试可视化地模拟交通问题,但由于某种原因,我在swing窗口中只得到了空白输出。我只看到一个灰色的屏幕,而不是一个不断移动的汽车画面。 我的绘画课如下所示: 在我的主函数中对类的调用如下: 然后,随着我模拟的每一次迭代,我打电话给 我错过了什么?

  • 我只是想制作一个小而简单的应用程序(两年前我已经在Objective-C和api V1中制作了这个应用程序),它显示一个屏幕,上面有事件时间和描述,还有一个按钮:“在日历中插入事件”。显然,每个用户都必须用自己的谷歌用户名和密码配置应用程序。该应用程序使用第一个可用日历简化了一些过程。 我在尝试使用javascript时遇到了无限的问题(这个应用程序将用html5制作),所以,看看文档,我最终尝试

  • 我在Spring MVC中显示jsp页面时遇到了问题。这是一个带有Gradle和IntelliJ CE的基本hello world Spring MVC: 我得到以下错误页面: 这是我的身材。格拉德尔: 视图解析器文件: 控制器页面: jsp页面位置: application.properties文件内容: 使用默认模板引擎,页面显示正确,但使用jsp,它无法工作 日志错误: https://ha

  • 但有没有更简单的解决办法呢?

  • 但现在,有些服务会变成空的。是否有方法在@Runwith注释中同时使用SpringJunit4ClassRunner.class和PowerMockRunner.class

  • 问题内容: 我正在尝试使用JavaScript计算两次之间的差异。这只是基本的数学运算,但是在使用and 时,我似乎对此有一些疑问。 如果您想知道为什么要将功能应用于日期,那是因为我使用本地存储在客户端存储一些数据,并在客户端再次访问我的网站时使用它(这种方式比发出更多请求要快)到服务器)。该数据通常会不时更新一次(我是通过另一个网站的API获取数据),因此我设置了一个变量,并将其与其他数据一起存