Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Загрузка файлов на сервер с записью пути в БД MySQL с описанием файла на php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dus2003
Отправлено: 13 Февраля, 2020 - 23:12:03
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2020  


Помог: 0 раз(а)




Добрый день.
Требуется осуществить загрузку нескольких файлов на сервер в папку: "file/Доходные/" в определенную папку, путь до файла записать в БД в табл. fddoc с полями ID_FDВ (ID записи), ID_DDOC (ID родительской записи БД из табл. ddoc), Namefddoc (Описание файла), NameFDD (Имя файла), PathFDD (путь до файла).
Представленный ниже исходный код рабочий. Но не так как хотелось бы.
Как работает этот код:
В форме загрузки нажимаеш кнопку выбора файлов, открывается окно выбора, выбираешь один или несколько фалов, нажимаешь кнопку Добавить и все выбранные файлы записываются в папку,а соответствующая информация в БД. вроде все ништяк (хороший код, мне очень нравится, можете использовать его), но, в табл БД fddoc есть поле "Namefddoc" (Описание файла, например - "Приложение №1 к договору") и данное описание должно быть к каждому файлу который я загружаю. Но данный код мне не дает такой возможности и я не знаю как это реализовать.
Для понимания: я знаю delphi но не знаю php, поэтому прошу давать разъяснения так же развернуто как я попытался задать вопрос.
Заранее СПАСИБО.
Прикладываю скриншот формы загрузки-чтобы легче было понять!


Исходный код следующий:

upload.php (форма загрузки)
...
echo "<table>";
echo "<form action='saveupload.php' method='post' enctype = 'multipart/form-data'>";
echo "<input type='hidden' name='myVariable' value='". htmlentities($IDDDFORUPLOAD)."'>";//Передача ID_DD доходного договора в saveupload.php
echo "<tr height='40px'>";
echo "<td><label>Добавить файл:</label></td>";
echo "<td><input name='namef1' size='30' type='text' maxlength='45' placeholder='Название документа'></td>";
echo "<td><input name='file[]' type='file' multiple></td>";
echo "</tr>";
echo "</table><br />";
echo "<input type='submit' name='add' value='Добавить'>";
echo "&nbsp;&nbsp;&nbsp;<input type='reset' name='res' value='Очистить форму'>";
echo "&nbsp;&nbsp;&nbsp;<input type='button' name='backl' value='Отмена' OnClick='backlist();'>";
echo "</form>";
...

saveupload.php (исполняющий запись файл)
...
$t=$_POST['myVariable'];
if($res_docvrf == '1'){ //Идентификатор записи доходного договора

// Название <input type="file">
$input_name = 'file';
// Разрешенные расширения файлов.
$allow = array();
// Запрещенные расширения файлов.
$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'
);
// Директория куда будут загружаться файлы.
$path = __DIR__ . '/file/Доходные/';

if (isset($_FILES[$input_name])) {
// Проверим директорию для загрузки.
if (!is_dir($path)) {
mkdir($path, 0777, true);
}
// Преобразуем массив $_FILES в удобный вид для перебора в foreach.
$files = array();
$diff = count($_FILES[$input_name]) - count($_FILES[$input_name], COUNT_RECURSIVE);
if ($diff == 0) {
$files = array($_FILES[$input_name]);
} else {
foreach($_FILES[$input_name] as $k => $l) {
foreach($l as $i => $v) {
$files[$i][$k] = $v;
}
}
}
foreach ($files as $file) {
$error = $success = '';

// Проверим на ошибки загрузки.
if (!empty($file['error']) || empty($file['tmp_name'])) {
switch (@$file['error']) {
case 1:
case 2: $error = 'Превышен размер загружаемого файла.'; break;
case 3: $error = 'Файл был получен только частично.'; break;
case 4: $error = 'Файл не был загружен.'; break;
case 6: $error = 'Файл не загружен - отсутствует временная директория.'; break;
case 7: $error = 'Не удалось записать файл на диск.'; break;
case 8: $error = 'PHP-расширение остановило загрузку файла.'; break;
case 9: $error = 'Файл не был загружен - директория не существует.'; break;
case 10: $error = 'Превышен максимально допустимый размер файла.'; break;
case 11: $error = 'Данный тип файла запрещен.'; break;
case 12: $error = 'Ошибка при копировании файла.'; break;
default: $error = 'Файл не был загружен - неизвестная ошибка.'; break;
}
} 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);

// Т.к. есть проблема с кириллицей в названиях файлов (файлы становятся недоступны).
// Сделаем их транслит:
$converter = array(
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e',
'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k',
'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r',
'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '',
'э' => 'e', 'ю' => 'yu', 'я' => 'ya',

'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E',
'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K',
'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R',
'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => '', 'Ы' => 'Y', 'Ъ' => '',
'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya',
);
$name = strtr($name, $converter);
$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 {
// Чтобы не затереть файл с таким же названием, добавим префикс.
$i = 0;
$prefix = '';
while (is_file($path . $parts['filename'] . $prefix . '.' . $parts['extension'])) {
$prefix = '(' . ++$i . ')';
}
$name = $parts['filename'] . $prefix . '.' . $parts['extension'];

// Перемещаем файл в директорию.
if (move_uploaded_file($file['tmp_name'], $path . $name)) {
// Далее можно сохранить название файла в БД и т.п.
$success = 'Файл «' . $name . '» успешно загружен.';
$tes = mysqli_query($link, "INSERT INTO fddoc SET NameFDD='".$name."',PathFDD='".$path."', ID_DDOC='".$t."'");
} else {
$error = 'Не удалось загрузить файл.';
}
}
}
// Выводим сообщение о результате загрузки.
if (!empty($success)) {
echo '<p>' . $success . '</p>';
} else {
echo '<p>' . $error . '</p>';
}
}
}
}
...
Прикреплено изображение (Нажмите для увеличения)
forma zagruzki.jpg

