Я делаю скрипт для загрузки файлов. У меня есть несколько вопросов.
я использую библиотека dropzonejs.
Мне нужно сохранить информацию о загруженном файле в базу данных. Я сделал готовое заявление, но оно не работает: в таблице ничего не хранится.
Информация таблицы: ID пользователя (int 11), имя_изображения (varchar 50), путь_изображения (varchar 60), up_time (varchar 60), up_ip (varchar 45).
Где я могу увидеть ошибки MySQL? Я уже проверил файл .err из appdata и там ничего не было.
Как я могу вернуть $error_msg
со страницы загрузки на страницу формы? Мне придется перенести первую проверку (файл существует) со страницы загрузки в файл dropzone.js, но я не уверен, как это сделать. Возможно, уже есть вариант для этого, но я искал и ничего не нашел.
<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>';
}
?>
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']
как каталог изображений.
Я использую XAMPP в Windows, но как только он будет закончен, я загружу его на хостинг 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}}.",
Надеюсь, это поможет кому-то 🙂