Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Никита
Зарегистрирован: 24 Окт 2007 14:00:40 Сообщения: 39 Откуда: Новосибирск
|
Добавлено: 11 Ноя 2007 22:16:32 Заголовок сообщения: В какую директорию загружаются картинки через форму? |
|
|
Не могу найти |
|
Вернуться к началу |
|
|
Антон Исайкин Site Admin
Зарегистрирован: 08 Окт 2007 12:02:56 Сообщения: 150 Откуда: Санкт-Петербург
|
Добавлено: 11 Ноя 2007 23:40:34 Заголовок сообщения: |
|
|
Сразу картинки (как и любые другие файлы, загруженные методом POST) грузятся в папку временных файлов и удаляются как только сценарий отработал. Соответственно, в ходе сценария надо скопировать их оттуда в нужную тебе директорию простой функцией copy(). Дело будет выглядеть примерно так:
Код: | copy($this->data['file']['tmp_name'], 'нужный/тебе/путь') |
|
|
Вернуться к началу |
|
|
ztalker
Зарегистрирован: 06 Ноя 2007 14:00:26 Сообщения: 26 Откуда: Новосибирск
|
Добавлено: 12 Ноя 2007 09:00:08 Заголовок сообщения: |
|
|
Лучше использовать move_uploaded_file, эта функция еще делает проверку - реально ли файл передан формой, и в нагрузку переносит файл, а не просто копирует.
Код: | move_uploaded_file($this->data['file']['tmp_name'], $new_path . $this->data['file']['name']) |
|
|
Вернуться к началу |
|
|
Никита
Зарегистрирован: 24 Окт 2007 14:00:40 Сообщения: 39 Откуда: Новосибирск
|
Добавлено: 12 Ноя 2007 13:47:32 Заголовок сообщения: |
|
|
Точно, спасибо! |
|
Вернуться к началу |
|
|
Никита
Зарегистрирован: 24 Окт 2007 14:00:40 Сообщения: 39 Откуда: Новосибирск
|
Добавлено: 12 Ноя 2007 17:50:09 Заголовок сообщения: |
|
|
Подскажите, в $new_path указывается путь на диске? |
|
Вернуться к началу |
|
|
Антон Исайкин Site Admin
Зарегистрирован: 08 Окт 2007 12:02:56 Сообщения: 150 Откуда: Санкт-Петербург
|
Добавлено: 12 Ноя 2007 18:15:35 Заголовок сообщения: |
|
|
В $new_path пишешь любой путь со слешем на конце. |
|
Вернуться к началу |
|
|
Никита
Зарегистрирован: 24 Окт 2007 14:00:40 Сообщения: 39 Откуда: Новосибирск
|
Добавлено: 12 Ноя 2007 18:19:27 Заголовок сообщения: |
|
|
Слэш, как я понимаю, такой в Винде: "\"?
Я думаю, что у меня не получается из-за того, что у меня не одна, а три фотки... Следовательно, что-то я запутался, что тут не хватает:
move_uploaded_file($this->data['file']['tmp_name'], WEBROOT_DIR . '\boards\\' . $this->data['file']['name']); |
|
Вернуться к началу |
|
|
Никита
Зарегистрирован: 24 Окт 2007 14:00:40 Сообщения: 39 Откуда: Новосибирск
|
Добавлено: 12 Ноя 2007 18:35:22 Заголовок сообщения: |
|
|
Я так понимаю, нужен цикл:
Код: | for ($i=0; $i<3; $i++) {
...
} |
Но непонятно вот что:
$this->data['file']['tmp_name'], --> ???
$this->data['form']['name'] --> $this->data['Board']['phone_photo' . $i+1] |
|
Вернуться к началу |
|
|
ztalker
Зарегистрирован: 06 Ноя 2007 14:00:26 Сообщения: 26 Откуда: Новосибирск
|
Добавлено: 13 Ноя 2007 06:22:32 Заголовок сообщения: |
|
|
вьювер:
Код: | for ($i = 1; $i <= 3; $i++) {
echo $html->file('Board/file' . $i);
} |
контроллер:
Код: | $this->Board->upload($this->data); |
модель (данные функции рекомендуется делать именно в модели, а не в контроллере):
Код: | public function upload($data)
{
for ($i = 1; $i <= 3; $i++) {
move_uploaded_file(
$data['Board']['file'.$i]['tmp_name'],
WEBROOT_DIR . DS . 'img' . DS . 'boards' . DS . $data['Board']['file'.$i]['name']
);
}
} |
Используй константу DS вместо слешей.
Естественно в этот код еще необходимо дописать проверки на наличие переданных фалов. _________________ На работу в Новосибирске требуется PHP программист, со знанием CakePHP. Пишите в личку. |
|
Вернуться к началу |
|
|
Никита
Зарегистрирован: 24 Окт 2007 14:00:40 Сообщения: 39 Откуда: Новосибирск
|
Добавлено: 13 Ноя 2007 13:00:10 Заголовок сообщения: |
|
|
Спасибо, позже буду пробовать. Вчера остановился на том, что БД ругалась на то, что отправляется массив вместо адреса картинки. Что, собственно говоря, правильно.
А вот функция Upload меня уже вдохновила. |
|
Вернуться к началу |
|
|
Никита
Зарегистрирован: 24 Окт 2007 14:00:40 Сообщения: 39 Откуда: Новосибирск
|
Добавлено: 15 Ноя 2007 16:31:55 Заголовок сообщения: |
|
|
Да, теперь получается фотку сохранить в нужную дирректорию. Только вот есть проблема с добавлением данных в БД.
Код: | echo $html->file('Board/file' . $i); |
file - это массив, соответственно БД ругается. Как добавить конкретный элемент этого массива?
Последний раз редактировалось: Никита (15 Ноя 2007 17:01:13), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Никита
Зарегистрирован: 24 Окт 2007 14:00:40 Сообщения: 39 Откуда: Новосибирск
|
Добавлено: 15 Ноя 2007 16:32:46 Заголовок сообщения: |
|
|
Код: | Array
(
[Board] => Array
(
[phone_model] =>
[phone_year] =>
[phone_description] =>
[phone_price] =>
[author_name] =>
[author_phone] =>
[author_email] =>
[author_icq] =>
[phone_photo1] => Array
(
[name] => DSCI0022.jpg
[type] => image/jpeg
[tmp_name] => /tmp\php66.tmp
[error] => 0
[size] => 76366
)
)
) |
|
|
Вернуться к началу |
|
|
Никита
Зарегистрирован: 24 Окт 2007 14:00:40 Сообщения: 39 Откуда: Новосибирск
|
Добавлено: 15 Ноя 2007 17:03:31 Заголовок сообщения: |
|
|
Да, всё же на самом деле просто оказалось!
Перед тем, как добавить данные в БД, нужно просто заменить массив phone_photo1 на [name] => DSCI0022.jpg:
Код: | $this->data['Board']['phone_photo1'] = $this->data['Board']['phone_photo1']['name']; |
И только потом
Код: | $this->Board->save($this->data); |
|
|
Вернуться к началу |
|
|
|