首页 > 解决方案 > 注册时如何将多个文件上传到不同的表中?

问题描述

今天是个好日子!我在注册期间使用 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 初学者,感谢您的帮助。

标签: phpfile-uploadpdo

解决方案


推荐阅读