(Отредактировано автором: 13 Февраля, 2020 - 23:16:15)

 
 Top
Vladimir Kheifets
Отправлено: 16 Февраля, 2020 - 07:52:33
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




dus2003 пишет:
Добрый день.
Требуется осуществить загрузку нескольких файлов на сервер в папку: "file/Доходные/" в определенную папку, путь до файла записать в БД в табл. fddoc с полями ID_FDВ (ID записи), ID_DDOC (ID родительской записи БД из табл. ddoc), Namefddoc (Описание файла), NameFDD (Имя файла), PathFDD (путь до файла).
Представленный ниже исходный код рабочий. Но не так как хотелось бы.
Как работает этот код:
В форме загрузки нажимаеш кнопку выбора файлов, открывается окно выбора, выбираешь один или несколько фалов, нажимаешь кнопку Добавить и все выбранные файлы записываются в папку,а соответствующая информация в БД. вроде все ништяк (хороший код, мне очень нравится, можете использовать его), но, в табл БД fddoc есть поле "Namefddoc" (Описание файла, например - "Приложение №1 к договору") и данное описание должно быть к каждому файлу который я загружаю. Но данный код мне не дает такой возможности и я не знаю как это реализовать.

Добрый день!
Вам необходимо добавить в форму поле Namefddoc для ввода описания файла и сохранить введённое описание.

1. Изменяем upload.php (форма загрузки) см. скриншот.
обратите внимание на то, что в каждой строке echo можно не писать.
Спойлер (Отобразить)

2. Изменяем saveupload.php (исполняющий запись файл)
Если поле Namefddoc необязательно для заполнения, стр. 14-17 можете убрать.
Спойлер (Отобразить)
добавляем поле Namefddoc в поле mysqli_query
Спойлер (Отобразить)

Удачи!
Прикреплено изображение (Нажмите для увеличения)
Anmerkung 2020-02-16 061750.png

(Отредактировано автором: 16 Февраля, 2020 - 07:56:49)

 
 Top
dus2003
Отправлено: 16 Февраля, 2020 - 14:49:54
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2020  


Помог: 0 раз(а)




Спасибо большое. Но!!!!
Вариант который Вы предложили не подходит.
Дело в том что, данный метод загрузки предусматривает выбор и загрузку нескольких фалов, но не дает возможности добавить несколько описаний файлов. Т.е. мне требуется чтобы я к каждому файлу добавил описание (например для файла №1 - Описание №1, для файла №2 - Описание №2 и т.д.).
А при том варианте который вы предложили - я выбираю несколько файлов а описание вводится одно на всех, и поэтому в БД описание файла дублируется для каждого загруженного файла.
я так полагаю, что вообще придется переделать весь код загрузки по типу "выбрал файл -> ввел описание -> нажал Добавить" после происходит запись данных в БД и высвечивается всплывающее окно "Хотите ли вы добавить еще файл? Да/Нет" (типа пошагово загружать каждый файл)

Огромное спасибо за ваш ответ.
Буду думать дальше.
 
 Top
Vladimir Kheifets
Отправлено: 16 Февраля, 2020 - 16:16:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




dus2003 пишет:
Спасибо большое. Но!!!!
Вариант который Вы предложили не подходит.
Дело в том что, данный метод загрузки предусматривает выбор и загрузку нескольких фалов, но не дает возможности добавить несколько описаний файлов. Т.е. мне требуется чтобы я к каждому файлу добавил описание (например для файла №1 - Описание №1, для файла №2 - Описание №2 и т.д.).
А при том варианте который вы предложили - я выбираю несколько файлов а описание вводится одно на всех, и поэтому в БД описание файла дублируется для каждого загруженного файла.
я так полагаю, что вообще придется переделать весь код загрузки по типу "выбрал файл -> ввел описание -> нажал Добавить" после происходит запись данных в БД и высвечивается всплывающее окно "Хотите ли вы добавить еще файл? Да/Нет" (типа пошагово загружать каждый файл)

Огромное спасибо за ваш ответ.
Буду думать дальше.

Если Вы в одной форме хотите ввести несколько файлов и к ним несколько описаний, то можно добавить несколько элементов textarea задав name="Namefddoc[]"
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB