2012-04-30 5 views
1

Я прочитал почти все темы, связанные с этим. Я не знаю, что вызывает его.(PHP) Изображение не может быть отображено, потому что оно содержит ошибки

Это код для показа изображений

<html> 
<body> 
<?php 

        mysql_connect('localhost','root','') or die("Unable to Connect: ".mysql_error()); 
        mysql_select_db("punjabi") or die("Unable to Select Database: ".mysql_error()); 

        $sql = "SELECT imagename, mimetype, imagedata 
          FROM images WHERE ID = 1"; 

        $result = @mysql_query($sql); 
        if(!$result) 
        { 
         die(mysql_error()); 
        } 

        $file = mysql_fetch_array($result); 

        $imagename = $file['imagename']; 
        $mimetype = $file['mimetype']; 
        $imagedata = $file['imagedata']; 

        header("content-type: $mimetype"); 

        echo($imagedata); 

?> 

Это код для вставки изображений

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Add Post</title> 
<style type="text/css"> 
    * 
    { 
     margin:0px; 
     padding:0px; 
    } 
</style> 

</head> 

<body bgcolor="#333333"> 

<?php if(isset($_POST['submit'])): 
     { 


      if (!is_uploaded_file($_FILES['uploadfile']['tmp_name'])) 
      { 
       die("$uploadfile is not an uploaded file!"); 
      } 

      $uploadfile = $_FILES['uploadfile']['tmp_name']; 
      $uploadname = $_FILES['uploadfile']['name']; 
      $uploadtype = $_FILES['uploadfile']['type']; 
      $uploaddesc = $_POST['desc']; 


      $tempfile = fopen($uploadfile,'rb'); 
      $filedata = fread($tempfile,filesize($uploadfile)); 
      $filedata = addslashes($filedata); 
      $sql = "INSERT INTO images SET 
      imagename = '$uploadname', 
      mimetype = '$uploadtype', 
      description = '$uploaddesc', 
      imagedata = '$filedata'"; 
      $ok = @mysql_query($sql); 
      if (!$ok) die("Database error storing file: " .mysql_error()); 

      $sql = "Select id from images where imagename = '$uploadname'"; 
      $result = @mysql_query($sql); 
      if(!$result) die(mysql_error()); 
      if(mysql_num_rows($result)!=1) die(mysql_error()); 

      $row = mysql_fetch_array($result); 
      $imageid = $row['id']; 

      $title = $_POST['title']; 
      $content = $_POST['content']; 

      $sql = "INSERT into posts SET 
        title = '$title', 
        content = '$content', 
        imageid = '$imageid'"; 
      if([email protected]_query($sql)) 
      { 
       die(mysql_error()); 
      } 


      header("Location:http://localhost/punjabi/adminhome.php"); 

     } 


?> 

<?php else: ?> 

    <div id="post"> 
     <form action="<?php echo($_SERVER['PHP_SELF']) ?>" method="post" enctype="multipart/form-data" > 
      Title: <input type="text" name="title" /><br /><br /><br /> 
      Content:<br /> <textarea cols=100 rows="40" wrap="hard" name="content" /></textarea><br /><br /> 
      Image: <input type="file" name="uploadfile" /><br /><br /> 
      Image Desc: <input type="text" name="desc" /><br /><br /> 
      <input type="submit" value="Submit" name="submit" /> 
     </form> 
    </div> 

<?php endif; ?> 
</body> 
</html> 

И Это Структура таблицы:

CREATE TABLE filestore (
-> ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
-> FileName VARCHAR(255) NOT NULL, 
-> MimeType VARCHAR(50) NOT NULL, 
-> Description VARCHAR(255) NOT NULL, 
-> FileData MEDIUMBLOB 
->); 

И помощь была бы оценена !

+2

Почему бы не использовать параметризованный insert-запрос вместо 'addslashes()'? Я думаю, что эта функция изменяет ваш контент. –

+0

Вы видите «Предупреждение: невозможно изменить информацию заголовка - заголовки, уже отправленные ...», когда вы открываете сгенерированный образ .php-script в браузере? –

+0

Следите за тем, чтобы вставлять в ваш запрос несанкционированные '$ _POST'. SQL-инъекция - проблема! – freshnode

ответ

4

Проблема заключается в том, что заголовки уже отправлены, когда вы делаете:

<html> 
<body> 
<?php 

Таким образом, вы не можете установить заголовок для изображения больше:

header("content-type: $mimetype"); 

Только избавившись от HTML (изображение не является html/text), прежде чем тег php должен решить это.

+0

Спасибо господин: D я удалил теги html и body, и это сработало: D – AntiSaby

+0

@AntiSaby Добро пожаловать. – jeroen

+0

Но я все еще смущен ... Я использую код показа изображения внутри html-документа ... так как я должен его решить? – AntiSaby

Смежные вопросы