2012-04-30 8 views
1

これに関連するほぼすべてのトピックを読んでいます。私はそれを引き起こして何がわからない。(PHP)画像にエラーが含まれているため、画像を表示できません

これは、これは、挿入画像

<!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> 

ためのコードで示す画像

<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); 

?> 

ためのコードであり、これは、テーブル構造である:

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 
->); 

とヘルプが理解されるであろう!ただ、(HTMLの取り払う

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

を:

<html> 
<body> 
<?php 

ですから、もうイメージのヘッダを設定することはできません。

+2

'addslashes()'の代わりに、パラメータ化されたinsert-queryを使わないのはなぜですか?私はこの機能があなたのコンテンツを変更すると思います。 –

+0

ブラウザで画像の生成.php-scriptを直接開いているときに '警告:ヘッダー情報を変更できません - ヘッダーは既に送信されました... 'と表示されますか? –

+0

unsanitized '$ _POST'をクエリに直接挿入することに注意してください。 SQLインジェクションが問題です! – freshnode

答えて

4

問題は、あなたが行うとき、ヘッダがすでに送信されているということです画像はHTMLタグではありません)。

+0

ありがとうミスター:私はhtmlとbodyタグを削除し、それは働いた:D – AntiSaby

+0

@AntiSabyよろしくお願いします。 – jeroen

+0

しかし、私はまだ混乱しています...私はHTML文書の中でショーイメージコードを使用しています...だから私はそれを解決するはずですか? – AntiSaby

関連する問題