我有一个项目类别的查询,在这个例子中我有两个来自智利的葡萄酒。 我下面的代码工作正常,但只有foreach循环或它是什么,它与第一个输出与第二个输出重叠。
我是for-each循环的新手
这是我的PHP:
<?php
include"db_connection.php";
$sql = mysql_query("SELECT * FROM WINE WHERE country='Chile'");
$allRows = array();
while($row = mysql_fetch_array($sql)) {
$allRows[] = $row;
}
foreach ($allRows as $row) {
$id = $row ["id"];
$description = $row["description"];
$wine_type = $row["wine_type"];
$country = $row["country"];
$bottle_price = $row["bottle_price"];
$indicator = $row["indicator"];
$colour = $row["colour"];
$case_price = $row["case_price"];
$case_size = $row["case_size"];
$date_added = strftime("%b %d, %Y", strtotime($row["date_added"]));
}
?>
这是HTML:
<?php include('header.php'); ?>
<div id="content">
<table width="100%" border="0" cellspacing="0" cellpadding="15">
<?php
foreach ($allRows as $row) {
?>
<tr>
<td width="19%" valign="top"><img src="inventory_images/<?php echo $row['id']; ?>.jpg" width="142" height="188" alt="<?php echo $row['wine_type']; ?>" /><br />
<a href="inventory_images/<?php echo $id; ?>.jpg">View Full Size Image</a></td>
<td width="81%" valign="top"><h3><?php echo $wine_type; ?></h3>
<p><?php echo "$".$bottle_price; ?><br /><br />
<?php echo "$country $indicator"; ?> <br /><br />
<?php echo $description; ?> <br />
</p>
<form id="form1" name="form1" method="post" action="cart.php">
<input type="hidden" name="pid" id="pid" value="<?php echo $id; ?>" />
<input type="submit" name="button" id="button" value="Add to Shopping Cart" />
</form>
</td>
</tr>
<?php
}
?>
</table>
</div>
<?php include('footer.php'); ?>
答案 0 :(得分:1)
您会在每个循环中覆盖$id
等变量,因此只保存最后一行的结果。
但是,您根本不需要这些变量,因为您已将所有信息保存在$allRows
中。就像您通过HTML中的<?php echo $row['id']; ?>
访问ID一样,您应该使用所有其他变量。例如:$row["bottle_price"]
而不是$bottle_price
。
您的PHP代码如下所示:
<?php
include"db_connection.php";
$sql = mysql_query("SELECT * FROM WINE WHERE country='Chile'");
$allRows = array();
while($row = mysql_fetch_array($sql)) {
$allRows[] = $row;
}
?>
您的HTML就像这样:
<?php include('header.php'); ?>
<div id="content">
<table width="100%" border="0" cellspacing="0" cellpadding="15">
<?php
foreach ($allRows as $row) {
?>
<tr>
<td width="19%" valign="top">
<img src="inventory_images/<?php echo $row['id']; ?>.jpg" width="142" height="188" alt="<?php echo $row['wine_type']; ?>" /><br />
<a href="inventory_images/<?php echo $row['id']; ?>.jpg">View Full Size Image</a>
</td>
<td width="81%" valign="top">
<h3><?php echo $row['wine_type']; ?></h3>
<p><?php echo "$".$row['bottle_price']; ?><br /><br />
<?php echo $row['country']." ".$row['indicator']; ?> <br /><br />
<?php echo $row['description']']; ?> <br />
</p>
<form id="form1" name="form1" method="post" action="cart.php">
<input type="hidden" name="pid" id="pid" value="<?php echo $row['id']; ?>" />
<input type="submit" name="button" id="button" value="Add to Shopping Cart" />
</form>
</td>
</tr>
<?php
}
?>
</table>
</div>
<?php include('footer.php'); ?>
答案 1 :(得分:0)
从外观上看,你循环遍历数组两次。一旦设置变量,然后一次显示它。这里的问题是你在使用之前编写变量。
foreach ($allRows as $row) {
$id = $row ["id"];
$description = $row["description"];
$wine_type = $row["wine_type"];
$country = $row["country"];
$bottle_price = $row["bottle_price"];
$indicator = $row["indicator"];
$colour = $row["colour"];
$case_price = $row["case_price"];
$case_size = $row["case_size"];
$date_added = strftime("%b %d, %Y", strtotime($row["date_added"]));
?>
<tr>
<td width="19%" valign="top"><img src="inventory_images/<?php echo $row['id']; ?>.jpg" width="142" height="188" alt="<?php echo $row['wine_type']; ?>" /><br />
<a href="inventory_images/<?php echo $id; ?>.jpg">View Full Size Image</a></td>
<td width="81%" valign="top"><h3><?php echo $wine_type; ?></h3>
<p><?php echo "$".$bottle_price; ?><br /><br />
<?php echo "$country $indicator"; ?> <br /><br />
<?php echo $description; ?> <br />
</p>
<form id="form1" name="form1" method="post" action="cart.php">
<input type="hidden" name="pid" id="pid" value="<?php echo $id; ?>" />
<input type="submit" name="button" id="button" value="Add to Shopping Cart" />
</form>
</td>
</tr>
?><?php
}
?>
您需要设置变量并在同一个foreach()中使用它们。
因为mysql_query是不安全的,所以转向PDO可能是明智的,并且自PHP 5.5.0起不推荐使用。