2016-05-06 16 views
0

私はデータベースに画像をアップロードしようとしていますので、以下のようにテーブルを作成しました。Image(BLOB)データベースに画像が完全に保存されていません

enter image description here

そしてアップロードし、同じページ上の画像を表示するには、以下のPHPコードを使用します。

<?php 
// Connection To Database 
$host = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "my_db"; 
$connection = mysqli_connect($host,$username,$password,$dbname); 
if (!$connection) 
{ 
die('Could Not Connect To Database: ' . mysqli_connect_error()); 
} 
mysqli_query($connection, "SET NAMES utf8"); 

// Garb User Account Details 
$garb = mysqli_query($connection, "SELECT * FROM my_table"); 
if(!$garb){ 
$error = "<div class='error'>There's Little Problem: ".mysql_error()."</div>"; 
} else { 
//Showing The User Data 
while($row = mysqli_fetch_array($garb)) { 
    $A_Id = $row['A_Id']; 
    $A_ProfilePic = $row['A_ProfilePic']; 
} 


// Getting Image 
$A_ProfilePic = addslashes(file_get_contents($_FILES['A_ProfilePic']['tmp_name'])); //SQL Injection defence! 
$A_ProfilePic = mysqli_real_escape_string($connection, $A_ProfilePic); 


//Everything Is Okay So Let's Register This User 
$update = mysqli_query($connection, "UPDATE accounts SET A_ProfilePic='$A_ProfilePic' WHERE A_Id='999999'"); 
if(!$update){ 
$updateerror = "<div class='error'>There's Little Problem: ".mysql_error()."</div>"; 
} else { 
//Confirming Message To User 
$error = "<div class='success'>Your Pic Is Updated.</div><br/>"; 
} 
?> 

/* Getting Image */ 
<?php echo '<img class="profileAvatar" alt="" title="" src="data:image/jpeg;base64,'.base64_encode($A_ProfilePic).'"/>';?> 
<form action="" method="post" enctype="multipart/form-data"> 
<input type="file" name="A_ProfilePic" id="A_ProfilePic"/> 
<input type="submit" name="submit" value="Update Your Setting"></input> 
<input type="reset" name="reset" value="Reset Form"></input> 
</form> 

しかし、その後、画像を挿入するときに、私のBase64コードは完全に理由を取得しているときの画像がそれを見ることができないだと挿入されていないとして、私はエラーを取得しています。私はオンラインBase64コンバータから同じイメージを変換し、私のデータベースコードから別のコードを得た。だから何がエラー... ???

+1

あなたの 'addslashes()'とmysqli_real_escape_string()で二重にエスケープします。ただ準備された声明を使用し、それをやめてください。 – AbraCadaver

+0

私も1つ試みましたが、うまくいきませんでした。 –

+0

挿入されているものはすでに二重のエスケープで台無しにされています。 – AbraCadaver

答えて

0

最後に、上記のコードとほぼ同じですが、いくつか変更があります。今度はこのコードを使用して、実行時に1ページでイメージを変更して表示できます。

<?php 
// Connection To Database 
$host = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "my_db"; 
$connection = mysqli_connect($host,$username,$password,$dbname); 
if (!$connection) 
{ 
die('Could Not Connect To Database: ' . mysqli_connect_error()); 
} 
mysqli_query($connection, "SET NAMES utf8"); 

// Garb User Account Details 
$garb = mysqli_query($connection, "SELECT * FROM my_table"); 
if(!$garb){ 
$error = "<div class='error'>There's Little Problem: ".mysql_error()."</div>"; 
} else { 
//Showing The User Data 
while($row = mysqli_fetch_array($garb)) { 
    $A_Id = $row['A_Id']; 
    $A_ProfilePic = $row['A_ProfilePic']; 
} 

// Update Image In Database 
if (isset($_POST['A_ProfilePic'])){ 
// Getting Image 
$A_ProfilePic_Add = mysqli_real_escape_string($connection, $A_ProfilePic); 
//Everything Is Okay So Let's Register This User 
$update = mysqli_query($connection, "UPDATE accounts SET A_ProfilePic='$A_ProfilePic_Add' WHERE A_Id='999999'"); 
if(!$update){ 
$updateerror = "<div class='error'>There's Little Problem: ".mysql_error()."</div>"; 
} else { 
//Confirming Message To User 
$error = "<div class='success'>Your Pic Is Updated.</div><br/>"; 
} 
header("Refresh:0"); 
} 
?> 

/* Getting Image */ 
<?php echo '<img class="profileAvatar" alt="" title="" src="data:image/jpeg;base64,'.base64_encode($A_ProfilePic).'"/>';?> 
<form action="" method="post" enctype="multipart/form-data"> 
<input type="file" name="A_ProfilePic" id="A_ProfilePic"/> 
<input type="submit" name="submit" value="Update Your Setting"></input> 
<input type="reset" name="reset" value="Reset Form"></input> 
</form> 
関連する問題