Есть страничка с формой для отправки данных и фотографий. Вот ссылка на страничку
ФОТОБАНДА.РФ
С основной функцией - отправкой сообщений с вложениями на почту - справляется.
Не работают две вещи:
1. Когда приходит письмо на почту, то не отображаются имена полей (имя пользователя, эмейл и тд.) То есть данные приходят, а название поля не отображается. Может орфография страдает в php исходнике?
2.
Самое главное. Мне нужно, чтобы форма подсчитывала количество загруженных файлов, далее я беру это число и подставляю в формулу для расчета. Форма считает количество файлов, но ГДЕ ОНА ЭТО ДЕЛАЕТ?? я брал исходники и редактировал под себя. До чего-то додумался сам, но с этим ступор. Где эта строчка, в которой считается число файлов? Я подозреваю, что можно взять это число из массива имен файлов, тогда нам нужна длина массива. Есть там переменная
count,, может это как раз то, что нужно? Подскажите, пожалуйста, я еще пока только учусь. А так форма рабочая, берите, кому надо.
Исходники html:
<!DOCTYPE HTML>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Контактная форма</title>
<style>
#feedback-form { /* вся форма */
max-width: 550px;
padding: 2%;
border-radius: 3px;
background: #f1f1f1;
}
#feedback-form label { /* наименование полей */
float: left;
display: block;
clear: right;
}
#feedback-form .w100 { /* поля */
float: right;
max-width: 400px;
width: 97%;
margin-bottom: 1em;
padding: 1.5%;
}
#feedback-form .border { /* граница полей */
border-radius: 1px;
border-width: 1px;
border-style: solid;
border-color: #C0C0C0 #D9D9D9 #D9D9D9;
box-shadow: 0 1px 1px rgba(255,255,255,.5), 0 1px 1px rgba(0,0,0,.1) inset;
}
#feedback-form .border:focus {
outline: none;
border-color: #abd9f1 #bfe3f7 #bfe3f7;
}
#feedback-form .border:hover {
border-color: #7eb4ea #97cdea #97cdea;
}
#feedback-form .border:focus::-moz-placeholder { /* убрать при фокусе первоначальный текст поля */
color: transparent;
}
#feedback-form .border:focus::-webkit-input-placeholder {
color: transparent;
}
#feedback-form .border:not(:focus):not(:hover):valid { /* правильно заполненные поля */
opacity: .8;
}
#submitFF { /* кнопка "Отправить" */
padding: 2%;
border: none;
border-radius: 3px;
box-shadow: 0 0 0 1px rgba(0,0,0,.2) inset;
background: #669acc;
color: #fff;
}
#feedback-form br {
height: 0;
clear: both;
}
#submitFF:hover {
background: #5c90c2;
}
#submitFF:focus {
box-shadow: 0 1px 1px #fff, inset 0 1px 2px rgba(0,0,0,.8), inset 0 -1px 0 rgba(0,0,0,.05);
}
</style>
<form enctype="multipart/form-data" method="post" id="feedback-form">
<label for="nameFF">Имя:</label>
<input type="text" name="nameFF" id="nameFF" required placeholder="например, Иван Иванович Иванов" x-autocompletetype="name" class="w100 border">
<label for="contactFF">Email:</label>
<input type="email" name="contactFF" id="contactFF" required placeholder="например, ivan@yandex.ru" x-autocompletetype="email" class="w100 border">
<label for="checkFF">Магнитное фото</label>
<input type="hidden" name="checkFF" value="Обычное">
<input type="checkbox" name="checkFF" id="checkFF" value="Магнитное" class="w100 border"><br>
<label for="radioFF">Размер фото</label><br>
<p><input type="radio" name="radioFF" id="radioFF" value="10x15" class="w100 border" required >10x15</p>
<p><input type="radio" name="radioFF" id="radioFF" value="15x20" class="w100 border" required >15x20</p>
<p><input type="radio" name="radioFF" id="radioFF" value="20x30" class="w100 border" required >20x30</p>
<label for="fileFF">Прикрепить файл:</label>
<input type="file" name="fileFF[]" multiple id="fileFF" class="w100">
<label for="messageFF">Комментарий:</label>
<textarea name="messageFF" id="messageFF" rows="5" placeholder="Укажите номер телефона для связи с Вами, а также Ваши пожелания по заказу" class="w100 border" required></textarea>
<br>
<input value="Отправить" type="submit" id="submitFF">
</form>
<script>
document.getElementById('feedback-form').addEventListener('submit', function(evt){
var http = new XMLHttpRequest(), f = this;
evt.preventDefault();
http.open("POST", "http://xn--80aabn8bda5aq.xn--p1ai/contacts.php", true);
http.onreadystatechange = function() {
if (http.readyState == 4 && http.status == 200) {
alert(http.responseText + ', Ваше сообщение получено.\nНаши специалисты ответят Вам в ближайшее время.\nБлагодарим за интерес к нашей фирме!');
if (http.responseText.indexOf(f.nameFF.value) == 0) { // очистить поле сообщения, если в ответе первым словом будет имя отправителя
f.messageFF.removeAttribute('value');
f.messageFF.value='';
}
}
}
http.onerror = function() {
alert('Извините, данные не были переданы');
}
http.send(new FormData(f));
}, false);
</script>
Исходники php обработчика:
<?php
if (isset ($_POST['contactFF'])) {
$to = "ВАШ ЭМЕЙЛ"; // поменять на свой электронный адрес
$from = $_POST['contactFF'];
$subject = "Заполнена контактная форма с ".$_SERVER['HTTP_REFERER'];
isset($_POST['checkFF']);
if(isset($_POST['radioFF']))
{
$radioFF = $_POST['radioFF'];
}
$message = "Имя: ".$_POST['nameFF']."\nEmail: ".$from."\nIP: ".$_SERVER['REMOTE_ADDR']."\nСообщение: ".$_POST['messageFF']."\nМагнитное фото: ".$_POST['checkFF']."\nРазмер: ".$radioFF;
$boundary = md5(date('r', time()));
$filesize = '';
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$message="
Content-Type: multipart/mixed; boundary=\"$boundary\"
--$boundary
Content-Type: text/plain; charset=\"utf-8\"
Content-Transfer-Encoding: 7bit
$message";
for($i=0;$i<count($_FILES['fileFF']['name']);$i++) {
if(is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) {
$attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i])));
$filename = $_FILES['fileFF']['name'][$i];
$filetype = $_FILES['fileFF']['type'][$i];
$filesize += $_FILES['fileFF']['size'][$i];
$message.="
--$boundary
Content-Type: \"$filetype\"; name=\"$filename\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=\"$filename\"
$attachment";
}
}
$message.="
--$boundary--";
if ($filesize < 100000000) { // проверка на общий размер всех файлов. Многие почтовые сервисы не принимают вложения больше 10 МБ
mail($to, $subject, $message, $headers);
echo $_POST['nameFF'].', Ваше сообщение получено, спасибо!';
} else {
echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';
}
}
?>