ALTER TABLE `oc_download` ADD `main` TINYINT(1) NOT NULL DEFAULT '0' AFTER `mask`;
<form id="upload-form" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<!-- другие поля формы -->
<input type="submit" value="Загрузить">
</form>
$(document).ready(function() {
$('#upload-form').submit(function(event) {
event.preventDefault(); // отменяем стандартное действие формы
var formData = new FormData(this); // создаем объект FormData для отправки данных формы
$.ajax({
url: 'upload.php', // адрес обработчика на сервере
type: 'POST',
data: formData, // данные формы
processData: false, // не обрабатываем данные FormData
contentType: false, // не устанавливаем тип содержимого
success: function(response) {
// обрабатываем ответ от сервера
console.log(response);
},
error: function(jqXHR, textStatus, errorThrown) {
// обрабатываем ошибки при отправке запроса
console.log(textStatus, errorThrown);
}
});
});
});
<?php
// подключаемся к базе данных
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
// проверяем, был ли загружен файл
if (isset($_FILES['file']) && $_FILES['file']['error'] == UPLOAD_ERR_OK) {
// получаем информацию о файле
$fileName = $_FILES['file']['name'];
$fileSize = $_FILES['file']['size'];
$fileType = $_FILES['file']['type'];
$fileTemp = $_FILES['file']['tmp_name'];
// загружаем файл на сервер
move_uploaded_file($fileTemp, 'uploads/' . $fileName);
// записываем путь к файлу в базу данных
$stmt = $db->prepare('INSERT INTO files (name, size, type, path) VALUES (?, ?, ?, ?)');
$stmt->execute([$fileName, $fileSize, $fileType, 'uploads/' . $fileName]);
// возвращаем сообщение об успешной загрузке файла
echo 'Файл успешно загружен и записан в базу данных.';
} else {
// возвращаем сообщение об ошибке загрузки файла
echo 'Ошибка загрузки файла: ' . $_FILES['file']['error'];
}
?>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-name">Обновить меню</label>
<div class="col-sm-10"><input type="file" id="menu-file" class="form-control" autocomplete="off"></div>
<div class="col-sm-2"></div><div class="col-sm-10"><div id="result"></div></div>
</div>
$("#menu-file").change(function(){
if (window.FormData === undefined) {
alert('В вашем браузере FormData не поддерживается')
} else {
var formData = new FormData();
formData.append('file', $("#menu-file")[0].files[0]);
$.ajax({
type: "POST",
url: '/upload-form-menu.php',
cache: false,
contentType: false,
processData: false,
data: formData,
dataType : 'json',
success: function(msg){
if (msg.error == '') {
$('#result').html(msg.success);
} else {
$('#result').html(msg.error);
}
}
});
}
});
<?php
$db = new PDO('mysql:host=localhost;dbname=testoc', 'root', '');
// Название <input type="file">
$input_name = 'file';
// Разрешенные расширения файлов.
$allow = array(
'pdf'
);
// Запрещенные расширения файлов.
$deny = array(
'phtml', 'php', 'php3', 'php4', 'php5', 'php6', 'php7', 'phps', 'cgi', 'pl', 'asp',
'aspx', 'shtml', 'shtm', 'htaccess', 'htpasswd', 'ini', 'log', 'sh', 'js', 'html',
'htm', 'css', 'sql', 'spl', 'scgi', 'fcgi', 'exe'
);
// Директория куда будут загружаться файлы.
$path = __DIR__ . '/uploads/';
$error = $success = '';
if (!isset($_FILES[$input_name])) {
$error = 'Файл не загружен.';
} else {
$file = $_FILES[$input_name];
// Проверим на ошибки загрузки.
if (!empty($file['error']) || empty($file['tmp_name'])) {
$error = 'Не удалось загрузить файл.';
} elseif ($file['tmp_name'] == 'none' || !is_uploaded_file($file['tmp_name'])) {
$error = 'Не удалось загрузить файл.';
} else {
// Оставляем в имени файла только буквы, цифры и некоторые символы.
$pattern = "[^a-zа-яё0-9,~!@#%^-_\$\?\(\)\{\}\[\]\.]";
$name = mb_eregi_replace($pattern, '-', $file['name']);
$name = mb_ereg_replace('[-]+', '-', $name);
$parts = pathinfo($name);
if (empty($name) || empty($parts['extension'])) {
$error = 'Недопустимый тип файла';
} elseif (!empty($allow) && !in_array(strtolower($parts['extension']), $allow)) {
$error = 'Недопустимый тип файла';
} elseif (!empty($deny) && in_array(strtolower($parts['extension']), $deny)) {
$error = 'Недопустимый тип файла';
} else {
// Перемещаем файл в директорию.
if (move_uploaded_file($file['tmp_name'], $path . $name)) {
// Далее можно сохранить название файла в БД и т.п.
$success = '<p style="color: green">Файл «' . $name . '» успешно загружен.</p>';
// записываем путь к файлу в базу данных
$stmt = $db->prepare('UPDATE oc_setting SET value = ? WHERE code = ? AND `key` = ?');
$stmt->execute(['uploads/' . $name, 'config', 'config_file_patch']);
} else {
$error = 'Не удалось загрузить файл.';
}
}
}
}
// Вывод сообщения о результате загрузки.
if (!empty($error)) {
$error = '<p style="color: red">' . $error . '</p>';
}
$data = array(
'error' => $error,
'success' => $success,
);
header('Content-Type: application/json');
echo json_encode($data, JSON_UNESCAPED_UNICODE);
exit();
<div class="tab-pane" id="tab-store">
і одразу після, на новому рядку вставляємо ось таку розмітку:<div class="form-group required">
<label class="col-sm-2 control-label" for="input-pdf">{{ entry_pdf_file }}</label>
<div class="col-sm-10">
<a onclick="startUpload();" id="uploader" class="btn btn-primary"><i class="fa fa-upload"></i> {{ button_import }}</a>
</div>
</div>
{{ footer }}
та перед ним додати наступний код:<script type="text/javascript"><!--
function startUpload() {
var file_button = document.createElement('input');
file_button.type = "file";
file_button.id = "file_button1";
file_button.style.display = "none";
file_button.style.position = "absolute";
file_button.onchange = function() {
var form_data = new FormData();
var file = jQuery(this).get(0).files[0];
form_data.append('file', file);
form_data.append('type', 'file');
form_data.append('name', 'fileToUpload');
setTimeout(function() {
jQuery.ajax({
url: 'index.php?route=tool/upload/uploadToMenu&user_token={{ user_token }}',
type: 'post',
cache: false,
contentType: false,
processData: false,
data: form_data,
dataType: 'json',
beforeSend: function() {
$("#uploader").html('<img src="{{ store_url }}image/catalog/loader.gif" />');
},
success: function(json) {
if (json['success']) {
$("#uploader").html('<span>' + json['success'] + '</span>');
}
}
});
}, 1000);
};
jQuery(document.body).append(file_button);
file_button.click();
jQuery("#file_button1").remove();
}
//--></script>
public function upload() {
додаємо ось такий код: public function uploadToMenu() {
$json = array();
$this->load->language('sale/order');
if (!$this->user->hasPermission('modify', 'tool/upload')) {
$json['error'] = $this->language->get('error_permission');
}
if (!$json) {
if (!empty($this->request->files['file']['name']) && is_file($this->request->files['file']['tmp_name'])) {
$filename = html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8');
if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 128)) {
$json['error'] = $this->language->get('error_filename');
}
$allowed = array();
$extension_allowed = preg_replace('~\r?\n~', "\n", $this->config->get('config_file_ext_allowed'));
$filetypes = explode("\n", $extension_allowed);
foreach ($filetypes as $filetype) {
$allowed[] = trim($filetype);
}
if (!in_array(strtolower(substr(strrchr($filename, '.'), 1)), $allowed)) {
$json['error'] = $this->language->get('error_filetype');
}
$allowed = array();
$mime_allowed = preg_replace('~\r?\n~', "\n", $this->config->get('config_file_mime_allowed'));
$filetypes = explode("\n", $mime_allowed);
foreach ($filetypes as $filetype) {
$allowed[] = trim($filetype);
}
if (!in_array($this->request->files['file']['type'], $allowed)) {
$json['error'] = $this->language->get('error_filetype');
}
$content = file_get_contents($this->request->files['file']['tmp_name']);
if (preg_match('/\<\?php/i', $content)) {
$json['error'] = $this->language->get('error_filetype');
}
if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {
$json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);
}
} else {
$json['error'] = $this->language->get('error_upload');
}
}
if (!$json) {
move_uploaded_file($this->request->files['file']['tmp_name'], DIR_IMAGE . 'files/' . $filename);
$json['success'] = $this->language->get('text_upload');
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
move_uploaded_file($this->request->files['file']['tmp_name'], DIR_IMAGE . 'files/' . $filename);
move_uploaded_file($this->request->files['file']['tmp_name'], DIR_IMAGE . 'files/catalog.pdf');
<div class="tab-pane" id="tab-store">
і одразу після, на новому рядку вставляємо ось таку розмітку:<div class="form-group required">
<label class="col-sm-2 control-label" for="input-pdf">{{ entry_pdf_file }}</label>
<div class="col-sm-10">
<a onclick="startUpload();" id="uploader" class="btn btn-primary"><i class="fa fa-upload"></i> {{ button_import }}</a>
</div>
</div>
{{ footer }}
та перед ним додати наступний код:<script type="text/javascript"><!--
function startUpload() {
var file_button = document.createElement('input');
file_button.type = "file";
file_button.id = "file_button1";
file_button.style.display = "none";
file_button.style.position = "absolute";
file_button.onchange = function() {
var form_data = new FormData();
var file = jQuery(this).get(0).files[0];
form_data.append('file', file);
form_data.append('type', 'file');
form_data.append('name', 'fileToUpload');
setTimeout(function() {
jQuery.ajax({
url: 'index.php?route=tool/upload/uploadToMenu&user_token={{ user_token }}',
type: 'post',
cache: false,
contentType: false,
processData: false,
data: form_data,
dataType: 'json',
beforeSend: function() {
$("#uploader").html('<img src="{{ store_url }}image/catalog/loader.gif" />');
},
success: function(json) {
if (json['success']) {
$("#uploader").html('<span>' + json['success'] + '</span>');
}
}
});
}, 1000);
};
jQuery(document.body).append(file_button);
file_button.click();
jQuery("#file_button1").remove();
}
//--></script>
public function upload() {
додаємо ось такий код: public function uploadToMenu() {
$json = array();
$this->load->language('sale/order');
if (!$this->user->hasPermission('modify', 'tool/upload')) {
$json['error'] = $this->language->get('error_permission');
}
if (!$json) {
if (!empty($this->request->files['file']['name']) && is_file($this->request->files['file']['tmp_name'])) {
$filename = html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8');
if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 128)) {
$json['error'] = $this->language->get('error_filename');
}
$allowed = array();
$extension_allowed = preg_replace('~\r?\n~', "\n", $this->config->get('config_file_ext_allowed'));
$filetypes = explode("\n", $extension_allowed);
foreach ($filetypes as $filetype) {
$allowed[] = trim($filetype);
}
if (!in_array(strtolower(substr(strrchr($filename, '.'), 1)), $allowed)) {
$json['error'] = $this->language->get('error_filetype');
}
$allowed = array();
$mime_allowed = preg_replace('~\r?\n~', "\n", $this->config->get('config_file_mime_allowed'));
$filetypes = explode("\n", $mime_allowed);
foreach ($filetypes as $filetype) {
$allowed[] = trim($filetype);
}
if (!in_array($this->request->files['file']['type'], $allowed)) {
$json['error'] = $this->language->get('error_filetype');
}
$content = file_get_contents($this->request->files['file']['tmp_name']);
if (preg_match('/\<\?php/i', $content)) {
$json['error'] = $this->language->get('error_filetype');
}
if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {
$json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);
}
} else {
$json['error'] = $this->language->get('error_upload');
}
}
if (!$json) {
move_uploaded_file($this->request->files['file']['tmp_name'], DIR_IMAGE . 'files/' . $filename);
$json['success'] = $this->language->get('text_upload');
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}