【问题标题】:Notice: Undefined property: stdClass::$media_type注意:未定义的属性:stdClass::$media_type
【发布时间】:2015-02-27 00:22:42
【问题描述】:

我目前正在设置我的投资组合,但我不断收到以下错误:

注意:未定义的属性:/Applications/MAMP/htdocs/year_3/Site_2/portfolio/project.php 第 54 行中的 stdClass::$media_type

注意:未定义的属性:第 59 行 /Applications/MAMP/htdocs/year_3/Site_2/portfolio/project.php 中的 stdClass::$media_type 1.点

注意:未定义的属性:/Applications/MAMP/htdocs/year_3/Site_2/portfolio/project.php 第 54 行中的 stdClass::$media_type

注意:未定义的属性:/Applications/MAMP/htdocs/year_3/Site_2/portfolio/project.php 第 59 行中的 stdClass::$media_type

  1. 圈子

这是代码:

$id = $_GET['id'];
if (!is_numeric($id)) {
    //die('DONT BE A JERK');
    header('Location: index.php');
}

require_once('includes/config.php');
require_once('includes/lib.php');

$db = dbConnect();

$query = "
SELECT projects.* FROM projects
WHERE projects.id = '$id'
";

$project = dbSelect($db, $query);
$project = $project[0];


$query = "
    SELECT media.* FROM media
    WHERE media.project_id = '$project->id'
    ORDER BY media.rank ASC
";

$media = dbSelect($db, $query);

$project->media = $media;

dbClose($db);

?>

<!DOCTYPE html>
<html>
<head>
<title>Missy Skae</title>
<link rel="stylesheet" href="style.css">
</head>
<body>

<h1><?=$project->title;?></h1>
<h2><?=$project->date;?></h2>
<p><?=$project->description;?></p>

<?
foreach($project->media as $media) {

    ?>
    <div class="media">

这之后的行是第 54 行。

        <?
        if ($media->media_type == 'image') {
            ?>
                <img src="media/<?=$media->filename;?>">
                <p><?=$media->imagenumber;?></p>
            <?

        } elseif ($media->media_type == 'video') {
            // video
        }
        ?>

        <p><?=$media->imagedescription;?></p>
    </div>
    <?
}
?>

</body>
</html>

有人有什么想法吗?

【问题讨论】:

  • 你的媒体表格有哪些列?
  • id、project_id、primary、rank、文件名、mediatype、imagedescription、imagenumber

标签: php undefined


【解决方案1】:

错误:

$query = "
    SELECT media.* FROM media
    WHERE media.project_id = '$project->id'
    ORDER BY media.rank ASC
";

对:

$query = "
    SELECT media.* FROM media
    WHERE media.project_id = '" . $project->id . "'
    ORDER BY media.rank ASC
";

更多:

$project = dbSelect($db, $query);
$project = $project[0];

确保您在此处获得正确的值。 在我看来,没有结果,或者结果以不同的形式(数组)返回。

header('Location: index.php');

如果后面不使用exit;,脚本会继续执行。

不应使用短开标签,它们在大多数服务器上默认关闭:

<?=$media->imagedescription;?>

<?php echo $media->imagedescription; ?>

查看PDO 和准备好的语句。方式更清洁,更易于维护:-)

【讨论】:

  • 我不认为这是 OP 的问题,原始查询应该可以工作,因为它在双引号内并且应该正确插入 $project-&gt;id。也就是说,你的代码对我来说更具可读性。
  • 谢谢!我试过这个,但它没有改变任何东西。为什么第一个错了?
  • @MissySkae 当您将变量直接放入字符串时,它的工作并不是 100% 可靠的。但它可能会起作用。
【解决方案2】:

$media-&gt;media_type 的所有实例更改为$media-&gt;mediatype 以匹配数据库中的列。那应该可以解决您的问题。我同意@DanFromGermany 的观点,您可能应该考虑使用PDO / Prepared Statements 与您的数据库进行交互。

【讨论】:

  • 好发现!我会使用$media-&gt;{media.type},或者在查询中设置别名,或者使用 PDO 并绑定结果.. 很多方法都会导致罗马:D
  • 不敢相信我没有看到!现在我明白了....可捕获的致命错误:第 55 行的 /Applications/MAMP/htdocs/year_3/Site_2/portfolio/project.php 中的类 stdClass 的对象无法转换为字符串
  • 在你的文件中,你能做一个var_dump($media-&gt;mediatype); 并用结果更新你的问题吗?目前尚不清楚您的dbSelect() 函数返回的是什么。
  • 我在哪里放置 var_dump?
  • 查询媒体表后的任何位置。我会在它之后添加一个die; 以停止执行,以便您可以检查输出。
猜你喜欢
  • 1970-01-01
  • 2016-04-17
  • 2016-11-12
  • 2011-03-05
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
相关资源
最近更新 更多