php - forech 显示比数据库少一行
问题描述
我有一个 if 语句,如果我的表中存在某种条件,它会动态显示 html,其中包含数据库中存在的每一行的数据,我正在使用 foreach 循环,但它在行上显示的内容少于其中的内容实际的表,如果它有三行,它会显示两行,如果只有一行它什么也不显示,它会通过 if 语句,因为如果它不显示错误消息,但在我的情况下它只是显示一个空白页面,为什么会这样?
function show()
{
$stmt = $this->db->prepare("SELECT offered_rides.*, reg.*
FROM offered_rides
JOIN reg ON offered_rides.phone = reg.phone where
offered_rides.date = :date AND offered_rides.seats >= :seats AND offered_rides.start = :start AND offered_rides.finish = :finish ");
$stmt->bindParam(':date',$this->date);
$stmt->bindParam(':seats',$this->seats);
$stmt->bindParam(':start',$this->from);
$stmt->bindParam(':finish',$this->to);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($row)
{
foreach($stmt as $row):
?>
<form action="Update.php" method="POST">
<div class="a">
<div class="fnamelname">
<p style="display:inline;"> <?php echo $row["fname"];?> </p>
<p style="display:inline;"> <?php echo $row["lname"];?> </p>
</div>
</div>
//i need to store these to use them later
<input type = "hidden" name = "phone-D" value = "<?=$row['phone'] ?>" />
<input type = "hidden" name = "time" value = "<?= $row['time'] ?>" />
<input type = "hidden" name = "seats" value = "<?= $row['seats'] - $this->seats?>" />
</form>
<?php endforeach;
}
解决方案
这完全没有意义:foreach($stmt as $row):
. $stmt
不是数组,它是单个对象。相反,您应该使用以步骤为条件的while
循环。$row = $stmt->fetch(PDO::FETCH_ASSOC);
因为该fetch()
方法每次调用时都会返回一行。这就是你想要的。
function show() {
$stmt = $this->db->prepare("SELECT offered_rides.*, reg.* FROM offered_rides JOIN reg ON offered_rides.phone = reg.phone WHERE offered_rides.date = :date AND offered_rides.seats >= :seats AND offered_rides.start = :start AND offered_rides.finish = :finish ");
$stmt->bindParam(':date',$this->date);
$stmt->bindParam(':seats',$this->seats);
$stmt->bindParam(':start',$this->from);
$stmt->bindParam(':finish',$this->to);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
?>
<form action="Update.php" method="POST">
<div class="a">
<div class="fnamelname">
<p style="display:inline;"> <?php echo $row["fname"];?> </p>
<p style="display:inline;"> <?php echo $row["lname"];?> </p>
</div>
</div>
//i need to store these to use them later
<input type = "hidden" name = "phone-D" value = "<?=$row['phone'] ?>" />
<input type = "hidden" name = "time" value = "<?= $row['time'] ?>" />
<input type = "hidden" name = "seats" value = "<?= $row['seats'] - $this->seats?>" />
</form>
<?
}
}
和一个提示:当在 php 中以相应的方式使用“短标签”时,你的 html 标记会更容易阅读:
<form action="Update.php" method="POST">
<div class="a">
<div class="fnamelname">
<p style="display:inline;"><?= $row["fname"]?></p>
<p style="display:inline;"><?= $row["lname"]?></p>
</div>
</div>
//i need to store these to use them later
<input type="hidden" name="phone-D" value="<?=$row['phone']?>"/>
<input type="hidden" name="time" value="<?= $row['time']?>"/>
<input type="hidden" name="seats" value="<?= $row['seats'] - $this->seats?>"/>
</form>
推荐阅读
- javascript - 你如何在animejs中为translateZ设置动画?
- python - 我有 2 个列表,我想合并它们,答案应该如下所示
- c# - 将值从 Object 转换为 int
- postgresql - org.postgresql.util.PSQLException:连接到 localhost:5432 被拒绝。数据块 JDBC
- javascript - 在运行源脚本的另一个网页中显示 Div
- webpack - 如何配置 webpack 的资产资源模块,让 url 不奇怪?
- cryptocurrency - Solana 的 Serum Dex 如何确定 Sol 价格?
- c++ - 由于使用特征库的默认参数导致的分段错误
- owlready - 如何在 Owlready2 中处理 python 中的无效属性名称
- python - 如何从不同的文件名(在 .aws 中不称为凭据)读取 S3 凭据?