php无法显示图片

时间:2012-03-10 21:39:48

标签: php

我可以在我的数据库中成功上传图像但是当我想在我的应用程序中显示它们时,图像存在问题。这是我的代码的一部分:

编辑:已添加并添加add_image.php

的index.php

<?php
  session_start();
  include("config.php"); 

  $query = mysql_query("SELECT * FROM images");
  $numrows = mysql_num_rows($query);

  if($numrows != 0) {

    while($row = mysql_fetch_assoc($query)) {
    $title = $row['TITLE'];
    $id = $row['ID'];
    $image = $row['IMAGE'];
    echo $title;
    echo "<img src=image.php?id=$id>";
    echo("<hr/><br/><br/>");
  }

  } else {
    die("ERROR");
  }

?>

image.php

<?php
  include("config.php"); 

  $id = (int)$_REQUEST['id'];

  $image = "SELECT * FROM images WHERE ID = $id";
  $image = mysql_query($image) or die('Error, query failed');
  $image = mysql_fetch_assoc($image);
  $image = $image['image'];
  header("Content-type: image/jpeg");
  echo $image;
?>

add_image.php

<?php
  session_start();

  $title = $_POST[title]; 

  if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0) {
    $fileName = $_FILES['userfile']['name'];
    $tmpName  = $_FILES['userfile']['tmp_name'];
    $fileSize = $_FILES['userfile']['size'];
    $fileType = $_FILES['userfile']['type'];

    $fp = fopen($tmpName, 'r');
    $content = fread($fp, filesize($tmpName));
    $content = addslashes($content);
    fclose($fp);

    if(!get_magic_quotes_gpc()) {
      $fileName = addslashes($fileName);
    }

    include("config.php"); 

    $query = "INSERT INTO images (TITLE,IMAGE) VALUES ('$title','$content')";

    mysql_query($query) or die('Error, query failed'); 

    echo "<br>File $fileName uploaded<br>";
  } 
?>

1 个答案:

答案 0 :(得分:2)

可能是造成这种情况的几个问题。

    在你的插入脚本上的
  1. ,colums被命名为全部大写(例如IMAGE),而你的选择试图获得image(小写) - 实际上使用了一个数据库?这应该是统一的。

  2. 你正在使用addslashes来转义字符串,然后再与数据库进行交互(我假设预先插入sql-injections)你应该实际使用mysql_real_escape_string。现在这不是问题,但是addslashes might not shelter from sql-injections

  3. 当写下这个答案的时候,你没有在image.php中获取查询结果,这应该是主要问题,但在此期间你把它改为$image = mysql_query($image),所以它可能是正确 - 请简单地发布您的实际代码,不断更改它,否则无法分辨它是什么错误。

  4. 你在add_image.php上的
  5. ,在初始化之后永远不会真正使用变量$fileName,而使用$title但从未初始化。如果这是您的真实生产代码,那么您的image - 列将始终为空,因此无需显示任何内容。

  6. 假设$fileName$title应该是相同的而且它只是一个拼写错误,你不应该逃避只有它没有启用magic_quotes。相反,你应该运行stripslashes如果magic_quotes被反对以获取“真实”字符串然后总是使用mysql_real_escape_string(参见2.)。如果可能的话,你应该完全禁用magic_quotes,因为它只能解决问题。