使用PHP从MySQL数据库获取数据时,不会显示上载的图像

时间:2018-02-06 05:39:45

标签: php mysql

我正在创建一个网站,用户使用PHP会话登录仪表板,他们可以上传图像。然后另一个用户登录仪表板并查看图像。我的图像使用MySQL数据库上传到名为“上传”的文件夹中。

我的图片上传代码是:

<?php
    include("config.php");

    if(isset($_POST['but_upload'])){

        $username = $userRow['username'];
        $email = $userRow['email'];
        $name = $_FILES['file']['name'];
        $target_dir = "upload/";
        $target_file = $target_dir . basename($_FILES["file"]["name"]);

        // Select file type
        $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

        // Valid file extensions
        $extensions_arr = array("jpg","jpeg","png","gif");

        // Check extension
        if( in_array($imageFileType,$extensions_arr) ){

            // Convert to base64 
            $image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
            $image = 'data:image/'.$imageFileType.';base64,'.$image_base64;

            // Insert record
            $query = "insert into images(name,image,username,email) values('".$name."','".$image."','".$username."','".$email."')";

            mysqli_query($con,$query) or die(mysqli_error($con));

            // Upload file
            move_uploaded_file($_FILES['file']['tmp_name'],'upload/'.$name);

    }

}
?>

我的数据库表

    CREATE TABLE `images` (
    `id` int(11) NOT NULL,
    `name` varchar(200) NOT NULL,
    `image` longtext NOT NULL,
    `email` varchar(255) NOT NULL,
    `username` varchar(255) NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

图像上传部分工作正常,但是当我想将该图像显示给另一个用户时。现在没有图像显示。

我的图片显示代码:

 <?php
    include("dbconnect.php");
    $sql="SELECT*FROM images";
    $result=mysql_query($sql);
    $count=mysql_num_rows($result);
    if($count==0){
    echo "No Image Found";
    }else{
    while($row=mysql_fetch_array($result)){?>
    <img src="../user/upload/"<?php echo $row['name'];?>"> } ?>

1 个答案:

答案 0 :(得分:0)

不是真正的答案,但包括如何修复和保护它的建议。

利用mysqli placeholdes,其他方式你的代码容易破解。

转义文件名,例如preg_replace(&#39; / [^ A-Za-z0-9 _-] +。[^ A-Za-z0-9 _] + /&#39;,&#39; &#39;,$ name);

正如你所说 - 上传工作正常,所以运行图像显示php文件,检查html源代码并找到图像名称或路径中的错误。

如上面的注释&#34;将href存储在数据库&#34;中,不要跟随,你可以在constant / config中更改路径或其他更好的路径。

当您尝试显示图片时,还有一件事可能是用户名错误:

$fileName = 'test_backup_' .  date("d-m-Y_H:i:s") . '.json'; 
copy("file.json", $fileName);