Перейти к содержанию
hon2012

Загрузка файла в форме обратной связи

Рекомендуемые сообщения

Перерыл все, но решения вопроса о прикреплении файла к письму в форме обратной связи так и не нашел.

Помогите кто знает. Как добавить на страницу /index.php?route=information/contact кнопку "Загрузить файл", который будет как приаттаченый доставляться вместе с письмом.

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делал такое. Только не в стандартном шаблоне. Опишу.

В файле шаблона добавить:

<div><b>Картинка</b></div>
<input type="file" name="image1" accept="image/*" value="" />
Это чтоб добавилось поле вывода картинки в контактах.

В контроллере после

if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
добавить:

@mkdir("files", 0777);
$size1 = filesize ($_FILES['image1']['tmp_name']);
copy($_FILES['image1']['tmp_name'],"files/".basename($_FILES['image1']['name']));

Формируем html-письмо

перед строкой:

$mail->setText
добавляем, например (это я так формировал, у вас будет отличаться):

$html .= (strip_tags(html_entity_decode($this->request->post['name'], ENT_QUOTES, 'UTF-8')));
$html .= "</p><p>Телефон: ";
$html .= (strip_tags(html_entity_decode($this->request->post['phone'], ENT_QUOTES, 'UTF-8')));
$html .= "</p><p>Желаемая цена: ";
$html .= (strip_tags(html_entity_decode($this->request->post['price'], ENT_QUOTES, 'UTF-8')));
$html .= " грн.</p><p>Комментарий: ";
$html .= (strip_tags(html_entity_decode($this->request->post['enquiry'], ENT_QUOTES, 'UTF-8')));
$html .= "<p><a href=путь к files".basename($_FILES['image1']['name']).">Картинка 1</a></p>"; //если в письмо вставлять картинку ссылкой;
$html .= "<img src=путь к files".basename($_FILES['image1']['name']).">"; //если вставлять картинкой;
$mail->setHtml($html);
Далее после:

if (isset($this->request->post['phone'])) {
$this->data['phone'] = $this->request->post['phone'];
} else {
$this->data['phone'] = '';
Добавить:

if (isset($this->request->post['image1'])) {
$this->data['image1'] = $this->request->post['image1'];
} else {
$this->data['image1'] = '';
}
На 100% с вашим случаем может не совпадать. Но, думаю, пинок в нужную сторону. Описано для картинки. Для любого файла - убрать accept="image/*" в input'e

Для аттача файла можно не переделывать письмо под html-версию. Тогда в формировании письма дописать что-то типа "$mail->addAttachment($this->request->post['image1']);"

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Перерыл все, но решения вопроса о прикреплении файла к письму в форме обратной связи так и не нашел.

Помогите кто знает. Как добавить на страницу /index.php?route=information/contact кнопку "Загрузить файл", который будет как приаттаченый доставляться вместе с письмом.

Спасибо.

Вот модуль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так вижу что данным способом посетитель может прикрепить только картинку? А как сделать чтоб он любой файл мог прикрепить??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я же писал. "Для любого файла - убрать accept="image/*" в input'e"

А имя image1 - дык это любое имя, переименуйте на file1, upload_file, или на что пожелаете

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подниму темку.

Как бы все работает, но вот картинка не открывается.

да и хотелось бы архив .zip чтобы можно было прикрепить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

R1peR, подскажите, пожалуйста, как сформировать html - письмо админу из формы обратной связи? Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делал такое. Только не в стандартном шаблоне. Опишу.

В файле шаблона добавить:

<div><b>Картинка</b></div>
<input type="file" name="image1" accept="image/*" value="" />
Это чтоб добавилось поле вывода картинки в контактах.

В контроллере после

if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
добавить:

@mkdir("files", 0777);
$size1 = filesize ($_FILES['image1']['tmp_name']);
copy($_FILES['image1']['tmp_name'],"files/".basename($_FILES['image1']['name']));
Формируем html-письмо

перед строкой:

$mail->setText
добавляем, например (это я так формировал, у вас будет отличаться):

$html .= (strip_tags(html_entity_decode($this->request->post['name'], ENT_QUOTES, 'UTF-8')));
$html .= "</p><p>Телефон: ";
$html .= (strip_tags(html_entity_decode($this->request->post['phone'], ENT_QUOTES, 'UTF-8')));
$html .= "</p><p>Желаемая цена: ";
$html .= (strip_tags(html_entity_decode($this->request->post['price'], ENT_QUOTES, 'UTF-8')));
$html .= " грн.</p><p>Комментарий: ";
$html .= (strip_tags(html_entity_decode($this->request->post['enquiry'], ENT_QUOTES, 'UTF-8')));
$html .= "<p><a href=путь к files".basename($_FILES['image1']['name']).">Картинка 1</a></p>"; //если в письмо вставлять картинку ссылкой;
$html .= "<img src=путь к files".basename($_FILES['image1']['name']).">"; //если вставлять картинкой;
$mail->setHtml($html);
Далее после:

if (isset($this->request->post['phone'])) {
$this->data['phone'] = $this->request->post['phone'];
} else {
$this->data['phone'] = '';
Добавить:

if (isset($this->request->post['image1'])) {
$this->data['image1'] = $this->request->post['image1'];
} else {
$this->data['image1'] = '';
}
На 100% с вашим случаем может не совпадать. Но, думаю, пинок в нужную сторону. Описано для картинки. Для любого файла - убрать accept="image/*" в input'e

Для аттача файла можно не переделывать письмо под html-версию. Тогда в формировании письма дописать что-то типа "$mail->addAttachment($this->request->post['image1']);"

 

 

Спасибо за решение, оч. помогло

 

Вот только появились ошибки вида:

 

Warning: Cannot modify header information – headers already sent by (output started at /home

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за решение, оч. помогло

 

Вот только появились ошибки вида:

 

Warning: Cannot modify header information – headers already sent by (output started at /home

 

решил проблему с Warning, добавив ob_start(); в начало файла index.php (тот что в корне)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы еще даете возможность загружать пользователям файлы на сервер.

Ну, ну... потом не спрашивайте почему вас взломали, это только вопрос времени

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы еще даете возможность загружать пользователям файлы на сервер.

Ну, ну... потом не спрашивайте почему вас взломали, это только вопрос времени

Так предложите другое решение

 

А если прописать @mkdir("files", 0766); вместо @mkdir("files", 0777); 

и поставить 766 на директорию /files/

Это решит проблему безопасности?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так предложите другое решение

 

А если прописать @mkdir("files", 0766); вместо @mkdir("files", 0777); 

и поставить 766 на директорию /files/

Это решит проблему безопасности?

 

Нет, хакер может перехватить имя файла через дыры сервера, даже не движка

Единственное решение - ссылка на сервисы  разного рода хранения файлов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

...

Единственное решение - ссылка на сервисы  разного рода хранения файлов

 
А как реализовать, можно рабочий пример?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

 
А как реализовать, можно рабочий пример?

 

В форме обратной связи добавить поле - ссылка на файл и всё

Для форм обратных связей можно использовать модуль SEO CMS 5 PRO

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.