Как мой скрипт загрузки файлов может сохранить путь к базе данных, вернуть сообщение об ошибке и создать папку?

Я делаю скрипт для загрузки файлов. У меня есть несколько вопросов.

я использую библиотека dropzonejs.

  1. Мне нужно сохранить информацию о загруженном файле в базу данных. Я сделал готовое заявление, но оно не работает: в таблице ничего не хранится.

    Информация таблицы: ID пользователя (int 11), имя_изображения (varchar 50), путь_изображения (varchar 60), up_time (varchar 60), up_ip (varchar 45).

    Где я могу увидеть ошибки MySQL? Я уже проверил файл .err из appdata и там ничего не было.

  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. Если папка не существует (у каждого пользователя будет своя папка для своих загрузок), как я могу сказать сценарию автоматически создать ее?

Я использую XAMPP в Windows, но как только он будет закончен, я загружу его на хостинг Linux, так что, возможно, мне придется изменить пути или что-то еще. Так в чем же разница между этими двумя операционными системами?

0

Решение

Ладно, я понял 🙂

$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}}.",

Надеюсь, это поможет кому-то 🙂

2

Другие решения

  1. Пожалуйста, укажите ваш окончательный запрос и его значение
  2. Вы загружаете код внутри одного файла, поэтому вы не можете вернуть значение, включив файл, вам нужно обернуть этот код в метод функции или класса.
  3. Порекомендуйте это: Создать папку, если она еще не существует
0

По вопросам рекламы [email protected]