Я создал страницу, которая может добавлять новые записи в мою базу данных, все работает нормально, но когда я пытаюсь загрузить файл в формате pdf, он не сохраняется в правильной папке. Он должен храниться в моих «загрузках». Когда я проверяю свою базу данных, она не связывается должным образом, она должна быть ../uploads/example.pdf вместо example.pdf
<?php require('db.php'); include("auth.php"); $status = ""; if(isset($_POST['new']) && $_POST['new']==1) { $trn_date = date("Ymd 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>
Это потому, что вы только сохранили имя файла
$file = $_REQUEST['file'];
Вместо этого это должно быть
$file = "../uploads/".$_REQUEST['file'];
В вашем коде довольно много логических ошибок.
Вы вставляете запись в базу данных 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);
вызов был успешным, и файл был перенесен в конечное местоположение.
Также pls рассматривает использование подготовленных инструкций для предотвращения атак с SQL-инъекциями .