这是php代码。函数require,query和render都是给我们的。
<?php
// configuration
require("../includes/config.php");
$rows = CS50::query("SELECT `symbol`, `shares`, `cash` FROM `portfolios`, `users` WHERE ?", $_SESSION["id"]);
$positions = [];
foreach ($rows as $row)
{
$stock = lookup($row["symbol"]);
$total = ($stock["price"] * $row["shares"]);
if ($stock !== false)
{
$positions[] = [
"name" => $stock["name"],
"price" => $stock["price"],
"shares" => $row["shares"],
"symbol" => $row["symbol"],
"total" => $total,
"cash" => $row["cash"]
];
}
}
// render portfolio
render("portfolio.php", ["positions" => $positions, "title" => "Portfolio"]);
这是我的HTML输出
<div id="middle">
<table class="table table-striped">
<thead>
<tr>
<th >Symbol</th>
<th >Name</th>
<th >Shares</th>
<th >Price</th>
<th >TOTAL</th>
</tr>
</thead>
<tbody>
<?php foreach ($positions as $position): ?>
<tr>
<td align="left" ><?= $position["symbol"] ?></td>
<td align="left" ><?= $position["name"] ?></td>
<td align="left" ><?= $position["shares"] ?></td>
<td align="left" ><?= number_format($position["price"], 2) ?></td>
<td align="left" ><?= number_format($position["total"], 2) ?></td>
</tr>
<?php endforeach ?>
<tr>
<td colspan="4" align="left">CASH</td>
<td align="left"><?= number_format($position["cash"], 2) ?></td>
</tr>
</tbody>
</table>
我的猜测是我的foreach循环有问题。但我不太确定,我的SQL数据库中也可能存在一些错误。
我的mySQL数据库由3行user_id
,symbol
,shares
组成。而对于我的user_id,我有3个不同的股票,每个股票都有10股。
任何人都知道可能出现什么问题?
答案 0 :(得分:1)
如果它运行7次意味着返回7行,则foreach循环正常。问题很可能就在这里:
$rows = CS50::query("SELECT `symbol`, `shares`, `cash` FROM `portfolios`, `users` WHERE ?", $_SESSION["id"]);
您没有指明哪个列应该与ID相等,因此它可能会返回所有列。需要这样的东西:
$rows = CS50::query("SELECT `symbol`, `shares`, `cash` FROM `portfolios`, `users` WHERE portfolios.user_id = ?", $_SESSION["id"]);