我正在创建一个网站,用户使用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'];?>"> } ?>
答案 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);