2015-07-20 59 views
0

我試圖將圖像上傳到mySQL數據庫,然後將它們檢索到註釋中。然而,由於某些原因,圖像不能正確顯示(有時只是其中的一部分),所以我想我做錯了什麼。幫助將不勝感激。

php圖像在base64解碼後mysql無法正常顯示

kritiek.php

形式

<form action="post_comment.php" method="POST" id="post-comment" enctype="multipart/form-data"> 
    <fieldset> 
    <legend>Reactie plaatsen.</legend> 
    <input type="text" name="name" required placeholder=" Naam"> 
    <br> 
    <input type="text" name="captcha" id="commentCaptcha" placeholder=" captcha"> 
    <br> 
    <textarea name="comment" cols="50" rows="4" maxlength="999" required placeholder=" Laat een reactie achter.."></textarea> 
    <br> 
    Profiel Foto: <input type="file" name="image" accept="image/*"> 
    <br><br> 
    <input type="submit" value="Add comment"> 
    </fieldset> 
</form> 


提取評論

<section id="comments_section"> 
    <?php 
    $con = mysqli_connect("Host","Username","Password","Database"); 

    // Check connection 
    if (mysqli_connect_errno()) 
    { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

    $query = "SELECT * FROM Comments_table"; 
    $result = mysqli_query($con, $query) or die("Error: ".mysqli_error($con)); 

    while($row = mysqli_fetch_array($result)) { 
     $img=base64_encode($row['image']); 
     $date = $row['date']; 
     ?> 
     <div class="comment"> 
      <?php 
      echo "<br>" . displayImage($img) . "<br>" . $row['name'] . "<br><br>" . $row['comments'] . "<br><br>" . $date . "<br><br>"; 
      ?> 
     </div> 
    <?php 
    } 

    mysqli_close($con); 

    function displayImage(&$link){ 
     if(!empty($link)){ 
      return "<img alt=\"Profile Picture\" src=\"data:image/*;charset=utf8;base64, $link \">"; 
     } 
     else 
     { 
      return "<img src='img/nopicture.jpg'>"; 
     } 

    } 

    ?> 
</section> 




post_comment.php
<?php 

$con = mysqli_connect("Host","Username","Password","Database"); 

// Check connection 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
//assign form to variables 
$name = mysqli_real_escape_string($con, strip_tags($_POST["name"])); 
$comment = mysqli_real_escape_string($con, strip_tags($_POST["comment"])); 
$comment_length = strlen($comment); 
$unix_time = time(); 
$mySQL_date = date('Y-m-d', $unix_time); 


// Make sure the user uploaded a file 
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); 
} 

mysqli_query($con,"INSERT INTO Comments_table VALUES('','$name','$comment','$data','$mySQL_date')"); 
header("location: kritiek.php"); 

mysql_close($con); 




MySQL數據庫

Screenshot of tables
Screenshot of table content

+0

試着縮小這個問題的範圍。圖像是否正確存儲在數據庫中(所以這是一個檢索/解碼問題)還是它不會在數據庫中正確結束? (那麼這是一個保存/編碼問題) –

+0

或css類? – donald123

+0

@AndréSchild所以我必須嘗試解碼圖像,然後直接編碼而不發送到數據庫? – shadryck

回答

0

wohoo〜發現它加載不當的問題,問題是mySQL行被設置爲blob而不是longblob,所有圖像的最大尺寸都是63.9kb,所以很明顯什麼是錯誤的。