【问题标题】:Why am I getting an undefined index error with this query?为什么此查询会出现未定义的索引错误?
【发布时间】:2013-11-26 16:54:44
【问题描述】:

我正在创建一个非常简单的内容管理系统...不幸的是,我无法从我的数据库中检索帖子。我的错误是:

注意:未定义索引:C:\wamp\www\NightOwlSoftware\index.php 中的标题

<?php
include 'scripts/db_connect.php';
include 'scripts/functions.php';

sec_session_start();
$sql = "SELECT * FROM blog";
$result = mysqli_query($mysqli, $sql);

while($row = mysqli_fetch_array($result)) {
    echo'<div class="blog"><h3 class="blog">' . $row['title'] . "</h3>";
    echo'<span class="blog"> Date: ' . $row['date'] . " Tag: " . $row['tag'] . "</span><hr>";
    echo'<p class="blog">' . $row['body'] . "</p>";
}
?>

这是存储数据的工作脚本,证明我的列都在那里......

<?php
include 'db_connect.php';
include 'functions.php';
sec_session_start();
$title = $_POST['title'];
$body = $_POST['body'];
$tag = $_POST['tag'];
$date = date_create()->format('Y-m-d H:i:s');
$sql = "INSERT INTO blog (date, title, body, tag)
VALUES ('$date', '$title', '$body', '$tag')";
mysqli_query($mysqli, $sql);
mysqli_close($mysqli);
header( 'Location: ../index.php' ) ;
?>

【问题讨论】:

  • 您的blog 表是否有title 列?
  • 确实如此。我有一个脚本可以将表单数据存储到有效的数据库中(它使用相同的列标题)。
  • 注释掉回声并在 while 循环中使用 print_r($row)。你得到的价值观是什么?
  • 您的字段名称是否以大写字母开头?
  • 所以问题是列名是大写的。我没有意识到这是问题所在,因为当我将数据存储在数据库中时,我没有将列标题大写,它解决了导致我相信这不是问题的错误!非常感谢大家!

标签: php mysql


【解决方案1】:

如果这是您遇到的唯一错误(即日期、标签、正文都可以正常工作),那么您可能在创建数据库时输入错误,实际上并没有 title 列作为结果。或者该列可能有不同的名称,例如 namesubjectim_so_bored_i_dont_know_what_im_typing...(对不起,我很无聊!)

【讨论】:

  • 我在每次回显时都收到一个错误,它们都不起作用,但所有列都在那里。不幸的是,我正在学习本教程:w3schools.com/php/php_mysql_select.asp 所以我不知道从哪里开始调试它。我尝试回显 $row 但我认为我的语法不正确...
  • 从阅读this开始。然后,找到一个真正有价值的教程。
【解决方案2】:

您将获得一个未定义的 title 索引,因为数组 $row 中没有 title

我建议您查看blog 表的数据库结构,但我还建议您在while 中进行一些基本数据检查,以确保仅呈现存在的内容。看看这个:

<?php
include 'scripts/db_connect.php';
include 'scripts/functions.php';

sec_session_start();
$sql = "SELECT * FROM blog";
$result = mysqli_query($mysqli, $sql);

while($row = mysqli_fetch_array($result)) {
    if (array_key_exists('title', $row) && !empty($row['title'])) {
      echo'<div class="blog"><h3 class="blog">' . $row['title'] . "</h3>";
    }
    if (array_key_exists('date', $row) && !empty($row['date'])) {
      echo '<span class="blog"> Date: ' . $row['date'];
    }
    if (array_key_exists('tag', $row) && !empty($row['tag'])) {
      echo " Tag: " . $row['tag'] . "</span><hr>";
    }
    if (array_key_exists('body', $row) && !empty($row['body'])) {
      echo'<p class="blog">' . $row['body'] . "</p>";
    }
}
?>

如果这一切都运行并且没有渲染,那么您的数据库查询有缺陷,因此不会返回数据。在while 循环之前检查这一点的一种简单方法是将数组转储到屏幕上以查看其中的内容:

<?php
include 'scripts/db_connect.php';
include 'scripts/functions.php';

sec_session_start();
$sql = "SELECT * FROM blog";
$result = mysqli_query($mysqli, $sql);

while($row = mysqli_fetch_array($result)) {
  echo '<pre>';
  print_r($row);
  echo '</pre>';

 [ rest of your code goes here]

【讨论】:

    【解决方案3】:

    如果可以,我会将此添加为评论,因为这不是真正的答案。我同意其他最有可能的 - DB 中的列名与您在代码中的名称不匹配。

    无论如何,当我遇到这种情况时,您可以使用调试器或使用 print_r。

    在你的 while 循环中,添加 print_r 语句 -

    while($row = mysqli_fetch_array($result)) {
    print_r($row);
    echo'<div class="blog"><h3 class="blog">' . $row['title'] . "</h3>";
    echo'<span class="blog"> Date: ' . $row['date'] . " Tag: " . $row['tag'] . "</span><hr>";
    echo'<p class="blog">' . $row['body'] . "</p>";
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-02
      • 2018-07-09
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多