我如何从我正在使用的代码中检索数据库中的图像?

时间:2016-04-12 11:44:41

标签: php html mysql

嗨,我已经在下面输入了我的代码。数据库正在保存图像的路径,但它没有显示图像。哪里可能是错的?

<div class="profile">
    <?php
    if (isset($_FILES['profile']) === true) {
        if (empty($_FILES['profile']['name']) === true) {
            echo 'Please choose a file';
        } else {
            $allowed = array('jpg', 'jpeg', 'gif', 'png');
            $file_name = $_FILES['profile']['name'];
            $file_extn = strtolower(end(explode('.', $file_name)));
            $file_temp = $_FILES['profile']['tmp_name'];
            if (in_array($file_extn, $allowed) === true) {
                ///upload file.
                change_profile_image($session_user_id, $file_temp, $file_extn);
            } else {
                echo 'incorrect file type. Allowed formats: ';
                echo implode(', ', $allowed);
            }
        }
    }
    if (empty($user_data['profile']) === false) {
        echo '<img src"', $user_data['profile'], '"
                    alt="', $user_data['first_name'], '\'s">';
    }
    ?>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="profile">
        <input type="submit">
    </form>
</div>

我正在调用的函数change_profile_image如下:

function change_profile_image($user_id, $file_temp, $file_extn) {
    $file_path = 'images/profile/' . substr(md5(time()), 0, 10) . '.' . $file_extn;
    //echo $file_path;
    move_uploaded_file($file_temp, $file_path);
    mysql_query("UPDATE `users` SET `profile` = '" 
          . mysql_real_escape_string($file_path) 
          . "' WHERE `user_id` = " 
          . (int) $user_id);
}

数据库正在保存图像路径,但没有在网页上显示图像。

2 个答案:

答案 0 :(得分:3)

你写的地方

echo '<img src"', $user_data['profile'], '"

将其更改为

echo '<img src="'.$user_data['profile'].'"

请注意添加的等号,并且使用句号而不是逗号进行连接。

答案 1 :(得分:1)

首先,我想隔离一些安全问题......

当您上传文件时,永远不应检查文件扩展名。您应该像这样检查文件MIME:

class FileSecure
{
    public resource $Allowed;
    private object $Info;
    public function __construct($allow)
    {
        $this->Allowed = $allow;    
        $this->Info = new finfo();
    }
    public function Check($file) : bool
    {
        if(in_array($fileType = $this->Info->file($file, FILEINFO_MIME_TYPE, $this->Allowed))) { return true; } else { return false; }
    }
}
$fileCheck = array(
     'Image' => new FileSecure(['image/bmp', 'image/gif', 'image/jpeg', 'image/png']),
     'Text' => new FileSecure(['text/plain']),
     'Compressed' => new FileSecure(['application/zip', 'application/x-rar-compressed'])
);

// End of Class

($fileCheck['Image']->Check($_FILES['profile']['name']))? "" : die("Invalid image file..."); // make sure you delete the file if it is false

现在回到问题...

首先,我们无法看到您的文件服务器,因此请确保该文件已保存该路径所链接的位置。

如果有,var_dump()您的查询并确保它是正确的扩展名和正确的路径。

其次,您有很多语法问题,您可以通过启用错误报告轻松找到自己......

您可以通过以下方式执行此操作:error_reporting(1);

编辑:注意,如果您将目录存储为日期时间(substr(md5(time()), 0, 10)),则需要将此日期包含在数据库路径中,以便了解它的位置。

注意:使用isset()时,您不需要将其与true或false相匹配,您可以这样做:

// false
if(!isset($...))
{
}

// true
if(isset($...))
{
}