2017-02-18 85 views
0

你好,我目前能够上传文件到我的网站上的文件夹,但我无法完全理解我应该如何能够从我的文件到我的数据库获得路径... enter image description here图片上传到mysql

<?php 
if(isset($_FILES['file'])) 
{ 

move_uploaded_file($_FILES['file']['tmp_name'],'files/'.$_FILES['file']['name']); 

session_start(); 
$username = $_SESSION['user']; 
$userpic = ???? <-- what am i supposed to call here to put the path to my image file 

include ("connect.php"); 
$sql = $con->prepare('INSERT INTO users (username,userpic) VALUES (?,?)'); 
$sql->bind_param("ss",$username,$userpic); 
$sql->execute(); 
$sql->close(); 
$con->close(); 
} 
else{ 
echo "no files"; 
} 
?> 

所以这样的事情东西应该的工作是当有人上传图像应该得到直接插入“userpic”表中的形象,香港专业教育学院读其他职位喜欢这个,但他们是不是完全一样的..我应该怎么这是什么成绩?谢谢你的帮助!! (不是最亮的PHP,但即时通讯尝试)

回答

1

如果存储使用客户端提供的名称文件时,文件上传,你将有可能改写图像(例如,如果两个用户上传me.png) - 这将是更好的使用用户名存储图像,然后你甚至不需要MySQL表将用户连接到他们的图片..

<?php 
session_start(); 
$username = $_SESSION['user']; 
if(empty($username)){ 
    echo "Error: no username found"; 
} 
else if(isset($_FILES['file'])){ 
    //create a path to move file to 
    $newpath = 'files/'.$username; 

    if (move_uploaded_file($_FILES['file']['tmp_name'], $newpath)) { 
    echo "File is valid, and was successfully uploaded.\n"; 
    } else { 
    echo "Error: Possible file upload attack!\n"; 
    } 
} 
else{ 
    echo "No Files to save"; 
} 

在这段代码中,我们使用的用户名从会话,并检查其不为空。 然后,我们使用它来将图像存储在您的文件夹中。

注意这个数字忽略了许多安全问题:

包括你的用户名../这将导致文件要保存的文件目录之外。 这可能不是一个问题,如果你已经验证了用户名,另一种解决方案是创建用户名的哈希值,并使用这个代替:$newpath = 'files/'.md5($username);

不检查错误,或者验证文件确实是一个图像。

http://php.net/manual/en/features.file-upload.errors.php

PHP image upload security check list

如何将这些图像将会在此之后被使用? 如果文件目录位于您的htdocs中,则内容将可用于所有 - 最好将它存储在您的htdoc之外 $newpath = '/var/myappdata/userimages/'.md5($username);

然后,您可以创建另一个文件userimage.php其内容的文件:

<?php 
session_start(); 
$username = $_SESSION['user']; 
$path = '/var/myappdata/userimages/'.md5($username); 
readfile($path); 

这允许你做例如额外检查允许用户看到图像。

仍然有可能在这里介绍一个巨大的数额,希望这给你足够的前进,但是请您把这个投入生产之前阅读更多关于文件上传的安全性。

你原来的问题

如果你确实想存储有关数据库中的图像信息,你可以做这样的事情:

<?php 
session_start(); 
include ("connect.php"); 

$username = $_SESSION['user']; 
if(empty($username)){ 
    echo "Error: no username found"; 
} 
else if(isset($_FILES['file'])){ 
    //create a path to move file to 
    $filename = basename($_FILES['file']['name']); 

    $newpath = 'files/'.$filename; 
    if (move_uploaded_file($_FILES['file']['tmp_name'], $newpath)) { 
     echo "File is valid, and was successfully uploaded.\n"; 
     $sql = $con->prepare('INSERT INTO users (username,userpic) VALUES (?,?)'); 
     $sql->bind_param("ss",$username,$filename); 
     $sql->execute(); 
     $sql->close(); 
     $con->close();   
    } else { 
     echo "Error: Possible file upload attack!\n"; 
    } 
} 
else{ 
    echo "No Files to save"; 
} 

正如我虽然说的 - 你会碰上如果两个冲突用户上传相同的文件。

+0

所以我应该删除我的整个SQL问题,只写代码?它并没有为我工作 –

+0

我已经更新了我的答案 – Theo

+0

Thnaks很多解释我会更多地了解如何保护自己,当上传图片.. –

0

你不会想要将整个URL存储在数据库中。您只需要它在服务器上的路径。这是您将tmp文件移动到新位置的部分。在你的情况下,这将是以下内容。

$userpic = 'files/'.$_FILES['file']['name'];