За последние 24 часа нас посетили 62163 программиста и 1794 робота. Сейчас ищут 832 программиста ...

Прикрепление файла, помогите!)

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

  1. Rayder7235

    Rayder7235 Новичок

    С нами с:
    17 авг 2017
    Сообщения:
    9
    Симпатии:
    1
    Доброго времени суток!
    Я начинающий в php, прошу Вашей помощи, если не трудно.

    Ниже код, 16 строка, помогите переписать заново.
    Код сделан на то, что бы можно было прикреплять в обратной связи несколько файлов.
    Код:

    PHP:
    1. <?php
    2. $to = 'Rayder7235@gmail.com';
    3.  
    4. if ( isset( $_POST['sendMail'] ) ) {
    5.     $name    = substr( $_POST['name'], 0, 64 );
    6.     $tel = substr( $_POST['tel'], 0, 64 );
    7.     $email     = substr( $_POST['email'], 0, 64 );
    8.     $message = substr( $_POST['message'], 0, 250 );
    9.  
    10. if($_FILES)
    11. {
    12.     $filepath = array();
    13.     $filename = array();
    14.     $file2 = array();
    15.     $i = 0;
    16.          foreach ($_FILES["file"]["error"] as $key => $error) {
    17.             if ($error == UPLOAD_ERR_OK) {
    18.                 $filename[$i][0] = $_FILES["file"]["tmp_name"][$key];
    19.                 $filename[$i][1] = $_FILES["file"]["name"][$key];
    20.                 $i++;
    21.             }
    22.         }
    23.     }
    24.  
    25.  
    26.     $body = "Имя:\r\n".$name."\r\n\r\n";
    27.   $body .= "Контактный номер:\r\n".$tel."\r\n\r\n";
    28.   $body .= "E-mail:\r\n".$email."\r\n\r\n";
    29.   $body .= "Жалоба:\r\n".$message;
    30.     send_mail($to, $body, $email, $filename);
    31. }
    32.  
    33.  
    34.  
    35.  
    36. // Вспомогательная функция для отправки почтового сообщения с вложением
    37. function send_mail($to, $body, $email, $filename)
    38. {
    39.   $subject = 'Новая жалоба в Scooter-Sale!';
    40.   $boundary = "--".md5(uniqid(time())); // генерируем разделитель
    41.     $headers = "From: ".$email."\r\n";  
    42.     $headers .= "MIME-Version: 1.0\r\n";
    43.     $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
    44.     $multipart = "--".$boundary."\r\n";
    45.     $multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
    46.     $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
    47.  
    48.     $body = $body."\r\n\r\n";
    49.     $multipart .= $body;
    50.     foreach ($filename as $key => $value) {
    51.         $fp = fopen($value[0], "r");
    52.         $content = fread($fp, filesize($value[0]));
    53.         fclose($fp);
    54.         $file .= "--".$boundary."\r\n";
    55.         $file .= "Content-Type: application/octet-stream\r\n";
    56.         $file .= "Content-Transfer-Encoding: base64\r\n";
    57.         $file .= "Content-Disposition: attachment; filename=\"".$value[1]."\"\r\n\r\n";
    58.         $file .= chunk_split(base64_encode($content))."\r\n";
    59.     }
    60.     $multipart .= $file."--".$boundary."--\r\n";
    61.     mail($to, $subject, $multipart, $headers);
    62. }
    63.  
    64. /* Отправляем сообщение, используя mail() функцию */
    65. $from  = "From: $name <$email> \r\n Reply-To: $email \r\n";
    66. if (mail($to, $subject, $mes, $from)) {
    67.     header('Refresh: 3; index.html');
    68.     echo '<head>
    69.    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
    70.    <body> <div class="centered">Письмо <b>отправлено</b>, через 3 секунды Вы вернетесь на главную страницу Scooter-Sale</body>';}
    71. else {
    72.     header('Refresh: 5; index.html');
    73.     echo '<head>
    74.    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
    75.    <body>Письмо НЕ отправлено, через 5 секунд Вы вернетесь на главную страницу Scooter-Sale</body>';}
    76.  
    77. ?>
     
    #1 Rayder7235, 18 авг 2017
    Последнее редактирование модератором: 18 авг 2017
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @Rayder7235 не совсем понятно что нужно. Код не работает? Хочешь сделать оптимальнее?
     
  3. Rayder7235

    Rayder7235 Новичок

    С нами с:
    17 авг 2017
    Сообщения:
    9
    Симпатии:
    1
    Ошибка в 16 строке, надо подправить. Как - не знаю..

    Сама ошибка: Warning: Invalid argument supplied for foreach() in /home/gakwnags/public_html/send.php on line 16
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  5. Rayder7235

    Rayder7235 Новичок

    С нами с:
    17 авг 2017
    Сообщения:
    9
    Симпатии:
    1
    Вот сама форма,прикрепляю несколько изображений в самой форме. Письмо на мыло отправляет, а изображения не приходит.
    Какой код ещё скинуть? Я покажу всё.
    PHP:
    1. <center><form class="contact_form" action="send.php" method="post" id="sendform" enctype="multipart/form-data">
    2.   <fieldset>
    3.     <h3>Форма оформления жалобы Scooter-Sale</h3>
    4.      <p>
    5.             <label for="name">Имя:<b><font size="4" color="red">*</b></font></label>
    6.             <input type="text"  name="name" placeholder="Введите Ваше имя" required pattern="^[А-Яа-яЁё]+$"/>
    7.             <span class="form_hint">Правильный формат "Вячеслав" (только на русском)</span>
    8.      </p>
    9.         <p>
    10.             <label for="tel">Телефон:<b><font size="4" color="red">*</b></font></label>
    11.             <input type="tel" name="tel" placeholder="Введите номер телефона" required pattern="[0-9]{10}"/>
    12.             <span class="form_hint">Правильный формат "0931234567" (10 символов)!</span>
    13.         </p>
    14.         <p>
    15.             <label for="email">E-mail:<b><font size="4" color="red">*</b></font></label>
    16.             <input type="email" name="email" placeholder="Введите электронный адрес" required />
    17.             <span class="form_hint">Правильный формат "name@gmail.com"</span>
    18.         </p>
    19.  
    20.     <p>
    21.         <p>
    22.             <label for="message">Текст сообщения:<b><font size="4" color="red">*</b></font></label>
    23.             <textarea name="message" cols="40" rows="6" required ></textarea>
    24.     </p>
    25.  
    26.     <p>
    27.       <label>Прикрепить файл:</label>
    28.       <input name="file" value="1" size="40" type="file" multiple />
    29.     </p>
    30.  
    31.              <p>
    32.             <button name="sendMail" class="submit" type="submit">Отправить жалобу</button>
    33.         </p>
    34. Обязательные для заполнения поля отмечены <b><font size="4" color="red">*</b></font>
    35.   </fieldset>
    36. </form>
     
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @Rayder7235 почитай про отладку и если по ней не понятно, задавай вопросы что не ясно по ней, как освоишь, сможешь сам ошибки находить.
    Вот и смотри в $_FILES при отправки, заходит ли в if массив ли $_FILES["file"]["error"]
     
  7. Rayder7235

    Rayder7235 Новичок

    С нами с:
    17 авг 2017
    Сообщения:
    9
    Симпатии:
    1
    Где смотреть? Не понимаю..
     
  8. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    foreach предназначен для перебора массивов.
    в ошибке говорится что аргумент не правильный. Это значит, что элемент массива $_FILES["file"]["error"] не является массивом.
    --- Добавлено ---
    PHP:
    1. var_dump($_FILES);
     
  9. Rayder7235

    Rayder7235 Новичок

    С нами с:
    17 авг 2017
    Сообщения:
    9
    Симпатии:
    1
    Что мне нужно сделать? Мне надо что бы оно заработало, помогите мне в этом. Я только начинающий и многого понять не могу :(
     
  10. Rayder7235

    Rayder7235 Новичок

    С нами с:
    17 авг 2017
    Сообщения:
    9
    Симпатии:
    1
    Всё. Можно закрыть тему. Разобрался!
     
    TeslaFeo нравится это.