2015-07-20 127 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,所以很明显什么是错误的。