我是 PHP 的新手。我正在为员工文档创建一个系统。基本上,用户可以上传员工文件以便更好地保管。我的问题是我似乎无法使我在网上看到的代码工作。
我的数据库中有两个表“tbl_employee”和“tbl_file”。 Emp_ID 是 tbl_file 的外键。
这是代码:
<div class="row">
<div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12">
<div class="card influencer-profile-data">
<div class="card-body">
<div class="" id="message"></div>
<form id="validationform" name="docu_form" data-parsley-validate="" novalidate="" enctype="multipart/form-data" >
<div class="form-group row">
<label class="col-12 col-sm-3 col-form-label text-sm-right"><i class="fa fa-file-word"></i> Document Info</label>
</div>
<div class="form-group row">
<label class="col-12 col-sm-3 col-form-label text-sm-right">Upload Document</label>
<div class="col-12 col-sm-8 col-lg-6">
<input data-parsley-type="alphanum" type="file" alt="document_name" id="document_name" accept=".docx, .doc, .pptx, .ppt, .xlsx, .xls, .pdf, .odt" required="" placeholder="" class="form-control">
<footer style="font-size: 11px"><b>File Type:</b><font color="red"><i>.docx .doc .pptx .ppt .xlsx .xls .pdf .odt</i></font></footer>
</div>
</div>
<div class="form-group row">
<label class="col-12 col-sm-3 col-form-label text-sm-right">Document Tilte</label>
<div class="col-12 col-sm-8 col-lg-6">
<input data-parsley-type="alphanum" alt="document_decription" type="text" required="" placeholder="" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-12 col-sm-3 col-form-label text-sm-right">Employee</label>
<div class="col-12 col-sm-8 col-lg-6">
<select data-parsley-type="alphanum" type="text" id="Emp_ID" required="" placeholder="" class="form-control">
<?php
$conn = new class_model();
$emp = $conn->fetchAll_employee();
?>
<option value="">← Select Employee →</option>
<?php foreach ($emp as $row) { ?>
<option value="<?= $row['Emp_ID']; ?>" alt="Emp_ID"><?= $row['emp_name']; ?></option>
<?php } ?>
</select>
</div>
</div>
</div>
<div class="form-group row text-right">
<div class="col col-sm-10 col-lg-9 offset-sm-1 offset-lg-0">
<button type="button" class="btn btn-space btn-primary" id="btn-docu">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
这是js:
<script>
document.addEventListener('DOMContentLoaded', () => {
let btn = document.querySelector('#btn-docu');
btn.addEventListener('click', () => {
const document_name = document.querySelector('input[id=document_name]').value;
const document_decription = document.querySelector('input[alt=document_decription]').value;
var Emp_ID= document.querySelector(".Emp_ID select option:checked").value;
var data = new FormData(this.form);
data.append('document_name', $('#document_name')[0].files[0]);
data.append('document_decription', document_decription);
data.append('Emp_ID', Emp_ID);
if (document_name === '' || document_decription === '' || Emp_ID === '') {
$('#message').html('<div class="alert alert-danger"> Required All Fields!</div>');
} else {
$.ajax({
url: 'add_document.php',
type: "POST",
data: data,
processData: false,
contentType: false,
async: false,
cache: false,
success: function(data) {
$('#message').html(data);
},
error: function(data) {
console.log("Failed");
}
});
}
});
});
</script>
PHP:
来自具有函数
的php文件public function add_document($document_name, $document_decription, $Emp_ID){
$stmt = $this->conn->prepare("INSERT INTO `tbl_file` (`document_name`, `document_decription`, `Emp_ID`) VALUES(?, ?, ?)") or die($this->conn->error);
$stmt->bind_param("ssi", $document_name, $document_decription, $Emp_ID);
if($stmt->execute()){
$stmt->close();
$this->conn->close();
return true;
}
}
<?php
require_once "assets/class_model.php";
if(ISSET($_POST)){
$conn = new class_model();
$files = addslashes(file_get_contents($_FILES['document_name']['tmp_name']));
$document_name ="../sample/files/". addslashes($_FILES['document_name']['name']);
move_uploaded_file($_FILES["document_name"]["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/sample/files/" . addslashes($_FILES["document_name"]["name"]));
$document_decription = trim($_POST['document_decription']);
$Emp_ID = trim($_POST['Emp_ID']);
$doc = $conn->add_document($document_name, $document_decription, $Emp_ID);
if($doc == TRUE){
echo '<div class="alert alert-success">Add Document Successfully!</div><script> setTimeout(function() { window.history.go(-1); }, 1000); </script>';
}else{
echo '<div class="alert alert-danger">Add Document Failed!</div><script> setTimeout(function() { window.history.go(-0); }, 1000); </script>';
}
}
?>
我尝试了不同的代码,但我似乎无法让它工作
我无法检查您的脚本问题,因为缺少 class_model.php。
为了确保您的设置正确,我建议您先上传不带 javascript 的文件,如下所述: https://www.php.net/manual/en/features.file-upload.post-method.php
您使用的服务器和可用的扩展可能很重要,因为并非在所有设置中 php 本机文件上传都有效。
显然,您没有以正确的方式进行操作 - 您编写代码的方式无法扩展和适当测试 一个好的开始https://phptherightway.com/
也可以考虑使用像 Laravel 或 Symfony 这样的框架,需要学习但值得花时间。
对于这个 porpose 我会使用 https://symfony.com/doc/current/components/http_foundation.html 存在一个很好的文档:https://symfony.com/doc/current/controller/upload_file.html