我想将网站用户上传的文件保存到我的数据库中。我已经使用longblob(二进制)做了这个,但是我有兴趣保存上传文件的路径。
这是我的代码,我应该进行哪些修改?
<?php require_once('Connections/databasestudents.php'); ?>
<?php
$fileName = $_FILES['file']['name'];
$tmpName = $_FILES['file']['tmp_name'];
$fileSize = $_FILES['file']['size'];
$fileType = $_FILES['file']['type'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
$studentId = $_POST['studentId'];
fclose($fp);
$query = "INSERT INTO file (studentId, fileName, fileType, fileContent ) ".
"VALUES ('$studentId', '$fileName', '$fileType', '$content')";
mysql_select_db($database_databasestudents, $databasestudents);
mysql_query($query) or die('Error, query failed');
header("Location: students.php");
die();
?>
答案 0 :(得分:0)
只有两件事:
这里面临的最大挑战可能是如何处理文件名冲突(当上传2个同名文件时会发生什么)。你如何处理这种情况完全取决于应用程序。当所有文件都应该存储时,即使它们的文件名与之前上传的文件相同,你也可以随时在文件名中添加格式化的时间戳,或者使其独一无二的其他一些数据(我使用了日期和PID的组合)前)
答案 1 :(得分:0)
这不是准备生产的代码。
鉴于此,基本上您需要的是使用move_uploaded_file
上传文件。只是使用您的代码的基本代码段是:
require_once('Connections/databasestudents.php');
if($_FILES)
{
$fileName = $_FILES['file']['name'];
$tmpName = $_FILES['file']['tmp_name'];
$fileSize = $_FILES['file']['size'];
$fileType = $_FILES['file']['type'];
// $fp = fopen($tmpName, 'r');
// $content = fread($fp, filesize($tmpName));
// $content = addslashes($content);
if(move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name']))
{
$studentId = $_POST['studentId'];
// fclose($fp);
$query = "INSERT INTO file (studentId, fileName, fileType, fileContent ) ".
"VALUES ('$studentId', '$fileName', '$fileType', '$content')";
mysql_select_db($database_databasestudents, $databasestudents);
mysql_query($query) or die('Error, query failed');
header("Location: students.php");
die();
}
}