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
Форумы портала PHP.SU :: Версия для печати :: Загрузка файлов и запись в БД
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Загрузка файлов и запись в БД

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

1. redNek - 23 Мая, 2012 - 23:16:14 - перейти к сообщению
Подскажите, какой самый корректный способ записать имя загруженного файла в БД.
2. Crate - 24 Мая, 2012 - 08:43:52 - перейти к сообщению
redNek пишет:
самый корректный способ

redNek пишет:
записать имя загруженного файла
3. Muxa - 24 Мая, 2012 - 08:44:58 - перейти к сообщению

Ха-ха

(Добавление)
все гениальное просто - просто запишите полное имя файла в базу инсертом)
4. avtor.fox - 24 Мая, 2012 - 09:08:56 - перейти к сообщению
redNek, смотря что Вы хотите делать с этими "названиями". Если Вам просто нужно знать что картинки есть, пишите название файла вместе с его расширением в базу при загрузке на сервер, а потом просто при выводе тяните название.

Если что-то на подобии галереи, то клепаете табличку с id=>name=>link=>href=>description=>timestamp и пишите в неё свои картинки.
5. redNek - 24 Мая, 2012 - 09:59:00 - перейти к сообщению
Crate пишет:
redNek пишет:
самый корректный способ

redNek пишет:
записать имя загруженного файла

Ну да, спать надо было лечь вчера пораньше )
6. kappa - 24 Мая, 2012 - 11:08:27 - перейти к сообщению
Ничего толком не понять от вопроса
Создайте такую форму, загрузите файл и посмотрите на вывод
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. print_r($_FILES)
  3. ?>
  4. <form method="POST">
  5.     <input type="file" name="myfile">
  6.     <button>Загрузить</button>
  7. </form>

А для уникальности можно добавить time();
7. Crate - 24 Мая, 2012 - 12:54:09 - перейти к сообщению
kappa пишет:
<?PHP
print_r($_FILES)
?>
<form method="POST">
    <input type="file" name="myfile">
    <button>Загрузить</button>
</form>

И ничего у вас не выйдет. Надо так:
CODE (text):
скопировать код в буфер обмена
  1. <?PHP
  2. print_r($_FILES);
  3. ?>
  4. <form action="<?=$_SERVER['PHP_SELF']?>" method="POST" enctype=multipart/form-data>
  5.     <input type="file" name="myfile">
  6.     <button type="submit">Загрузить</button>
  7. </form>
8. redNek - 24 Мая, 2012 - 16:52:52 - перейти к сообщению
Crate пишет:

И ничего у вас не выйдет. Надо так:
CODE (text):
скопировать код в буфер обмена
  1. <?PHP
  2. print_r($_FILES);
  3. ?>
  4. <form action="<?=$_SERVER['PHP_SELF']?>" method="POST" enctype=multipart/form-data>
  5.     <input type="file" name="myfile">
  6.     <button type="submit">Загрузить</button>
  7. </form>

Это не проблема, картинки грузятся на сервер, все ок. Мне же надо выводить картинку, а для этого записать имя файла в базу. Есть таблица с колнками id, alias, header, content, image, type. Вот в колонку image и надо писать имя. Просто есть не одна таблица, надо еще и текстовые документы грузить и еще картинки. Хотелось бы чего-то универсальней, чем прямо прописать, что надо записать имя в конкретную колонку.
Картинку называю по полю alias, т.к. оно уникальное, тут тоже вопросов нет и зайдя в каталог легко понять к какой записи картинка относится.
Есть еще нюанс, в зависимости от type картинки в разные каталоги забрасываются. Можно ли избавится вот от этого кода:
PHP:
скопировать код в буфер обмена
  1. switch($_POST['type']) {
  2.         case "12": $link="main-news"; break;
  3.         case "15": $link="company-news"; break;
  4.         case "14": $link="economics-area"; break;
  5.         case "13": $link="economics-news"; break;
  6. }

Не записывая в type имя каталога?
9. redNek - 26 Мая, 2012 - 00:56:56 - перейти к сообщению
Вопрос еще. То, что массив $_FILES создается всегда, даже если пользователь оставил пустое поле, нормально? Хотелось бы вызывать нужную функцию только тогда, когда массив существует.
10. LIME - 26 Мая, 2012 - 07:06:30 - перейти к сообщению
11. redNek - 26 Мая, 2012 - 16:13:07 - перейти к сообщению

Я так и сделал с самого начала - не сработало, посмотрел в чем проблема: при пустом поле выбора файла все-равно создается массив: Array ( [image] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) ). Откуда ошибки загрузки, если ничего не грузилось?
12. LIME - 26 Мая, 2012 - 16:20:13 - перейти к сообщению
значит надо проверять на $_FILES[error] == 4
хз...я всегда знал имя файла загружаемого пока
13. redNek - 26 Мая, 2012 - 16:34:57 - перейти к сообщению
LIME пишет:
значит надо проверять на $_FILES[error] == 4
хз...я всегда знал имя файла загружаемого пока

PHP:
скопировать код в буфер обмена
  1. if($_FILES[$type]['error'] == 0){
  2.         …
  3. }

Так сделал, для работы достаточно.
14. LIME - 26 Мая, 2012 - 16:39:07 - перейти к сообщению
из мануала
CODE (html):
скопировать код в буфер обмена
  1. <form action="" method="post" enctype="multipart/form-data">
  2. <p>Изображения:
  3. <input type="file" name="pictures[]" />
  4. <input type="file" name="pictures[]" />
  5. <input type="file" name="pictures[]" />
  6. <input type="submit" value="Отправить" />
  7. </p>
  8. </form>
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. foreach ($_FILES["pictures"]["error"] as $key => $error) {
  3.     if ($error == UPLOAD_ERR_OK) {
  4.         $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
  5.         $name = $_FILES["pictures"]["name"][$key];
  6.         move_uploaded_file($tmp_name, "data/$name");
  7.     }
  8. }
  9. ?>
  10.  
15. htcsc - 04 Мая, 2015 - 16:58:56 - перейти к сообщению
ш

 

Powered by ExBB FM 1.0 RC1