嗨,我已经在下面输入了我的代码。数据库正在保存图像的路径,但它没有显示图像。哪里可能是错的?
<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);
}
数据库正在保存图像路径,但没有在网页上显示图像。
答案 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($...))
{
}