我的上传文件脚本如何将文件路径保存到数据库,返回错误消息,并创建文件夹


How can my upload file script save file path to the database, return an error message, and create a folder?

我正在制作一个上传文件的脚本。我有一些问题。

我正在使用dropzonejs库。

  1. 我需要将上传的文件信息保存到数据库中。我做了一个事先准备好的声明,但没有奏效:表中什么都没有存储。

    表信息:userID(int 11)、image_name(varchar 50)、image_path(varchar 60)、up_time(varchar 60%)、up_ip(varchar 45)。

    在哪里可以看到MySQL错误?我已经从appdata中检查了.err文件,但没有任何内容。

  2. 如何将$error_msg从上传页面返回到表单页面?我必须将第一个检查(文件存在)从上传页面移动到dropzone.js文件,但我不知道如何做到这一点。也许已经有了这个选项,但我搜索了一下,一无所获。

HTML:

<link rel="stylesheet" href="/css/dropzone.css"/>
<script type="text/JavaScript" src="/js/dropzone.js"></script>
<form action="/upload"
      class="dropzone"
      id="my-awesome-dropzone"></form>
<?php
if (isset($error_msg)) {
    echo '<p class="error">' . $error_msg . '</p>';
}
?>

我的upload.php脚本:

require_once('/includes/functions.php');
$image = basename($_FILES['file']['name']);
$image = str_replace(' ','|',$image);
$img_dir = $_SERVER['DOCUMENT_ROOT'] . '/images/user_uploads/' . $_SESSION['username'] . '/';
if (file_exists($img_dir . $image)) {
    return $error_msg = $img_dir . $_FILES["file"]["name"] . " ya existe. ";
} elseif (move_uploaded_file($_FILES["file"]["tmp_name"],
    $img_dir . $image)) {
    $img_path = $img_dir . $image;
    $up_time = get_current_time();
    $up_ip = get_ip_address();
    if ($insert_stmt = $mysqli->prepare("INSERT INTO user_uploads (userID, image_name, image_path, up_time, up_ip) VALUES (?, ?, ?, ?, ?)")) {
        $insert_stmt->bind_param('issss', $_SESSION['user_id'], $_FILES["file"]["name"], $img_path, $up_time, $up_ip);
        if (! $insert_stmt->execute()) {
            return $error_msg = '¡Error al subir la imagen! (db_error)';
        }
    }
} else return $error_msg = '¡Error al subir la imagen!';

只有当我使用$_SERVER['DOCUMENT_ROOT']作为映像目录时,这才有效。

  1. 如果文件夹不存在(每个用户都有自己的上传文件夹),我如何告诉脚本自动创建它

我在Windows中使用XAMPP,但一旦完成,我会将其上传到Linux主机,所以也许我必须更改路径或其他什么。那么,这两种操作系统之间的区别是什么呢?

好的,我明白了:)

$tmp_name = $_FILES["file"]["tmp_name"];
$image = basename($_FILES['file']['name']);
$image = str_replace(' ', '|', $image);
$img_dir = $_SERVER['DOCUMENT_ROOT'] . '/images/user_uploads/' . $_SESSION['username'] . '/';
if (!file_exists($_SERVER['DOCUMENT_ROOT'] . '/images/user_uploads/' . $_SESSION['username'])) {
    mkdir($_SERVER['DOCUMENT_ROOT'] . '''images''user_uploads''' . $_SESSION['username']);
}
move_uploaded_file($tmp_name, $img_dir . $image);
$img_path = $_SESSION['username'] . '/' . $image;
$up_time = get_current_time();
$up_ip = get_ip_address();
if ($stmt = $mysqli->prepare("INSERT INTO user_uploads (userID, image_name, image_path, up_time, up_ip) VALUES (?, ?, ?, ?, ?)")) {
    $stmt->bind_param('issss', $_SESSION['user_id'], $image, $img_path, $up_time, $up_ip);
    $stmt->execute();
}

使用这个javascript,我认为只有从javascript本身返回错误消息才是可能的,所以创建函数或设置消息就可以了:

  dictInvalidFileType: "No puedes subir este tipo de archivos.",
  dictResponseError: "Código de error {{statusCode}}.",

希望它能帮助到某人:)

  1. 请提供您的最终查询及其值
  2. 您在一个文件中上传代码,所以不能通过包含文件来返回值,您需要将代码封装在函数或类方法中
  3. 请参阅:如果没有创建文件夹';t已存在