Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Форма обратной связи с прикреплением файла 
:(
    Опции темы
avadmarkgmail
Дата 2.4.2016, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.4.2016

Репутация: нет
Всего: нет



Доброго времени суток.
Помогите пожалуйста разобраться. Сам уже закипаю. smile 
Что необходимо: На сайте в форме обратной связи добавить возможность прикрепления файлов.
Отсылать сообщение на почту с прикрепленными файлами.
Что есть: Сайт на Perl, БД MySQL
На сколько я понимаю: необходимо в таблицу БД добавить поле с типом mediumBlob. Из формы на сайте записывать файл в БД. А потом отправлять сообщение на почту?

Что у меня не так, помогите. Про что я забыл.  

Код

<form name="feedback" method="post">    
<input type="hidden" name="order" value="1" />                      
<table width="100%" cellpadding="0" cellspacing="0" id="contact">
    
    <tr>
        <th colspan="2"><label for="topic"><TMPL_VAR TEXT_FORM_TOPIC>&nbsp;<img src="/images/star.gif" width="5" height="10" alt="" /></label></td>
    </tr>
    <tr>
        <td colspan="2">
            <TMPL_IF TOPICS_LIST>
                <select name="topic" id="topic">
                    <TMPL_LOOP TOPICS_LIST>
                    <option value="<TMPL_VAR NAME ESCAPE=HTML>"><TMPL_VAR NAME></option>
                    </TMPL_LOOP>
                </select>
            <TMPL_ELSE>
                <input type="hidden" name="topic" value="<TMPL_VAR TOPIC_VALUE ESCAPE=HTML>" />
            </TMPL_IF>
        </td>
    </tr>
    
    <tr>
        <th colspan="2"><label for="topic"><TMPL_VAR TEXT_FORM_RESPONSE>&nbsp;<img src="/images/star.gif" width="5" height="10" alt="" /></label></td>
    </tr>
    <tr>
        <td colspan="2">
            <select name="type">
                <option value="electronic"><TMPL_VAR TEXT_ELECTRO_FORM ></option>
                <option value="written"><TMPL_VAR TEXT_WRITING_FORM ></option>
            </select>
        </td>
    </tr>
    <tr>
        <th colspan="2"><label for="message"><TMPL_VAR TEXT_FORM_MESSAGE>&nbsp;<img src="/images/star.gif" width="5" height="10" alt="" /></label></th>
    </tr>
    <tr>
        <td colspan="2"><textarea  name="message" maxlength="10000" rows="8" id="message"><TMPL_VAR INP_MESSAGE ESCAPE=HTML></textarea></td>
    </tr>
    <tr>
        <td colspan="2"><label for="filename"><TMPL_VAR TEXT_FORM_FILE_NAME><br /> <input type="file" name="file_name"> </label></td>
    </tr> 
    <tr>
        <th width="50%" ></td>
        <th width="50%" >
            <label for="email"><TMPL_VAR TEXT_CAPTCHA>&nbsp;<img src="/images/star.gif" width="5" height="10" alt="" /></label>
        </td>
    </tr>
    <tr>
        <td>
            <img src="/images/captcha/<TMPL_VAR CODE>.png" alt="" />
        </td>
        <td>
            <input type="Text" name="code"  maxlength="50" id="code" value="<TMPL_VAR ESCAPE=HTML CGI_CODE >" />
            <input type="hidden" name="check_code" value="<TMPL_VAR CODE>" />    
        </td>
    </tr>
    <tr>
        <td colspan="2" class="button"><input name="order" type="image" <TMPL_VAR TEXT_SEND_IMG> style="width: 80px;" /></td>
    </tr>

</table>    
</form>  


Код

sub save_feedback {
    my $self = shift;
    my %col  = @_;

    my $id = sh_dblib::newID(
        $self->dbh,
        'sh_feedbacks',
        [qw(id ip name email subject content topicid unread to_mail user_id type lastname file_name)],
        [
            $ENV{REMOTE_ADDR},
            $col{name} || '',
            $col{email},
            $col{topic},
            $col{message},
            $self->topicid,
            1,
            $col{to_mail},
            $col{user_id},
            $col{type},
            $col{lastname},
            $col{file_name}
            
        ],8
    );
    return $id;
}


Код

sub send_feedback {
    my $self = shift;
    my $template = shift;
    my %param = @_;
    
    my %param = reverse @_;
        %param = reverse %param;


    $self->mail_template('modules/emails/' . $template);
    $self->param(%param); $self->param(IP => $ENV{REMOTE_ADDR});
    $self->mail();
    $self->__redirect($self->param('TOPIC_INFO_URL') . 'ok') unless $param{no_redirect};
}



PM MAIL   Вверх
igorold
Дата 3.4.2016, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



А что не получается?
Во-вторых, файл не обязательно в базу пихать, можно во временные папки записывать.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
avadmarkgmail
Дата 4.4.2016, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.4.2016

Репутация: нет
Всего: нет



Не получается: файл не записывается в БД.
А что более правильно, писать в БД или во временные папки? Есть необходимость хранения истории вложенных файлов.
Данной формой пользуются порядком 10 в день.


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
igorold
Дата 4.4.2016, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



Добавь строку  enctype="multipart/form-data"  в тег <form :
Код

<form name="feedback" method="post" enctype="multipart/form-data">
 

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
igorold
Дата 4.4.2016, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



Насчет правильности - для каждого случая свой вариант.
Я записываю файлы в папки и привязываю к нужной табличке имя файла, имя папок расчетное, чтобы в одной папке не было слишком много файлов, т.к. на сервере у меня red hat

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
avadmarkgmail
Дата 6.4.2016, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.4.2016

Репутация: нет
Всего: нет



Выдает ошибку:
CGI.pm open of tmpfile /var/tmp/CGItemp7473/Gica.png failed: Read-only file system

Я так понимаю, необходимо открыть доступ к папке /var/tmp/CGItemp7473/ на запись.
Получается файл при добавлении в бд пишется в эту папку а потом только происходит сохранение его?

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
igorold
Дата 6.4.2016, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



да, нужно дать права для всех rwx для папки /var/tmp/CGItemp7473/

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
igorold
Дата 7.4.2016, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



Хотя у меня какие-то временные файлы пишутся в /var/tmp ... без промежуточных файлов.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
avadmarkgmail
Дата 7.4.2016, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.4.2016

Репутация: нет
Всего: нет



Возникла еще одна проблема. Хостинг является защищенным, поэтому прав на /var/tmp никаких нету. Можно ли как-то поменять что бы файл заливался на /home/sites/ вместо /var/tmp?

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
igorold
Дата 7.4.2016, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



скорее всего с админами хостинга надо консультироваться.
На нашем сервере для /var/tmp - все права для всех.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.1361 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.