За последние 24 часа нас посетили 20293 программиста и 1710 роботов. Сейчас ищет 1961 программист ...

[anlay] Не знаю как прикрепить несколько файлов к форме

Тема в разделе "PHP для новичков", создана пользователем anlay, 18 авг 2016.

  1. anlay

    anlay Новичок

    С нами с:
    4 авг 2016
    Сообщения:
    11
    Симпатии:
    0
    Привет всем! Есть форма для с отправкой нескольких вложений, без js, но снова приходит на почту только последний выбранный файл((( Помогите разобраться люди!!!!
    HTML:
    1. <form action="php/contacts.php" enctype="multipart/form-data" method="POST" id="feedback-form">
    2. <input type="text" name="namesender" id="namesender" required placeholder="Ваше имя/название компании:" x-autocompletetype="name" maxlength="64">
    3. <input name="telsender" id="telsender" required placeholder="Контактный номер" class="required" type="text" x-autocompletetype="tel" maxlength="14">
    4. <input type="text" name="emailsender" id="emailsender" required placeholder="E-mail для связи:" x-autocompletetype="email" maxlength="64">
    5. <textarea name="message" id="message" required rows="5" placeholder="Кратко опишите Ваш проект:"></textarea>
    6. <label class="add-computer-button">
    7. <span class="button">Выбрать</span>
    8. <mark>файл не выбран</mark>
    9. <input type="file" name="file" multiple id="file">
    10. <input type="submit" id="sendMail" name="sendMail" value="Отправить">
    11. </form>
    PHP:
    1. <?php
    2.   $admin = 'mymail@yandex.ru';
    3.   if ( isset( $_SESSION['sendMailForm'] ) ) {
    4.     echo $_SESSION['sendMailForm']['error'];
    5.     $namesender = htmlspecialchars ( $_SESSION['sendMailForm']['namesender'] );
    6.     $telsender = htmlspecialchars ( $_SESSION['sendMailForm']['telsender'] );
    7.     $emailsender = htmlspecialchars ( $_SESSION['sendMailForm']['emailsender'] );
    8.     $message = htmlspecialchars ( $_SESSION['sendMailForm']['message'] );
    9.     unset( $_SESSION['sendMailForm'] );
    10.   } else {
    11.     $namesender  = '';
    12.     $telsender  = '';
    13.     $emailsender   = '';
    14.     $message = '';
    15.   }
    16.   if ( isset( $_POST['sendMail'] ) ) {
    17.     $namesender  = substr( $_POST['namesender'], 0, 64 );
    18.     $telsender  = substr( $_POST['telsender'], 0, 14 );
    19.     $emailsender   = substr( $_POST['emailsender'], 0, 64 );
    20.     $message = substr( $_POST['message'], 0, 350 );
    21.     $error = '';
    22.     if ( empty( $namesender ) ) $error = $error.'<li>Не заполнено поле "Имя/Название компании"</li>';
    23.     if ( empty( $telsender ) ) $error = $error.'<li>Не заполнено поле "Контактный номер"</li>';
    24.     if ( empty( $emailsender ) ) $error = $error.'<li>Не заполнено поле "E-mail"</li>';
    25.     if ( empty( $message ) ) $error = $error.'<li>Не заполнено поле "Сообщение"</li>';
    26.     if ( !empty( $emailsender ) and !preg_match( "#^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,6}$#i", $emailsender ) )
    27.       $error = $error.'<li>поле "E-mail" должно соответствовать формату somebody@somewhere.ru</li>';
    28.     if ( !empty( $error ) ) {
    29.       $_SESSION['sendMailForm']['error']   = '<p>При заполнении формы были допущены ошибки:</p><ul>'.$error.'</ul>';
    30.       $_SESSION['sendMailForm']['namesender']    = $namesender;
    31.       $_SESSION['sendMailForm']['telsender']    = $telsender;
    32.       $_SESSION['sendMailForm']['emailsender']   = $emailsender;
    33.       $_SESSION['sendMailForm']['message'] = $message;
    34.       header( 'Location: '.$_SERVER['PHP_SELF'] );
    35.       die();
    36.     }
    37.     if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
    38.       $filepath = $_FILES['file']['tmp_name'];
    39.       $filename = $_FILES['file']['name'];
    40.     } else {
    41.       $filepath = '';
    42.       $filename = '';
    43.     }
    44.     $body = "ИМЯ:\r\n".$namesender."\r\n\r\n";
    45.     $body .= "ТЕЛЕФОН:\r\n".$telsender."\r\n\r\n";
    46.     $body .= "E-MAIL:\r\n".$emailsender."\r\n\r\n";
    47.     $body .= "СООБЩЕНИЕ:\r\n".$message;
    48.     if ( send_mail($admin, $body, $emailsender, $filepath, $filename) )
    49.       $_SESSION['success'] = true;
    50.     else
    51.       $_SESSION['success'] = false;
    52.     header( 'Location: '.$_SERVER['PHP_SELF'] );
    53.     die();
    54.   }
    55. // Вспомогательная функция для отправки почтового сообщения с вложением
    56. function send_mail($admin, $body, $emailsender, $filepath, $filename)
    57. {
    58.   $subject = '=?utf-8?b?'.base64_encode('Заполнена форма на сайте').'?=';
    59.   $boundary = "--".md5(uniqid(time())); // генерируем разделитель
    60.   $headers = "From: ".strtoupper($_SERVER['SERVER_NAME'])." <".$email.">\r\n";
    61.   $headers .= "Return-path: <".$email.">\r\n";
    62.   $headers .= "MIME-Version: 1.0\r\n";
    63.   $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
    64.   $multipart = "--".$boundary."\r\n";
    65.   $multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
    66.   $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
    67.   $body = quoted_printable_encode( $body )."\r\n\r\n";
    68.   $multipart .= $body;
    69.   if ( !empty( $filepath ) ) {
    70.     $fp = fopen($filepath, "r");
    71.     if ( $fp ) {
    72.       $content = fread($fp, filesize($filepath));
    73.       fclose($fp);
    74.       $file = "--".$boundary."\r\n";
    75.       $file .= "Content-Type: application/octet-stream\r\n";
    76.       $file .= "Content-Transfer-Encoding: base64\r\n";
    77.       $file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    78.       $file .= chunk_split(base64_encode($content))."\r\n";
    79.       $multipart .= $file."--".$boundary."--\r\n";
    80.     }
    81.   }
    82.   if( mail($admin, $subject, $multipart, $headers) )
    83.     return true;
    84.   else
    85.     return false;
    86. }
    87. if (!function_exists('quoted_printable_encode'))
    88. {
    89. function quoted_printable_encode ( $string )
    90. {
    91.    // rule #2, #3 (leaves space and tab characters in tact)
    92.    $string = preg_replace_callback (
    93.      '/[^\x21-\x3C\x3E-\x7E\x09\x20]/',
    94.      'quoted_printable_encode_character',
    95.      $string
    96.      );
    97.    $newline = "=\r\n"; // '=' + CRLF (rule #4)
    98.    // make sure the splitting of lines does not interfere with escaped characters
    99.    // (chunk_split fails here)
    100.    $string = preg_replace ( '/(.{73}[^=]{0,3})/', '$1'.$newline, $string);
    101.    return $string;
    102. }
    103. }
    104. function quoted_printable_encode_character ( $matches ) {
    105. $character = $matches[0];
    106. return sprintf ( '=%02x', ord ( $character ) );
    107. }
    108. if ( isset( $_SESSION['success'] ) ) {
    109.   if ( $_SESSION['success'] )
    110.     header( 'refresh: 0; url=http://test.adtc-spb.ru' );
    111.   else
    112.    echo '<p>Ошибка при отправке письма</p>';
    113. }
    114. ?>
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Там у формы файла, разве имя не должно быть указано как массив? Например file[]