【问题标题】:While loop overwrites data every time, how can I work around this?虽然循环每次都会覆盖数据,但我该如何解决这个问题?
【发布时间】:2022-01-17 20:41:36
【问题描述】:

我有以下问题。 我想用 Ajax 设置一个报告按钮,这会传递某些变量,如评论 ID、评论的创建者。

正如我所说,我已经使用 Ajax 实现了这一点,到目前为止一切都很好。

我的 PHP 代码在另一个 PHP 文件中作为 POST。

我有一个 While 循环,我在其中输出数据库中的所有数据。

现在我想通过 SESSION 保存和传递这些数据,但是这个数据每次都会被 While 循环覆盖,我该如何解决这个问题?

$stmt = $pdo->prepare("SELECT * FROM threadComments WHERE subThreadsID = ? ORDER BY created_at DESC ");
$stmt->execute([$page]);
while($row = $stmt->fetch()){
    $createdComments = $row['created_at'];
    $idComment = $row['id'];
    $userlike = $row['userlike'];
    $userid = $row['userid'];
    $username = $row['username'];
    $dateNow = date_create($createdComments, timezone_open('Europe/Berlin'));
    $timeNow = time();
    $seconds = strtotime($createdComments);
    $diffSeconds = $timeNow - $seconds;
    $date = date_format($dateNow, 'd.m.Y - H:i');

    $statement = $pdo->prepare("SELECT userid, userImage FROM users WHERE userid = ?");
    $statement->execute([$userid]);
    $rowImages = $statement->fetch();
    extract($rowImages);


    $string = $row['threadContent'];
    $string = convertHashtags($string);
    
    HTML /////

    $_SESSION['commentContent'] = $string;
    $_SESSION['commentCreaterID'] = $row['userid'];
    $_SESSION['commentID'] = $row['id'];

}
?>

【问题讨论】:

  • 使每个会话变量成为一个数组并推入它。
  • 或者使用一个二维数组的会话变量。
  • @Barmar 我该怎么做?你能给我看例子吗?
  • 与推入任何其他阵列的方式相同。$_SESSION['commentContent'][] = $string;

标签: php mysql ajax


【解决方案1】:

将它们放入$_SESSION 中的数组中。将其设为关联数组,以便您可以使用 $_SESSION['comments'][$id] 获取特定评论 ID 的数据

$stmt = $pdo->prepare("SELECT * FROM threadComments WHERE subThreadsID = ? ORDER BY created_at DESC ");
$stmt->execute([$page]);
$_SESSION['comments'] = [];
while($row = $stmt->fetch()){
    $createdComments = $row['created_at'];
    $idComment = $row['id'];
    $userlike = $row['userlike'];
    $userid = $row['userid'];
    $username = $row['username'];
    $dateNow = date_create($createdComments, timezone_open('Europe/Berlin'));
    $timeNow = time();
    $seconds = strtotime($createdComments);
    $diffSeconds = $timeNow - $seconds;
    $date = date_format($dateNow, 'd.m.Y - H:i');

    $statement = $pdo->prepare("SELECT userid, userImage FROM users WHERE userid = ?");
    $statement->execute([$userid]);
    $rowImages = $statement->fetch();
    extract($rowImages);


    $string = $row['threadContent'];
    $string = convertHashtags($string);
    
    HTML /////

    $_SESSION['comments'][$row['id']] = [
        'content' => $string,
        'creatorID' => $row['userid'],
        'commentID' => $row['id']
    ];
}
?>

【讨论】:

  • 感谢您的回复,我如何才能准确访问所报告的评论?这里所有的 cmets 都存储在一个变量中。当用户报告评论时,我只需要来自 ID 的数据(示例) 5.
  • 您可以将其设为关联数组,其中 ID 为键。
  • 是的,我现在已将会话保存到一个变量中,在那里我可以使用 [0]['creatorID'] 访问数据。我现在遇到的问题是,如何传递正确数量的评论,以便我可以报告正确的 cmets。
  • 将 ID 放在隐藏的表单域中。
  • 嗨,谢谢你的帮助,我现在完全糊涂了。在我的数组中没有存储 ID。 exampleArray[NUMBER OF DATA][DATA I WANT TO ACCESS] 我现在怎么知道我的评论 X Y Z 在我的数组中是第 2 位?
猜你喜欢
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2011-12-11
  • 1970-01-01
  • 2020-12-27
  • 2015-01-25
  • 2017-07-02
相关资源
最近更新 更多