我创建了一个可以向我的数据库添加新记录的页面,一切正常,但是当我尝试上传pdf文件时,它不会存储到正确的文件夹中。它应该存储在我的“上传”中。当我检查我的数据库时,它没有正确链接它应该是../uploads/example.pdf而不是example.pdf
<?php
require('db.php');
include("auth.php");
$status = "";
if(isset($_POST['new']) && $_POST['new']==1)
{
$trn_date = date("Y-m-d H:i:s");
$fname =$_REQUEST['fname'];
$lname = $_REQUEST['lname'];
$memo = $_REQUEST['memo'];
$file = $_REQUEST['file'];
$submittedby = $_SESSION["username"];
$ins_query="insert into user (`trn_date`,`fname`,`lname`,`memo`,`submittedby`,`file`) values ('$trn_date','$fname','$lname','$memo','$submittedby','$file')";
mysqli_query($con,$ins_query) or die(mysql_error());
$status = "New Record Inserted Successfully.</br></br><a href='view.php'>View Inserted Record</a>";
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert New Record</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="form">
<p><a href="dashboard.php">Dashboard</a> | <a href="view.php">View Records</a> | <a href="logout.php">Logout</a></p>
<div>
<h1>Insert New Record</h1>
<form name="form" method="post" action="">
<input type="hidden" name="new" value="1" />
<p><input type="text" name="fname" placeholder="Enter Date" required /></p>
<p><input type="text" name="memo" placeholder="Enter Memorandum" required /></p>
<p><input type="text" name="lname" placeholder="Enter Title" required /></p>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit"/>
</form>
<?php
if(isset($_FILES['file'])){
$errors= array();
$file_name = $_FILES['file']['name'];
$file_size =$_FILES['file']['size'];
$file_tmp =$_FILES['file']['tmp_name'];
$file_type=$_FILES['file']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['file']['name'])));
$expensions= array("pdf");
if(in_array($file_ext,$expensions)=== false){
$errors[]="extension not allowed, please choose a pdf file.";
}
if($file_size > 2097152){
$errors[]='File size must not exceed 2 MB';
}
if(empty($errors)==true){
move_uploaded_file($file_tmp,"../uploads/".$file_name);
echo "Success";
}else{
print_r($errors);
}
}
?>
<p><input name="submit" type="submit" value="Submit" /></p>
</form>
<p style="color:#FF0000;"><?php echo $status; ?></p>
</div>
</div>
</body>
</html>
答案 0 :(得分:0)
那是因为你只设置保存文件名
$file = $_REQUEST['file'];
相反它应该是
$file = "../uploads/".$_REQUEST['file'];
答案 1 :(得分:0)
您的代码中存在相当多的逻辑错误。
您正在将记录插入MySQL数据库,然后检查文件扩展名和文件大小。
您只需将文件名插入MySQL($file = $_REQUEST['file'];
),因此只会出现文件名。正确的代码是:
$file = "../uploads/".$_FILES['file']['name'];
稍微需要调整文件移动部分:
move_uploaded_file($file_tmp, $file);
在sql插入后的错误检查中,您使用的是mysql_error()
,而不是mysqli_error($con)
您不会检查move_uploaded_file($file_tmp,"../uploads/".$file_name);
来电是否成功且文件是否已移至最终位置。
同时请考虑将准备好的陈述用于prevent sql injection attacks。