0

現在、データベースに画像をアップロードするのに少し苦労しています。現在、1 つのフォームから複数の変数/入力をアップロードしています。これらの入力が画像ファイルのアップロードの場合は 1 つです。ファイルはデータベースを実行するように見えますが、PHPスクリプトを介して画像を取得しようとすると、画像ではなく単に「配列」が返されます。何か助けはありますか?ありがとう!

アップロードコードは次のとおりです。

               // if the form's submit button is clicked, we need to process the form
            if (isset($_POST['submit']))
            {
                    // get the form data
                            $projectname = htmlentities($_POST['projectname'], ENT_QUOTES);
                            $item = htmlentities($_POST['item'], ENT_QUOTES);
                            $description = htmlentities($_POST['description'], ENT_QUOTES);
                            $neededby = htmlentities($_POST['neededby'], ENT_QUOTES);
                            $shipping= htmlentities($_POST['shipping'], ENT_QUOTES);
                            $revisions = htmlentities($_POST['revisions'], ENT_QUOTES);
                            $price = htmlentities($_POST['price'], ENT_QUOTES);
                            $paid = htmlentities($_POST['paid'], ENT_QUOTES);
                            $ordered1 = htmlentities($_POST['ordered1'], ENT_QUOTES);
                            $ordered2 = htmlentities($_POST['ordered2'], ENT_QUOTES);
                            $ordered3 = htmlentities($_POST['ordered3'], ENT_QUOTES);
                            $received1 = htmlentities($_POST['received1'], ENT_QUOTES);
                            $received2 = htmlentities($_POST['received2'], ENT_QUOTES);
                            $received3 = htmlentities($_POST['received3'], ENT_QUOTES);
                            $shipped1 = htmlentities($_POST['shipped1'], ENT_QUOTES);
                            $shipped2 = htmlentities($_POST['shipped2'], ENT_QUOTES);
                            $shipped3 = htmlentities($_POST['shipped3'], ENT_QUOTES);
                            $tracking = htmlentities($_POST['tracking'], ENT_QUOTES);
                            $delivered = htmlentities($_POST['delivered'], ENT_QUOTES);
                            $thestatus = htmlentities($_POST['thestatus'], ENT_QUOTES);
                            $photo=($_FILES['photo']); 




                   if ($projectname == '')
                            {
                                    // if they are empty, show an error message and display the form
                                    $error = 'ERROR: Please fill in project name!';
                                    renderForm($projectname, $item, $description, $neededby, $shipping, $revisions, $price, $paid, $ordered1, $ordered2, $ordered3, $received1, $received2, $received3, $shipped1, $shipped2, $shipped3, $tracking, $delivered, $thestatus, $photo, $error, $id);
                            }

                            else
                            {
                            // insert the new record into the database
                            if ($stmt = $mysqli->prepare("INSERT todo (projectname, item, description, neededby, shipping, revisions, price, paid, ordered1, ordered2, ordered3, received1, received2, received3, shipped1, shipped2, shipped3, tracking, delivered, photo, thestatus) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"))
                            {
                                    $stmt->bind_param("sssssssssssssssssssss", $projectname, $item, $description, $neededby, $shipping, $revisions, $price, $paid, $ordered1, $ordered2, $ordered3, $received1, $received2, $received3, $shipped1, $shipped2, $shipped3, $tracking, $delivered, $photo, $thestatus);
                                    $stmt->execute();
                                    $stmt->close();
                            }

                            // show an error if the query has an error
                            else
                            {
                                    echo "ERROR: Could not prepare SQL statement.";
                            }



                            // redirec the user
                            header("Location: main.php");
                    }

            }

そして、ファイル取得コード:

<?php 
mysql_connect("localhost","MYUSER","MYPASS"); 
mysql_select_db("MYDB"); 
$query = "SELECT photo FROM todo where id=$id"; 
$result = MYSQL_QUERY($query); 
$data = MYSQL_RESULT($result,0,"photo"); 
Header( "Content-type: $type"); 
print $data; 
?>

mysql 列は BLOB タイプです。

ここに画像がありますので、私が言っていることを視覚的に理解することができます: http://i.imgur.com/DYHHx.png

4

3 に答える 3

1

このチュートリアルを試す

http://www.tizag.com/phpT/fileupload.php

ファイル名を変数に入れてからデータベースに挿入します(データベースからデータを取得する方法を知っていると思います)

于 2012-04-18T23:42:04.600 に答える
1
$fileName = $_FILES['image']['name'];
$tmpName  = $_FILES['image']['tmp_name'];
$fileSize = $_FILES['image']['size'];
$fileType = $_FILES['image']['type'];

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

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


//and here your insert query as i remember you can try it


HTML CODE:

   <input type=\"file\" name=\"image\" />


and here is how you retrive it

echo '<img src="data:image/jpeg;base64,' . base64_encode( $row['imageContent'] ) . '" />';

ただし、データベースの読み込みが遅くなるため、これを行うことはお勧めしません。画像をフォルダーに保存し、データベースの名前のみを保存してください。

このコードはフォーラムから入手したもので、名前を覚えていないことに注意してください。申し訳ありません

于 2012-04-18T22:59:39.173 に答える
1

一般に、画像をデータベースに直接アップロードすることはかなり悪い考えです。その理由は、しばらくすると、データベースからファイルを読み取ったりアップロードしたりすると、データベースが過負荷になるためです。

より良い解決策は、画像をサーバー上のフォルダーにアップロードし、代わりにファイル名と場所をデータベースに保存することです。

于 2012-04-19T05:31:22.620 に答える