2012-02-25 7 views
0

私は自分のプロフィール写真をデータベースにアップロードする機能を作成しています。バイナリ形式(BLOB)でデータベースに写真をアップロードすることができますが、表示しようとして問題が発生しています。PHPでMySQLで画像を更新する

アップロードフォームコード:画像を表示する

<?php //get the posted image when the submit button is clicked 
$username = "MentorMenteeData"; 
$password = "mentormenteedata"; 
$host = "localhost"; 
$database = "mentormenteesystem"; 

// Make the connect to MySQL or die 
// and display an error. 
$link = mysql_connect($host, $username, $password); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 

// Select your database 
mysql_select_db ($database);   

    if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) { 

     // Temporary file name stored on the server 
     $tmpName = $_FILES['image']['tmp_name']; 

     // Read the file 
     $fp  = fopen($tmpName, 'r'); 
     $data = fread($fp, filesize($tmpName)); 
     $data = addslashes($data); 
     fclose($fp); 

     $student_id=$row_student['student_id']; 

     // Create the query and insert 
     // into our database. 
     $query = "UPDATE student SET student_img='$data' WHERE student_id ='$student_id'"; 
     $query .= "(image) VALUES ('$data')"; 
     $results = mysql_query($query, $link); 

     // Print results 
     print "Thank you, your file has been uploaded."; 

} 
else { 
    print "No image selected/uploaded"; 
} 

// Close our MySQL Link 
mysql_close($link); 
?> 

<form action="" method="post" enctype="multipart/form-data" name="changer"> 

<strong style="color: #FFD700;">Upload your image:</strong><br /> 
<input name="MAX_FILE_SIZE" value="102400" type="hidden"><br /><br /> 
<input namge="image" accept="image/jpeg" type="file"> 
<input type="submit" value="Submit"> 
</form> 

コード:

<?php 

$username = "MentorMenteeData"; 
$password = "mentormenteedata"; 
$host = "localhost"; 
$database = "mentormenteesystem"; 

mysql_connect($host, $username, $password) or die("Can not connect to database: ".mysql_error()); 

mysql_select_db($database) or die("Can not select the database: ".mysql_error()); 

$id = $_REQUEST['student_id']; 

if(!isset($id) || empty($id) || !is_int($id)){ 
    die("Please select your image!"); 
}else{ 

$query = mysql_query("SELECT * FROM student WHERE student_id='".$id."'"); 
$row = mysql_fetch_array($query); 
$content = $row['image']; 
} 

header('Content-type: image/jpeg'); 
    echo $content; 
?> 

私はいくつかのビットを含む画像列のための私のデータベーステーブルを見ることができたんだけど、カント、それを表示するように思えます。お知らせ下さい。それが正しいかのように

+0

...データベース内の実際の画像を保存するファイルシステムに格納し、そしてちょうどそうデータベース –

答えて

2

画像を取得して表示するためのコードが見えます、しかし、私はあなたが原因このフィルタリングラインにクエリになってされることはありません推測している:

$id = $_REQUEST['student_id']; 

if(!isset($id) || empty($id) || !is_int($id)){ 
    die("Please select your image!"); 
} 

is_int()テストAのタイプの場合値は整数で、$_GET, $_POST, $_REQUESTからの値は常に文字列です。ので、あなたの状態は常に偽です。代わりにctype_digit()またはis_numeric()、またはintval($id) == $idを使用してテストすることができます。また、empty()は暗黙的にisset()を呼び出すので、isset()は必要ありません。何らかのエラーがなければ

// ctype_digit() method... 
if (empty($id) || !ctype_digit($id)) { 
    die("Please select your image!"); 
} 

// intval() method... 
if (empty($id) || (intva($id) != $id)) {  
    die("Please select your image!");  
} 
+0

で、そのファイルへのパスを持たないでください、どのように私は画像が表示されるように得ることができますか?この行を削除するとどうなりますか?if(!isset($ id)||空($ id)||!is_int($ id)){ die( "あなたの画像を選択してください!"); }"?これは役に立ちますか? – Steve87

+0

@ Steve87ちょうどその行を私の2つの提案のいずれかに置き換えてください。 SQLインジェクションに対して '$ id'を正しく検証するために必要なので、削除しないでください。それに続く 'else {}'のままにしておきます。 –

1

、それは言うのは難しいですが、マイケルによって示唆されているように、それはIDの問題ではない場合、それは[また]アップロード上の画像データの破損かもしれません。あなたは直接ダウンロードしてみましたか(例えば、wgetそのURL)、ローカルで開きますか? JPEGヘッダーはありますか?

いくつかの一般的なコメント:

  1. はあなたがデータベースに画像を保存してもよろしいですか?ファイル名/ URLの断片を格納するのが一般的には で、特に大きな画像の場合は のバイナリデータをディスクに残すことが一般的です。詳細については、 php:Store image into Mysql blob, Good or bad? を参照してください。

  2. いずれの方法でもアップロードコードが問題を尋ねています。 addslashes()SQL Injection 攻撃から保護するために mysqli::real escape-string のような特定のものを使用し、エスケープ問題を解決するのに十分ではありません - this postは、いくつかの相違点を探ります。あなたのMySQL DBをWebサーバと同じボックスでホストされている場合は

  3. は、あなたが も、努力を救うことができる(と速度を上げる)MySQL LOAD_FILE機能を使用することによって、これは長期的には非常にスケーラブルではありません。

  4. セキュリティのために、すべてのログインの詳細をウェブルートから別のファイルに移動することを検討してください。

関連する問題