【问题标题】:the image cannot be displayed because it contains errors warning图像无法显示,因为它包含错误警告
【发布时间】:2015-03-08 18:53:05
【问题描述】:

所以我想我永远不会得到答案哈哈......

老问题,请阅读编辑

我正在尝试将图片上传到 mysql 数据库后显示。

但是通过firefox尝试打开图片显示如下警告:

图片无法显示,因为它包含错误

我已经为此搜索谷歌几个小时了,但我真的找不到解决这个问题的方法。所以现在你们是我最后的希望了:)

这里是php:

    <?php
session_start();

$con = mysql_connect("localhost", "...", "...");
mysql_select_db('...',$con);

$id = $_GET['id'];
$result = mysql_query("SELECT image, mime FROM artikel WHERE id='$id'");

$row = mysql_fetch_object($result);
header("Content-type: $row->mime");
echo $row->image;
    ?>

编辑 我认为错误出在 insert.php 中。 有人可以看看它并告诉我可能有什么问题吗?谢谢 :) (我认为图片上传不正确)

<?php
session_start();
header('content-type: text/html; charset=utf-8');
$uname = $_POST['username'];
$typ = $_POST['typ'];
$titel = $_POST['titel'];
$content = $_POST['content'];
$timestamp = time();

$db = new mysqli("localhost", "...", "...", "...");
if($db->connect_errno > 0){
    die("Unable to connect to database: " . $db->connect_error);
}

if(is_uploaded_file($_FILES['image']['tmp_name'])) {
        // Verweis auf Bild
        $image = $_FILES['image']['tmp_name'];

        // Vorbereiten für den Upload in DB
        $data = addslashes(file_get_contents($image));

        // Metadaten auslesen
        $meta = getimagesize($image);
        $mime = $meta['mime'];
}

//create a prepared statement
$stmt = $db->set_charset("utf8");
$stmt = $db->prepare("INSERT INTO artikel (`red`, `typ`, `titel`, `content`, `image`, `mime`, `timestamp`) VALUES (?,?,?,?,?,?,?)");

//bind the username and message
$stmt->bind_param('sssssss', $uname, $typ, $titel, $content, $data, $mime, $timestamp);

//run the query to insert the row
$stmt->execute();

header("Location: erfolg.php");

?>

【问题讨论】:

  • 您是否尝试在评论中设置header?这样,您将看到脚本抛出的任何警告/错误。在将脚本强制为图像之前,请确保不存在任何警告和错误
  • 您确定从中获取图像的表名为artikel
  • @l0lander 是的,我是 :) 这是文章的德语含义。
  • 使用 print_r($row) 来确认您是否正在检索图像。要显示图像,您需要指向该位置。 Just name 将仅显示名称。
  • 哦,那我已经学到了一些东西:)

标签: php mysql


【解决方案1】:

我按照here 的指示进行操作。我插入了带有附加 mime 字段的图像并检查了代码是否正常工作。

确认您的 mime 类型是否正确。如果是,则图像可能已损坏。

简单的

header("Content-type: ");

也为我工作。

$result = mysql_query("$sql") or die("Invalid query: " . mysql_error());
        $row = mysql_fetch_object($result);



 /*Only for testing purpose.*/
                //  echo $row->mime;    //This line should output image/jpeg
 /*Only for testing purpose*/


 /*Only to check output*/
        header("Content-type: $row->mime");

        echo $row->image;
 /*Only to check output*/

【讨论】:

  • 这是我的工作文件。您可以下载它并在本地服务器中进行测试。 iseedtechnologies.in/other/downloads/…
  • 您好...现在我认为我的 loadpic.php 工作正常 - 错误似乎在插入脚本中。你能看看 insert.php 并告诉我那里可能有什么问题吗?谢谢:)(我在问题中添加了 insert.php)
  • 你传递了 7 个参数,而在 bind 中你已经给出了 8 个参数。您的第 5 个参数是图像,而您将 $content 传递给第 5 个参数。你能调查一下你是对的吗?
  • 在此处检查您的 bindparam 语法 php.net/manual/en/pdostatement.bindparam.php
  • 我想我已经将 $meta 传递给第 5 个参数。使用 bindparam 应该一切正常,不是吗?我不知道为什么这一切都不起作用......我已经检查了10多次,我就是找不到错误..有mysql数据库,然后有表格,下一步是insert.php,然后最后一步是loadpic.php。而且我不知道这个愚蠢的错误在哪里......这很烦人
【解决方案2】:

试试这个。检查您是否正在插入值。如果插入后仍然出现错误,请发布与我之前的帖子相比的数据库图片。

//create a prepared statement
$stmt = $db->set_charset("utf8");
$stmt = $db->prepare("INSERT INTO artikel (`red`, `typ`, `titel`, `content`, `image`, `mime`, `timestamp`) VALUES (?,?,?,?,?,?,?)");

//run the query to insert the row
$stmt->execute(array($uname, $typ, $titel, $content, $data, $mime, $timestamp));

header("Location: erfolg.php");

【讨论】:

  • 好的,看问题,我添加了数据库的截图。顺便说一句,为图像插入 $data 是否正确?还是应该插入 $meta 或 $image?
  • 您正在将 $data 分配给图像内容。所以你只需要为图像插入 $data 。 $meta 用于图像大小,$image 只是名称的参考。从您上次更新中,我看到 BLOB 大小只有 5B。而我的输出给你 5KiB。所以很明显你没有上传图片内容。请处理我的最新代码并进行更新。
  • 好的,我更新了。但是还是无法显示图片。
  • 嘿嘿..我添加了我的sql结构的截图...可能有错误
猜你喜欢
  • 2011-03-24
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多