我一直在与这段代码作斗争很长一段时间,似乎无法让它工作。
尝试了很多配置变种但无济于事。最令人困惑的部分是,它对于显示产品目录(具有不同的变量)非常好,但不是这个!
错误是:
( ! ) Notice: Undefined variable: quotes in C:\wamp\www\longlifedecking\quote.php on line 40 Call Stack
# Time Memory Function Location 1 0.0089 689992 {main}( ) ..\quote.php:0
( ! ) Warning: Invalid argument supplied for foreach() in C:\wamp\www\longlifedecking\quote.php on line 40 Call Stack
# Time Memory Function Location 1 0.0089 689992 {main}( ) ..\quote.php:0
和我合并的代码是:
<?php include 'inc/header.php'; ?>
<?php include 'inc/dbconnect.php'; ?>
<?php
// Quotes link from Nav
$sessionProdId = $_SESSION["cart"];
$result = mysqli_query($link, "SELECT prod_id, prod_name, prod_text FROM products WHERE prod_id ='$sessionProdId'");
if (!$result)
{
$error = 'Error fetching products: ' . mysqli_error($link);
include 'error.php';
exit();
}
while ($row = mysqli_fetch_array($result))
{
$quotes[] = array('id' => $row['prod_id'], 'name' => $row['prod_name'], 'text' => $row['prod_text']);
}
?>
<section id="ctrCol" class="fl">
<section class="partFill lrgMod ctr">
<header>
<h1>Quote me</h1>
</header>
<p>Your shopping cart contains <?php echo count($_SESSION['cart']); ?> items.</p>
<?php Print_r ($_SESSION); ?>
<div class="partFill">
<ul>
<?php foreach ($quotes as $quote): ?>
<li>
<h3><?php echo htmlspecialchars($quote['name'], ENT_QUOTES,'UTF-8'); ?></h3>
<p><?php echo htmlspecialchars($quote['text'], ENT_QUOTES,'UTF-8'); ?></p>
</li>
<?php endforeach; ?>
</ul>
</div>
</section>
</section> <!-- end of ctrCol -->
<?php include 'inc/rightnav.php'; ?>
<?php include 'inc/footer.php'; ?>
如果这篇文章格式不正确,我很抱歉,这是我的第一篇文章,只是习惯了它!
非常感谢所有人。
答案 0 :(得分:2)
您只需在开始使用它之前初始化$quotes
,因此如果您的查询没有返回任何行,它就存在:
$quotes = array();
while ($row = mysqli_fetch_array($result))
{
$quotes[] = array('id' => $row['prod_id'], 'name' => $row['prod_name'], 'text' => $row['prod_text']);
}
答案 1 :(得分:2)
您从未在while()
循环之外定义$ quotes。如果查询没有返回任何行,则不会定义$ quotes,并且foreach循环将失败。同样,因为它没有在循环外定义,所以你没有告诉PHP它是一个数组,所以它会警告你。
简单地添加
$quotes = array();
紧接在while(fetch...)
循环之外的应解决问题。
答案 2 :(得分:1)
我可以说,唯一的原因是如果db查询没有结果,那么$ quotes永远不会设置任何东西。但总的来说,这只是一个通知,没什么大不了的。你可以通过在while循环之前将$ quotes声明为数组来摆脱它。
$quotes = array();
答案 3 :(得分:1)
警告您使用的是未声明的变量。
你可以从
开始 quote = array();
初始化它。
答案 4 :(得分:1)
非常不言自明:在$quotes = array();
声明之前放置while
,这两个问题都应该得到解决。
答案 5 :(得分:1)
您有mysql错误,或者查询结果为空。因此,quotes数组永远不会被初始化。
答案 6 :(得分:1)
无论出于何种原因,你都没有取得任何结果。
2种修复方法
1.)压制错误.. <?php foreach ((array)$quotes as $quote): ?>
2.)将$引号初始化为一个以$quotes=arrray();
答案 7 :(得分:0)
最后解决了问题。问题是没有任何值传递给MySQL查询的变量。
我没有正确使用会话的数组。要使用我必须在会话中保存的ID 内爆数组。
$sessionProdId = implode(",",$_SESSION['cart']);
$result = mysqli_query($link, "SELECT prod_id, prod_name, prod_text FROM products WHERE prod_id IN ($sessionProdId)");
然后,这允许输出与前面的代码一起正常工作。