Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Скрипт формы обратной связи с вложением файла?

Скрипт формы обратной связи с вложением файла?


     09.03.2018    php, html    Все вопросы » Общие вопросы по PHP    5063

вопрос
Здравствуйте! Нашла скрипт, переделала под себя. Но не могу понять как сделать прикрепление не одного файла, а нескольких. Что уже только не делала- не получается.
Сама форма:
<form method="post" action="phMailer.php" enctype='multipart/form-data'>
        <p>Фамилия:</p>
		<input type="text" name="fam" title="Введите ваше имя" required/>
	    <p>Имя:</p>
		<input type="text" name="name" title="Введите ваше имя" required/>
        <p>Отчетство:</p>
		<input type="text" name="otch" required/>
        <p>Дата рождения:</p>
		<input type="date" name="date" required/>
        <p>СНИЛС:</p>
		<input type="text" name="snils" required/>
	    <p>Электронная почта:</p>
		<input type="text" name="email" pattern="^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$" required/>
	    <p>Адрес регистрации по месту жительства:</p>
		<input type="text" name="adres" required/>
        <p>Прикрепить фото или скан СНИЛС:</p>
    <input type="file" name="mail_file[]"  maxlength="64">
      <p>Прикрепить фото или скан паспорта:</p>
    <input type="file" name="mail_file[]"  maxlength="64">
      <p>Прикрепить фото или скан диплома:</p>
    <input type="file" name="mail_file[]"  maxlength="64"><br><br>
	<input type="submit" value="Отправить" />
</form>

Обработчик:
<?php
if (isset($_POST['fam'])) {$fam = $_POST['fam'];}
if (isset($_POST['name'])) {$name = $_POST['name'];}
if (isset($_POST['otch'])) {$otch = $_POST['otch'];}
if (isset($_POST['date'])) {$data = $_POST['date'];}
if (isset($_POST['snils'])) {$snils = $_POST['snils'];}
if (isset($_POST['email'])) {$email = $_POST['email'];}
if (isset($_POST['adres'])) {$adres = $_POST['adres'];}
$picture = ""; 
 
 function send_mail($to, $subject, $html, $path) 

  { 

    $fp = fopen($path,"r"); 

    if (!$fp) 

    { 

      print "Файл $path не может быть прочитан"; 

      exit(); 

    } 

    $file = fread($fp, filesize($path)); 

    fclose($fp); 

    

    $boundary = "--".md5(uniqid(time())); // генерируем разделитель 

    $headers .= "MIME-Version: 1.0\n"; 

    $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; 

    $multipart .= "--$boundary\n"; 

    $kod = 'utf-8'; // или $kod = 'windows-1251'; 

    $multipart .= "Content-Type: text/html; charset=$kod\n"; 

    $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; 

    $multipart .= "$html\n\n"; 



    $message_part = "--$boundary\n"; 

    $message_part .= "Content-Type: application/octet-stream\n"; 

    $message_part .= "Content-Transfer-Encoding: base64\n"; 

    $message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n"; 

    $message_part .= chunk_split(base64_encode($file))."\n"; 

    $multipart .= $message_part."--$boundary--\n"; 



    if(!mail($to, $subject, $multipart, $headers)) 

    { 

      echo "К сожалению, письмо не отправлено"; 

      exit(); 

    } 

  } 
   
function clear_data($vvod)
{
return trim(strip_tags($vvod));	
}
$fam = clear_data($_POST['fam']);
$name =  clear_data($_POST['name']);
$otch =  clear_data($_POST['otch']);
$date =  clear_data($_POST['date']);
$snils =  clear_data($_POST['snils']);
$email = clear_data($_POST['email']);
$adres =  clear_data($_POST['adres']);

$to = "$email";// Переменная to равна переменной email, т.е. файл будет отправляться на тот адрес, который будет вбит в форму.
$headers = "Content-type: text/plain; charset = utf-8"; 
$subject = "Заявка для ответственного по БДД";
$message = "Фамилия: $fam \nИмя: $name \nОтчетство: $otch \nДата рождения: $date \nСНИЛС: $snils \nЭлектронная почта: $email \nАдрес по месту жительства: $adres";
  if (!empty($_FILES['mail_file']['tmp_name'])) 

  { 

    // Закачиваем файл 

    $path = $_FILES['mail_file']['name']; 

    if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path; 

  } 

if(empty($picture))
{
				$send = mail ($to, $subject, $message, $headers);
					if ($send == "true")
					{
					echo "Спасибо за отправку Вашего сообщения.<br>\n";
					echo "<a href=index.html>Вернуться на страницу с описанием</a><br>\n";
					}
						else 
						{
						echo "Сообщение не отправлено. Приносим свои извинения. Видимо сервер не может обработать ваше сообщение, скопируйте этот email Vasia@mail.ru и отправьте из своей почты. ";
						}
				}

else
{
			 	send_mail($to, $subject, $message, $picture); 
			 	echo "Письмо отправлено!"; 
			 	echo "<a href=7-Prikrepit-fail-k-forme.html>Вернуться на страницу описания</a>";
				}

?>

Все отправляется. Но приходит только один файл. А нужно 3. Подскажите пожалуйста как реализовать.

Ответа пока нет


3 комментария

subone
Юзер

subone - 9 марта 2018 17:53 -

в dle есть уже родная функция отправки файлов
Непосредственно для прикрепления файлов к форме вы можете использовать тег:

<input name="attachments[]" type="file" multiple>

при этом имя тега и количество тегов может быть любым, главное это использование type="file" в атрибуте. DLE сам посчитает все прикреплённые к письму файлы и их соответствие настройкам групп.

зачем вы используете стороннию???

tata_m9
Юзер

