php - 注册时如何将多个文件上传到不同的表中?
问题描述
今天是个好日子!我在注册期间使用 Dropzone Js 将多个文件上传到不同的表中。但是我无法同时进行上传和注册。我在网上看到的大多数 Dropzone 教程代码都在使用 mysqli,而我正在使用 PDO,因此很难集成到我的代码中。我需要将用户的详细信息保存到表中,同时将他们上传的文件与 coopID 作为外键一起保存到不同的表中。
我试过使用 Dropzone Js 轻松上传多个文件,我还使用 php PDO 函数 lastInsertID() 来获取用户的 coopID。
<?php
include_once 'coop_functions.php';
session_start();
if(isset($_SESSION['loggedUser'])) {
header("Location: coop_dashboard.php");
}
$errorList = NULL;
$firstName = "";
$lastName = "";
$coopName = "";
$userName = "";
$email = "";
$regNumber = "";
$coopNumber = "";
$address = "";
$contact = "";
$contact2 = "";
$city = "";
$status = "";
$coopType = "";
$photo = "";
// this code works but it doesn't save the coopID of the user
// if I put it inside if(isset($_POST['register'])) it doesn't work
if (! empty($_FILES)) {
$imagePath = isset($_FILES["file"]["name"]) ? $_FILES["file"]["name"] : "Undefined";
$targetPath = "uploads/";
$imagePath = $targetPath . $imagePath;
$tempFile = $_FILES['file']['tmp_name'];
$targetFile = $targetPath . $_FILES['file']['name'];
recordUpload($tempFile, $targetFile);
}
if (!empty($_GET["action"]) && $_GET["action"] == "save") {
require_once ("dbconfig.php");
print $sql = "INSERT INTO upload (photo) VALUES ('. $imagePath .')";
mysqli_query($conn, $sql);
$current_id = mysqli_insert_id($conn);
}
if(isset($_POST['register'])) {
$firstName = $_POST['firstName'];
$lastName = $_POST['lastName'];
$coopName = $_POST['coopName'];
$userName = $_POST['userName'];
$email = $_POST['email'];
$regNumber = $_POST['regNumber'];
$coopNumber = $_POST['coopNumber'];
$address = $_POST['address'];
$contact = $_POST['contact'];
$contact2 = $_POST['contact2'];
$city = $_POST['city'];
$status = $_POST['status'];
$coopType = $_POST['coopType'];
$imagePath = isset($_FILES["file"]["name"]) ? $_FILES["file"]["name"] : "Undefined";
$targetPath = "uploads/";
$imagePath = $targetPath . $imagePath;
$tempFile = $_FILES['file']['tmp_name'];
$targetFile = $targetPath . $_FILES['file']['name'];
$errorList = registerValidateInput($firstName, $lastName, $coopName, $userName, $email, $regNumber, $coopNumber,
$address, $contact, $contact2, $city, $status, $coopType, $_POST['password'], $_POST['confirmPassword']);
if($errorList == NULL)
{
$errorList = registerVerifyInput($_POST['userName'], $_POST['email']);
if($errorList == NULL)
{
$errorList = recordUpload($tempFile, $targetFile);
if($errorList == NULL)
{
register(2, $_POST['firstName'], $_POST['lastName'], $_POST['coopName'], $_POST['userName'], $_POST['email'], $_POST['regNumber'], $_POST['coopNumber'], $_POST['address'],
$_POST['contact'], $_POST['contact2'], $_POST['city'], $_POST['status'], $_POST['coopType'], $_POST['password'], $targetFile);
header("Location: coop_dashboard.php");
}
}
}
}
?>
//我删除了输入标签以使代码简短
<form class="login-form form-all" action="coop_register.php" method="post">
<button type="submit" name="register" class="green-btn green-btn-form btn-login">Create </button>
</form>
<form name="frmImage" action="coop_register.php?action=save" class="dropzone">
</form>
//这些是我的函数,它位于另一个名为 coop_functions.php 的文件中
function connect()
{
global $server, $database, $dbusername, $dbpassword;
try {
$connection = new PDO("mysql:host=$server; dbname=$database", $dbusername, $dbpassword);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $connection;
} catch (PDOException $exception) {
echo "Error encountered: " . $exception->getMessage();
return NULL;
}
}
function recordUpload($tempFile, $targetFile)
{
$errorList = array();
try {
move_uploaded_file($tempFile, $targetFile);
} catch(Exception $exception) {
array_push($errorList, "Error: " . $exception -> getMessage());
}
if (!empty($errorList)) {
return $errorList;
} else {
return NULL;
}
}
function register($roleID, $firstName, $lastName, $coopName, $userName, $email, $regNumber, $coopNumber, $address, $contact, $contact2, $city,
$status, $coopType, $password, $photo)
{
try
{
$connection = connect();
$stmt= $connection->prepare("INSERT INTO cooperative(roleID, firstName, lastName,
coopName, userName, email, regNumber, coopNumber, address, contact, contact2, city, status, coopType, password)
VALUES (:roleID,:firstName, :lastName, :coopName, :userName, :email, :regNumber, :coopNumber, :address,
:contact, :contact2, :city, :status, :coopType, :password)");
$stmt->bindParam(":roleID", $roleID);
$stmt->bindParam(":firstName", $firstName);
$stmt->bindParam("lastName", $lastName);
$stmt->bindParam(":coopName", $coopName);
$stmt->bindParam(":userName", $userName);
$stmt->bindParam(":email", $email);
$stmt->bindParam("regNumber", $regNumber);
$stmt->bindParam("coopNumber", $coopNumber);
$stmt->bindParam(":address", $address);
$stmt->bindParam(":contact", $contact);
$stmt->bindParam(":contact2", $contact2);
$stmt->bindParam(":city", $city);
$stmt->bindParam(":status", $status);
$stmt->bindParam(":coopType", $coopType);
$hashedPassword = hash("sha256", $password);
$stmt->bindParam(":password", $hashedPassword);
$stmt->execute();
$coopID = $connection->lastInsertID();
$statement = $connection->prepare("INSERT INTO upload(coopID, photo) VALUES (:coopID, :photo)");
$statement->bindParam(":coopID", $coopID);
$statement->bindParam(":photo", $photo);
$statement->execute();
$coopID = $connection->lastInsertID();
$detail = "$firstName $lastName registered into the system.";
recordAudit($connection, $coopID, 1, $detail);
recordUpload($connection, $coopID);
}
catch (PDOException $exception)
{
die("Error: " . $exception->getMessage());
}
}
没有错误消息,只是没有按照预期的方式工作。注册后 coopID 保存到数据库但没有上传文件或文件上传但没有 coopID。我是 PHP 初学者,感谢您的帮助。
解决方案
推荐阅读
- javascript - 登录时从用户集合中获取用户数据
- java - AsyncTaskLoader 用于加载程序和后台线程在转换为 androidx 时获取 ClassCastException
- http - Golang 和部署服务
- python - Python Regex:使用反斜杠和换行符匹配成绩单中时间戳子字符串的开始和结束
- reactjs - react getId时如何显示和更改传入的数据下拉列表
- java - Hibernate Commit Before 方法
- amazon-web-services - 当新数据中存在架构更改时如何处理 Athena?
- android - Ionic InAppBrowser HTML5 视频播放器缩放选项不可用
- c++ - 将递归结构公开为 Lua 表
- excel - Excel - 匹配多个条件