对于每个问题/ PHP注意:未定义的变量

时间:2011-03-08 17:16:55

标签: php

我一直在与这段代码作斗争很长一段时间,似乎无法让它工作。

尝试了很多配置变种但无济于事。最令人困惑的部分是,它对于显示产品目录(具有不同的变量)非常好,但不是这个!

错误是:

( ! ) 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'; ?>   

如果这篇文章格式不正确,我很抱歉,这是我的第一篇文章,只是习惯了它!

非常感谢所有人。

8 个答案:

答案 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)");

然后,这允许输出与前面的代码一起正常工作。