tata_m9 - 10 марта 2018 16:03 -

Разобралась, сделала, но немного по-другому. Теперь назрела проблема : хочу задать определенный тип загружаемым файлам, а именно: jpg,pdf,gif,png,jpeg.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<? 

 $picture = "";
 $picture2 = "";
 $picture3 = "";
  // Если поле выбора вложения не пустое - закачиваем его на сервер
  if (!empty($_FILES['mail_file']['tmp_name']) && !empty($_FILES['mail_file2']['tmp_name']) && !empty($_FILES['mail_file3']['tmp_name']))
  {
    // Закачиваем файл
    $path = "zav/".$_FILES['mail_file']['name'];
    $path2 = "zav/".$_FILES['mail_file2']['name'];
      $path3 = "zav/".$_FILES['mail_file3']['name'];
    if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path;
    if (copy($_FILES['mail_file2']['tmp_name'], $path2)) $picture2 = $path2;
        if (copy($_FILES['mail_file3']['tmp_name'], $path3)) $picture3 = $path3;

  }

function clear_data($vvod)
{
return trim(strip_tags($vvod));	
}
$fam = clear_data($_POST['fam']);
$name =  clear_data($_POST['name']);
$otch =  clear_data($_POST['otch']);
$date =  clear_data($_POST['date']);
$snils =  clear_data($_POST['snils']);
$email = clear_data($_POST['email']);
$adres =  clear_data($_POST['adres']);


  $thm = "Заявка для ответственного по БДД";
  $msg = "<p><font face=Verdana, Arial, Helvetica, sans-serif size=+1 color=#003366>Информация о поступившей заявке:</font></p>
<p><font face=Verdana, Arial, Helvetica, sans-serif size=-1 color=#333333>
Фамилия: $fam <br> \nИмя: $name <br> \nОтчетство: $otch <br> \nДата рождения: $date <br>\nСНИЛС: $snils <br> \nЭлектронная почта: $email <br> \nАдрес по месту жительства: $adres";
  $mail_to = "anya.prid@mail.ru";
  // Отправляем почтовое сообщение
  if(empty($picture)) mail($mail_to, $thm, $msg);
  else send_mail($mail_to, $thm, $msg, $picture, $picture2,$picture3);
  // Вспомогательная функция для отправки почтового сообщения с вложением
  function send_mail($to, $thm, $html, $path, $path2, $path3)
  {
    $fp = fopen($path,"r");
    if (!$fp)
    {
      print "Файл $path не может быть прочитан";
      exit();
    }
    $file = fread($fp, filesize($path));
    fclose($fp);
    $fp2 = fopen($path2,"r");
    if (!$fp2)
    {
      print "Файл $path2 не может быть прочитан";
      exit();
    }
    $file2 = fread($fp2, filesize($path2));
    fclose($fp2);
  
$fp3 = fopen($path3,"r");
    if (!$fp3)
    {
      print "Файл $path3 не может быть прочитан";
      exit();
    }
    $file3 = fread($fp3, filesize($path3));
    fclose($fp3);

    $boundary = "--".md5(uniqid(time())); // генерируем разделитель
    $headers .= "MIME-Version: 1.0\n";
    $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    $multipart .= "--$boundary\n";
    $kod = 'utf-8';
    $multipart .= "Content-Type: text/html; charset=$kod\n";
    $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
    $multipart .= "$html\n\n";
    $message_part = "--$boundary\n";
    $message_part .= "Content-Type: application/octet-stream\n";
    $message_part .= "Content-Transfer-Encoding: base64\n";
    $message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n";
    $message_part .= chunk_split(base64_encode($file))."\n";
    $message_part .= "--$boundary\n";
    $message_part .= "Content-Type: application/octet-stream\n";
    $message_part .= "Content-Transfer-Encoding: base64\n";
    $message_part .= "Content-Disposition: attachment; filename = \"".$path2."\"\n\n";
    $message_part .= chunk_split(base64_encode($file2))."\n";
     $message_part .= "--$boundary\n";
    $message_part .= "Content-Type: application/octet-stream\n";
    $message_part .= "Content-Transfer-Encoding: base64\n";
    $message_part .= "Content-Disposition: attachment; filename = \"".$path3."\"\n\n";
    $message_part .= chunk_split(base64_encode($file3))."\n";
  
    $multipart .= $message_part."--$boundary--\n";

    
  //  if(!mail($to, $thm, $multipart, $headers))
  //  {
  //    echo "К сожалению, письмо не отправлено";
  //    exit();
  //  }
 // }
  if(!mail($to, $thm, $multipart, $headers)) 

    { 

      echo "К сожалению, письмо не отправлено"; 

      exit(); 

    } 

  } 
  if(empty($picture))
{
				$send = mail ($to, $thm, $msg, $headers);
					if ($send == "true")
					{
					echo "Спасибо за отправку Вашего сообщения.<br>\n";
					echo "<a href=index.html>Вернуться на страницу с описанием</a><br>\n";
					}
						else 
						{
						echo "Сообщение не отправлено. Приносим свои извинения. Видимо сервер не может обработать ваше сообщение, скопируйте этот email Vasia@mail.ru и отправьте из своей почты. ";
						}
				}

else
{
			 	send_mail($to, $thm, $msg, $picture, $picture2, $picture3); 
			 	echo "Заявка отправлена!"; 
			 	echo "<a href=mailtest.php>Вернуться назад</a>";
				 
				}
				exit();
  
?>
</head>
</html>

Код вышел такой. Как я понимаю мне нужно добавить $_FILES['mail_file']['type'];, но не знаю как именно прописать данные расширения для всех 3 файлов. Подскажите пожалуйста, если можете.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх