上传个人资料照片并显示它

时间:2015-11-24 16:25:56

标签: php html

我希望用户能够上传个人资料照片(可以是.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!

3 个答案:

答案 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根目录之外的某个位置。

编写一个控制文件的处理程序

  • 通过检查内容而不是扩展名
  • 来检查mime类型
  • 有任意名称,而不是上传的名称,可能会干扰(想象有5个人上传“profile.png”)
  • 让处理程序通过id传递图像(“... imagloader?file = 4711”),
  • 文件名(以及扩展名和位置)存储在数据库中(带有用户记录?)