php - PHP foreach 循环数组
问题描述
我有一个脚本,它在排行榜上显示用户信息。它通过“registrations”表获取每个用户的显示信息,如顶部 sql 所示,但是他们的后端信息(用户名、用户 ID、IP 地址等)存储在“users”表中。注册表有一个列“user_id”,我试图将它与用户表链接,该表可以在foreach
.
目标是为每个用户显示用户名(存储在“用户”中) - 显示在<td class='center'>" . $userdata['username'] . "</td>
. 但是,用户名未显示。
在底部,我试图将记录插入到另一个表中,该表也使用相同的用户名值,但是它作为空字符串插入。请注意INSERT
应该只为被点击的用户插入..这甚至可以实现吗?
-另外,我知道这个 PHP 不是最好的,应该使用准备好的语句等,但这不是目前的目标。
<?php
$sql = mysqli_query($DB, "SELECT * FROM registrations LIMIT 5");
foreach ($sql as $row)
{
$userdata = mysqli_fetch_assoc(mysqli_query($DB, "SELECT * FROM users WHERE id='" . $row['user_id'] . "'"));
echo "
<tr class='gradeX'>
<td class='center'>" . $userdata['username'] . "</td>
<td class='center'>" . $row['balance'] . "</td>
<td class='center'>" . $row['wins'] . " - " . $row['losses'] . "</td>
<td class='center'><form method='post' action=''><input type='submit' class='btn btn-success' name='invite' value='Request Game'/></form></td>
<td class='center'><a href='' class='btn btn-success'>WATCH STREAM</a></td>
</tr>";
}
if (isset($_POST['invite']))
{
$query = "INSERT INTO matches (id,sender,receiver,time,console,rank_sender,rank_receiver,status) values ('0', '" . $_SESSION['username'] . "', '" . $userdata['username'] . "', '" . time() . "', '" . $row['type'] . "', '" . $GETD['rank'] . "', '$rank', 'pending')";
mysqli_query($DB, $query);
}
?>
谢谢你的帮助 :)
解决方案
使用 a JOIN
,您可以执行单个查询并获取所需的数据。mysqli::query()
我还将它转换为使用准备好的语句 -即使查询中没有变量,也应该在标准方法上使用它。
您的INSERT
查询完全没有意义(根据您在问题中的变量判断),因此您应该查看变量并将它们设置为应有的状态(您的问题中的代码将插入最后获取的用户名用户名,这不一定是您期望的值)。
我还id
从INSERT
查询中删除了您,这应该是您matches
表中的自动增量。
您需要为该行TODO
附加注释中的行分配正确的值。
$stmt = $DB->prepare("SELECT u.username, r.balance, r.wins, r.losses
FROM registrations r
JOIN users u
ON u.id=r.user_id
LIMIT 5
");
$stmt->bind_result($username, $balance, $wins, $losses);
$stmt->execute();
while ($stmt->fetch()) {
?>
<tr class='gradeX'>
<td class='center'><?php echo $username; ?></td>
<td class='center'><?php echo $balance; ?></td>
<td class='center'><?php echo $wins; ?> - <?php echo $losses; ?></td>
<td class='center'>
<form method='post' action=''>
<input type='submit' class='btn btn-success' name='invite' value='Request Game'/>
</form>
</td>
<td class='center'><a href='' class='btn btn-success'>WATCH STREAM</a></td>
</tr>
<?php
}
$stmt->close();
if (isset($_POST['invite'])) {
// Assign the variables here.
$username_sender = 'somevalue'; // TODO: Define this.
$time = time();
$rank_sender = $GETD['rank'];
$rank_receiver = $rank; // TODO: Define this.
$console = $type; // TODO: Define this.
$status = 'pending';
$stmt = $DB->prepare("INSERT INTO matches (sender, receiver, time, console, rank_sender, rank_receiver, status)
VALUES (?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("sssssss", $_SESSION['username'], $username_sender, $time, $console, $rank_sender, $rank_receiver, $status);
$stmt->execute();
$stmt->close();
}
推荐阅读
- javascript - 如何在 WKWebView 中注入多个用户脚本以获得暗模式效果?
- android - How to maintain session in Android Kotlin Webview
- xaml - UWP / XAML:ListView 上更大的显示效果(或渐变自定义)
- php - 基于数组动态构建数组
- python-3.x - 找不到 conda 环境:python_cvcourse
- reactjs - 组件之间的连接 React - 购物车
- python-3.x - 使用python查询特定的块文件
- tensorflow - Tensorflow:将预训练的模型权重加载到不同的架构中
- javascript - 如何在 Docusaurus 中自定义发行说明页面?
- c++ - C++ 和 XAML - 来自文本框的数字输入