2011-01-05 23 views
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); 
} 


$fileName_th = $_FILES['thumbnail']['name']; 
$tmpName_th = $_FILES['thumbnail']['tmp_name']; 
$fileSize_th = $_FILES['thumbnail']['size']; 
$fileType_th = $_FILES['thumbnail']['type']; 


$fp_th  = fopen($tmpName_th, 'r'); 
$content_th = fread($fp_th, filesize($tmpName_th)); 
$content_th = addslashes($content_th); 
fclose($fp_th); 

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

$query = "INSERT INTO Images (profile_id, thumb, name, size, type, content) ". 
"VALUES ('$profile_id', 0, '$fileName', '$fileSize', '$fileType', '$content'),('$profile_id', 1, '$fileName_th', '$fileSize_th', '$fileType_th', '$content_th') "; 

$r = mysqli_query($dbc, $query); 


echo "<br>$first_name uploaded successfully"; 

これは、自分の画像を自分のデータベースにアップロードするために使用する方法です。さて、私がしたいのは、テキストのようなフォーム要素を編集する編集ページと、画像を変更することです。アップロードした画像をmysqlデータベースにアップロードしましたが、編集ページから取得できますか?

テキスト要素をクエリしてそれぞれの入力フィールドに戻す方法はわかっていますが、画像のようなファイルの場合はどうすればよいですか?

質問:データベースにファイルを「アップロード」するにはどうすればよいですか?それは私の方法ですか?または、単にファイルをディレクトリに書き込んで、そのパスをデータベースに保存する方法はありますか?

答えて

1

良い質問テキスト要素と同じ意味では、異なるコンピュータ上のインターフェイスにアクセスしている場合に保存したのと同じ場所に画像が存在しない可能性があります。

過去にこの種の要件が見られた場合、通常は保存された画像が表示され、その画像を置き換える/削除するオプションが表示されます。テキスト入力とは異なり、画像の一部を変更することはありません。全体を変更して、保存された画像パスを編集する必要はありません。

0

ファイルを特定の方法で保存する必要がある場合を除いて、ファイルをWebサーバーにアップロードするだけです(データベースには直接アクセスできません)。リンクを保存しますこれは私がポッドキャスティングの解決策のためにイメージよりもmp3を使って行ったことですが、アイディアの多くは同じです)。このリンクでは、レイアウトに<img>タグを使用するだけで、データベースにドロップした情報からsrcフィールドが入力されます。

0

クライアントにimage typeとして提供する必要があります。一般的に、私は、画像を照会してレンダリングするために使用されるビュー(または、用語に応じてページ)を実装します。たとえば:http://myurl.com/index.php/images/index/id/[db image pkey](つまり、CIなどのMVCフレームワークを使用している場合は、任意の.phpファイルを使用できます同じ結果を達成するため)。

例のURLを使用すると、コントローラ(イメージ)は、URLに指定されたpkeyを持つイメージをデータベースに照会するイメージモデルをインスタンス化する役割を果たします。ビュー(またはページ)は、モデルからのデータ結果を取得し、Content-typeヘッダーをイメージコンテンツタイプが何であれ設定し、バイナリイメージデータをクライアントに提供します。

AFAIKでは、残りのフォームデータを別のMIMEタイプとしてレンダリングするときにこのインラインを実現する方法はありません。

編集:少し読んだ後に、とにかくこれをやりたいと思わないかもしれないと思われる上記のことを読んでください。なぜそうでないかについての詳細はthisを読んでください。それらをファイルシステムに静的イメージとして格納する方が良いでしょう。

+1

良い例インラインイメージを表示する方法はありますかhttp://www.greywyvern.com/code/php/binary2base64 – FDisk

+0

これについて知りませんでした、ありがとう。私はまだそれについてどのように感じるか分からない;) –

0

あなただけのいくつかのバグが存在することができ

<?php 
if (!empty($_GET['image']) && $_GET['image'] > 0) { 
    //Connect to the database 
    mysql_connect("localhost","root","root"); 
    mysql_select_db("database"); 

    //Select image content 
    $sql = mysql_query("SELECT `content`, `type` FROM `Images` WHERE profile_id = ".(int)$_GET['image']." LIMIT 1"); 
    $row = mysql_fetch_assoc($sql); 

    //Just display the image and finish the application 
    header("Content-type: image/{$row['type']}"); 
    die($row['content']); 
} 
?> 

このimage.phpのようにヘッダを追加する必要があります。主なものは、適切なヘッダーを送信することです。

<img src="image.php?image=1" alt="" /> 

しかし、あなたは、あなたがこのようなbase64で、ディスプレイインラインにそれをエンコードする必要がある同じシーンの画像を表示する場合: あなたはこのようにタグを使用してアクセスすることができ、そのイメージに

//Imagine that we already got content from the database 
$row['content'] = base64_encode($row['content']); 

//Prepare inline image 
$row['content'] = "data:image/{$row['type']};base64,".$row['content']; 

//You will get something like this 
/* 
data:image/png;base64,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%3D 
*/ 

echo "<img src=\"{$row['content']}\" />"; 
関連する問題