我希望用户能够上传个人资料照片(可以是.jpg
或.png
),我也希望这些照片显示在他们的个人资料中。我根据我在这里找到的源代码,在Stackoverflow和Google上编写了一些代码。但是,它似乎不起作用,我无法找到我的错误。
这是html
<form action="account_settings.php" method="POST">
<input type="file" name="profilePicture"><br><br>
<input type="submit" value="Change!">
</form>
这是如何上传文件将被处理。
<?php
include ('inc/header.inc.php');
if(isset($_FILES["profilePicture"]["tmp_name"]) && isset($_FILES["profilePicture"]["name"])) {
$ext = pathinfo($_FILES['profilePicture']['name'], PATHINFO_EXTENSION);
$name = $_SESSION['user_login'];
$tmp_name = $_FILES["profilePicture"]["tmp_name"];
if($ext == 'png' || $ext == 'jpg') {
if (isset($tmp_name)) {
if(!empty($tmp_name)) {
$location = '../profielfotos/';
$full_name = $name.'.'.$ext;
if(move_uploaded_file($tmp_name, $location.$full_name)) {
echo 'Photo uploaded!';
}
Down here are just some else statements with error reports.
以下代码用于显示图像。我已经通过在配置文件图片文件夹中放置图像来测试它,它确实显示了图像。但是,仍然存在问题。允许用户上传.jpg
或.png
,如何让网站显示图片(找到带有正确扩展名的个人资料图片)。
我已将此代码放在src
代码的<img>
属性中。
<?php if ($handle = opendir('profielfotos/')) {
$file = mysql_real_escape_string($_GET['u']);
echo 'profielfotos/'.$file.'.png';
}
closedir($handle);
我希望有人可以提前帮助,谢谢! PS。这是我关于堆栈溢出的第一篇文章:-D!
答案 0 :(得分:3)
由于您没有存储有关上传文件的任何信息,您只需使用file_exists()
方法检查哪个文件存在。见这里:
http://php.net/manual/en/function.file-exists.php
所以你的代码会变成这样(未经测试):
<?php if ($handle = opendir('profielfotos/')) {
$file = mysql_real_escape_string($_GET['u']);
if (file_exists('profielfotos/'.$file.'.png')) {
echo 'profielfotos/'.$file.'.png';
} else if (file_exists('profielfotos/'.$file.'.jpg')) {
echo 'profielfotos/'.$file.'.jpg';
}
}
closedir($handle);
答案 1 :(得分:3)
您需要在表单中添加以下内容:
<form action="account_settings.php" method="POST" enctype="multipart/form-data">
否则它将不允许文件上传,因为它只需要文本。
答案 2 :(得分:2)
这是完全不安全的。用户上传的文件永远不会存储在Web服务器的根目录中。
相反,将文件放在doc根目录之外的某个位置。
编写一个控制文件的处理程序