使用文件上载php脚本在数据库中存储文件名并在文件夹中存储随机名称的文件时出现问题
我在使用这个php脚本将上传的图像文件名存储在数据库中,并将随机生成的文件名存储在文件夹中时遇到问题 由于我的脚本生成了一个回音,所以我的sceen上出现了错误,但是没有出现真正的错误。该文件存储在我的目录文件夹中,但没有随机命名,也没有存储在数据库中。我花了一个小时试图找出可能的错误。我非常感谢你的帮助使用文件上载php脚本在数据库中存储文件名并在文件夹中存储随机名称的文件时出现问题,php,mysql,Php,Mysql,我在使用这个php脚本将上传的图像文件名存储在数据库中,并将随机生成的文件名存储在文件夹中时遇到问题 由于我的脚本生成了一个回音,所以我的sceen上出现了错误,但是没有出现真正的错误。该文件存储在我的目录文件夹中,但没有随机命名,也没有存储在数据库中。我花了一个小时试图找出可能的错误。我非常感谢你的帮助 <!DOCTYPE html> <html> <head> <title>File Upload</title> </
<!DOCTYPE html>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<label>Title</label>
<input type="text" name="title">
<label>File Upload</label>
<input type="File" name="file">
<input type="submit" name="submit">
</form>
</body>
</html>
<?php
$localhost = "localhost"; #localhost
$dbusername = "root"; #username of phpmyadmin
$dbpassword = " "; #password of phpmyadmin
$dbname = "fun"; #database name
#connection string
$conn = mysqli_connect($localhost,$dbusername,$dbpassword,$dbname);
if (isset($_POST["submit"]))
{
#retrieve file title
$title = $_POST["title"];
#file name with a random number so that similar dont get replaced
$pname = rand(1000,10000)."-".$_FILES["file"]["name"];
#temporary file name to store file
$tname = $_FILES["file"]["tmp_name"];
#upload directory path
$uploads_dir = "images/";
#TO move the uploaded file to specific location
move_uploaded_file($tname, $uploads_dir.'/'.$pname);
#sql query to insert into database
$sql = "INSERT into fun(image) VALUES('$pname')";
if(mysqli_query($conn,$sql)){
echo "File Sucessfully uploaded";
}
else{
echo "Error";
}
}
?>
文件上传
标题
文件上传
几年前我就有过这个问题。我猜测PHP函数move_uploaded_file()实际上不会导致文件移动,直到PHP脚本退出并关闭其文件句柄
我忘记了我使用的解决方法-可能是我使用php复制文件而不是移动它
将用户提供的数据放入数据库时,这是一个真正的限制。
啊。我找到了我使用的代码
$filename=basename($filename);
$newname=$tmpname.$id;
copy($tmpname,$newname);
$query=sprintf("update product set picture=LOAD_FILE('%s'),picture_filename='%s', picture_size='%d' where id='%d'",
$newname, $filename,$filesize,$id);
mysql_query($query); //there!
unlink ($newname);
这应该是一个足够的片段,以获得大致的想法。
在以后版本的类似操作中,我将文件读入内存,如果是二进制文件,则将其转换为十六进制字符串并插入该字符串。我在使用php上载文件时遇到了相同的问题。我认为您应该在代码中指定目标目录的部分添加$\u SERVER['DOCUMENT\u ROOT']
,以便move\u uploaded\u file()函数如下所示:
move_uploads_file($tname,$_SERVER['DOCUMENT_ROOT'.$uploads_dir./'.$pname)代码>关于数据库查询,您应该添加以查看其失败的原因。警告!你可以接受攻击。在这样的查询中,您应该使用参数化的用户数据,而不是直接使用完全未设置场景的用户数据。永远不要相信用户输入。这能回答你的问题吗?我应该添加$conn->close()?我对使用php真的很陌生。另外,如果信息不敏感,SQL注入会有多危险警告:mysql\uquot.
扩展从PHP 5.5.0开始就被弃用,从PHP 7.0.0开始就被删除。相反,应该使用或扩展名。在选择MySQL API时,请参阅以获取更多帮助。非常好的一点-代码已经超过十年了…无论如何,同样的原则也适用