Вернуться   Дизайнерский форум » ВЕБ-ПРОГРАММИРОВАНИЕ » ASP, Perl, PHP и MySQL

Прикрепить файл к форме заказа

Обсуждение темы Прикрепить файл к форме заказа в разделе ASP, Perl, PHP и MySQL, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; Здравствуйте, уважаемые специалисты. Опять у меня вопросы. Есть форма - анкета на вакансию, где помимо прочего хочется, чтобы заполняющий мог отправить свое фото. ...


Закрытая тема
 
Опции темы
Старый 19.07.2007, 10:50   #1
Здравствуйте, уважаемые специалисты. Опять у меня вопросы.
Есть форма - анкета на вакансию, где помимо прочего хочется, чтобы заполняющий мог отправить свое фото.
Я честно пытаюсь сама разобраться. Поняла, что нужно тип содержимого письма менять на multipart. Но может у кого ссылка для чайников есть, либо простейший алгоритм.
(с формой без аттачмента я вроде уже неплохо разобралась, и проверки все делаются, короче - работает) Спасибо.
 
Старый 19.07.2007, 10:50
Ссылки
Старый 24.07.2007, 00:26   #2
вопрос меняется. С основами стандарта MIME я разобралась. Теперь вот что, почтовике сообщение отображается фигово. Т.е. виден тот самый текст, который не должен быть виден (типа, "если вы это читаете, то ваш почтовик не поддерживает MIME стандарт. смените его%)" И соответственно, текст сообщения - не в html, картинки нет.
Проверяла на localhost'e (денвер).
Почтовик - автоматически запускается Outlook Express 6.0.

Вот код:
PHP код:
    $to "[email protected] "
    
$subject ="Анкета ({$_POST['vacancy']})";
    
$boundary_name="X_".md5(uniqid(time()));
    
$header ="From: $name <$email>\r\n";
    
$header .= "X-Mailer: PHPMail Tool\r\n"
    
$header .= "MIME-Version: 1.0\r\n";
    
$header .= "Content-Type: multipart/mixed; boundary=" $boundary_name "\r\n";  
    
$message "This part of the E-mail should never be seen. If you are reading this, consider upgrading your e-mail client to a MIME-compatible client.\r\n\r\n";
    
$message .= "--".$boundary_name."\r\n"
    
$message .= "Content-Type: text/html; charset=\"windows-1251\"\r\n"
    
$message .= "Content-Transfer-Encoding: quoted-printable\r\n";
    
$message .= "Здесь идет текст в формате html";

//Загружаемый файл - $photofile
  
if ($photofile!="") {
    
$f fopen($photofile,"rb"); 
    
$message .= "--".$boundary_name."\r\n"
    
$message .= "Content-Type: application/octet-stream;"
    
$message .= "name=\"".basename($photofile)."\"\r\n"
    
$message .= "Content-Transfer-Encoding:base64\r\n"
    
$message .= "Content-Disposition:attachment;"
    
$message .= "filename=\"".basename($photofile)."\"\r\n"
    
$message .= chunk_split(base64_encode(fread($f,filesize($photofile))))."\r\n";
    
$message .= "\r\n"
    }
    
    
$message .= "--".$boundary_name."--\r\n";

    
mail($to$subject$message$header); 
 
Старый 24.07.2007, 07:53   #3
Ну, это всё потому, что, хоть вы и почитали что-то про стандарт MIME, читали, видимо, плохо и невнимательно.

После текста сообщения (и перед очередной частью MIME-сообщения) нужно поставить перевод строки, то есть вместо
Код:
$message .= "Здесь идет текст в формате html";
должно быть:
Код:
 $message .= "Здесь идет текст в формате html\r\n";
А после заголовков каждой части MIME-сообщения должна стоять пустая строка, то есть
Код:
$message .= "Content-Transfer-Encoding: quoted-printable\r\n";
меняем на
Код:
$message .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
А
Код:
$message .= "filename=\"".basename($photofile)."\"\r\n";
меняем на
Код:
$message .= "filename=\"".basename($photofile)."\"\r\n\r\n";
Тогда и показываться начнёт.

deMone добавил [date]1185249395[/date]:
Обязательно читать: RFC 2822 — Формат интернет-сообщений, RFC1521 — MIME
 
Старый 24.07.2007, 12:01   #4
Спасибо!!!!! А то уже голову сломала совсем. Под шум снующих детей пыталась вчера вникнуть в спецификацию по RFC1521... А ведь читала там про переводы строк, да видно недопоняла... Спасибо еще раз.
Теперь буду разбираться с самим аттачментом. Но это уже легче, когда проблема ВИДНА.
 
Старый 25.07.2007, 15:01   #5
Можно еще вопрос?
Сделала я, чтобы фото отправлялось, но при получении письма файл пустой. При проверке: print_r($_FILES); выдает примерно следующее:

Array ( [photo] => Array ( [name] => Image3.JPG [type] => image/pjpeg [tmp_name] => /tmp\phpF3.tmp [error] => 0 [size] => 161669 )

Т.е., как я понимаю, в обращении к этому временному файлу. Там слеши в разные стороны. Я пробовала функцию:
PHP код:
if (isset($_ENV['WINDIR'])) {
    
$photo str_replace("\\\\","\\",$_FILES['photo']['name']);

Но результат без изменения.

Аттачмент обрабатывается таким кодом:
PHP код:
    $photo_name $_FILES['photo']['name']; 
    if (
copy($_FILES['photo']['tmp_name'], $photo_name)) $picture $photo_name
    
$fp fopen($photo_name,"r"); 
    if (!
$fp) { 
      print 
"Файл $photo_name не может быть прочитан"
      exit(); 
    } 
    
$file fread($fpfilesize($photo_name)); 
    
fclose($fp); 
    
    
$message .= "--".$boundary_name."\r\n"
    
$message .= "Content-Type: application/octet-stream;"
    
$message .= "Content-Transfer-Encoding:base64\r\n"
    
$message .= "Content-Disposition:attachment;"
    
$message .= "filename=\"".$photo_name."\"\r\n\r\n"
    
$message .= chunk_split(base64_encode($file)). "\r\n";
    
$message .= "--".$boundary_name."--\r\n"
 
Старый 25.07.2007, 16:22   #6
Просто укажите в качестве filename="…" собственное (фиксированное) имя файла. Не стоит брать имя, полученное от пользователя.
 
Старый 25.07.2007, 17:29   #7
Не, не катит. Имя файла то приходит нормальное, даже русскими буквами, если надо, и в скобках размер, как положено. Только вот размер файла чуть больше оригинала (процентов на 5-10) и во вьювере не читается, пишет "Просмотр недоступен".

И все-таки, как быть с ошибкой в темповсокм имени файла:
[tmp_name] => /tmp\phpF3.tmp [error]

Про [error] нашла. С этим все в порядке. Это, оказывается, 5-й параметр массива $_FILES. У меня [error] => 0, что означает "Ошибок не возникало, файл был успешно загружен на сервер."
Значит ищем дальше.
 
Старый 26.07.2007, 07:47   #8
Цитата:
И все-таки, как быть с ошибкой в темповсокм имени файла
Это не ошибка, это нормальное поведение Windows.
 
Старый 26.07.2007, 12:01   #9
Про [error], как уже дописала, разобралась. И с файлом тоже.
Окончательный вариант:
PHP код:
    $to "[email protected]"
    
$subject "Анкета";
    
$boundary_name="X_".md5(uniqid(time()));
    
$header ="From: $name [$email]\r\n";
    
$header .= "MIME-Version: 1.0 \r\n";
    
$header .= "Content-Type: multipart/mixed;"
    
$header .= "boundary=\"".$boundary_name."\"\r\n\r\n";  
    
$message "This part of the E-mail should never be seen. If you are reading this, consider upgrading your e-mail client to a MIME-compatible client.\r\n\r\n";
    
$message .= "--".$boundary_name."\r\n"
    
$message .= "Content-Type: text/html; charset=\"windows-1251\"\r\n"
    
$message .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
    
$message .= "Это наша анкета\r\n";

//Обрабатываем приложенный файл $photo
    
$photo_name $_FILES['photo']['name']; 
     
$fp fopen($photo,"r"); 
    
$file fread($fp,filesize($photo));
    
fclose($fp);

    
$message .= "--".$boundary_name."\r\n"
    
$message .= "Content-Type: application/octet-stream;;"
    
$message .= "name=\"".$photo_name."\"\r\n"
    
$message .= "Content-Transfer-Encoding:base64\r\n"
    
$message .= "Content-Disposition:attachment;"
    
$message .= "filename=\"".$photo_name."\"\r\n\r\n"
    
$message .= chunk_split(base64_encode($file))."\r\n";
    
$message .= "--".$boundary_name."--\r\n";
    
    
mail($to$subject$message$header); 
Интересная штука - программирование. Вроде к этому коду я раз 10 возвращалась и каждый раз были те или иные косяки. Потом меняла все напрочь, заменяла целые куски... И вот - все тот же код. Конечно, может там запятую пропускала где-то, может что еще, но мне проще заново написать, чем выискивать ошибки, как оказалось.
 
Старый 26.07.2007, 12:01
Закрытая тема




Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
форма заказа DeCa ASP, Perl, PHP и MySQL 2 30.03.2010 07:10
Нужно прикрепить сверстанный дизайн на сайт Sanrise Вакансии 0 09.09.2008 03:01
Партнерка с 50% от суммы заказа VictorS Кальянная 10 26.02.2008 01:53
форма заказа TaniKa HTML, CSS, JavaScript 8 02.09.2005 14:06


Текущее время: 21:40. Часовой пояс GMT +4.

Реклама на форуме Условия размещения рекламы
Биржа ссылок Заработай на сайте!
Дизайнерский форум