PHP照片上传到MySQL和单独的文件夹

问题描述:

我敢肯定我做的事情很傻,但我已经检查并重新检查了这一点。这是我的照片上传器,意味着将照片文件本身保存到一个文件夹(名为“reccs”),然后将照片的名称保存到我的数据库中的一行。数据库部分完美工作,但我的照片没有显示在文件夹中。 它显示没有错误,似乎工作(我收到“成功”的消息)。确认!PHP照片上传到MySQL和单独的文件夹

代码如下。感谢任何见解。

$link = mysql_pconnect($host, $username, $password); 
$db = mysql_select_db ($dbname); 

$target = "reccs/"; 
$target = $target . basename($_FILES['photo']['name']); 
$pic=($_FILES['photo']['name']); 

mysql_query("UPDATE login SET recc = '$pic' WHERE username = '".$_SESSION['user']['username']."'"); 

if(move_uploaded_file($_FILES['photo']['tmp_name'], $target)) 
{ 

echo "The file has been uploaded, and your information has been added to the directory"; 
} 
else { 

echo "Sorry, there was a problem uploading your file."; 
} 
+0

注意,SQL是容易受到SQL注入。一定要在$ _FILES ['photo'] ['name']'上调用'mysql_real_escape_string()'。从长远来看,考虑转向更新的MySQL API(如PDO或MySQLi),以支持准备好的语句。 – 2012-08-10 02:17:11

+0

你对目标文件夹有写入权限吗? – 2012-08-10 05:22:42

reccs在它前面有斜杠吗?在知道move_upload_file成功之后,似乎mysql更新查询在if语句内部会更好。

试试;

if(move_uploaded_file($pic, $target)) 

根据您的服务器设置,你可能必须设置$目标是一个绝对路径,而不是相对的。至少它对于你的主目录应该是绝对的,所以如果reccs是根目录目录中的目录,那么将$ target设置为/reccs/file.name。

原因是文件被上传到/ tmp,这是在根(OS)级而不是托管级,所以相对于/ tmp的路径通常是没有意义的。

保存同名照片是非常糟糕的做法。在上传照片之前,我会建议你做下面的事情。

  • 提取名称和扩展名。
  • 现在检查该分机是否有效。如果有效,则进一步进行
  • 第一次修剪,然后用单个空格清除所有多个空格。
  • 现在小写的文件名,并改变所有的空间与_和追加时间戳与文件名。
  • 删除所有特殊字符(', " , \ etc
  • 现在添加具有该扩展名的文件名。

然后存储到数据库