| 
	| 
	
	| 
		
	| 
			
			 
			
				29.04.2016, 00:57
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 29.04.2016 
						Сообщений: 5
					 
		
 |  |  
	| 
				Несколько одинаковых форм отправки на почту
			 Здравствуйте, вопрос неоднократно обсуждался, но так и не смог решить проблему. Имеется скрипт который передает данные в пхп, который отправляет данные на почту. Так как форм несколько то соответственно работает только одна, так как один и те же id нельзя использовать, это я уже уяснил. Но вот как поправить это все дело не приложу ума, из за низкого уровня знаний js 
<form method="POST" id="feedback-form_1">
<input type="text" class="form_top_input" name="nameFF" required placeholder="Ваше имя" x-autocompletetype="name">
<input  type="text" name="messageFF" class="form_top_input" required placeholder="Телефон">
			
<button type="submit" class="btn_top"><img class="btn_head" src="img/button-head.png"></button>
</form>
</form>
 
document.getElementById('feedback-form_1').addEventListener('submit', function(evt){
  var http = new XMLHttpRequest(), f = this;
  evt.preventDefault();
  http.open("POST", "contacts.php", true);
  http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  http.send("nameFF=" + f.nameFF.value + "&messageFF=" + f.messageFF.value);
  http.onreadystatechange = function() {
    if (http.readyState == 4 && http.status == 200) {
      alert(http.responseText + ', Ваше сообщение получено.\nНаши специалисты ответят Вам в течении 2-х дней.\nБлагодарим за интерес к нашей фирме!');    
      f.messageFF.removeAttribute('value'); // очистить поле сообщения (две строки)
      f.messageFF.value='';
    }
  }
  http.onerror = function() {
    alert('Извините, данные не были переданы');
  }
}, false);
<?
if (array_key_exists('messageFF', $_POST)) {
   $to = '22222@gmail.com';
   $subject = 'Заполнена контактная форма с '.$_SERVER['HTTP_REFERER'];
   $subject = "=?utf-8?b?". base64_encode($subject) ."?=";
   $message = "Имя: ".$_POST['nameFF']."\nТелефон: ".$_POST['messageFF'];
   $headers = 'Content-type: text/plain; charset="utf-8"';
   $headers .= "MIME-Version: 1.0\r\n";
   $headers .= "Date: ". date('D, d M Y h:i:s O') ."\r\n";
   mail($to, $subject, $message, $headers);
   echo $_POST['nameFF'];
}
?>
Подскажите пожалуйста, желательно живым примером, как поправить скрипт так что бы он обрабатывал не id а классы, то есть что бы одинаковых форм можно было вставить несколько			 Последний раз редактировалось uran2282, 29.04.2016 в 01:04.
 |  |  
	| 
		
	| 
			
			 
			
				29.04.2016, 10:44
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| А зачем много одинаковых форм на странице? Хотя, если в этом есть необходимость, можно иметь на странице кучу форм, и если все их отправлять асинхронно, то обработчик можно установить так:
 document.querySelectoor('form').addEventListener..  ..
 
 При этом сервер может определять форму-источник запроса либо по скрытому полю, либо по именам полей как единому их ключу.
 |  |  
	| 
		
	| 
			
			 
			
				04.05.2016, 16:23
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 29.04.2016 
						Сообщений: 5
					 
		
 |  |  
	| Много одинаковых форм используются на лендинге, где почти через блок отправка заявки. Не сработал данный метод, перебрасывает на форму выше при заполнении. Всем формам прописал класс form. |  |  
	| 
		
	| 
			
			 
			
				04.05.2016, 17:19
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| Что-то с трудом вяжется куча форм со понятием лендинга. ) 
	
 
	| Сообщение от uran2282 |  
	| Не сработал данный метод |  
	
 Какой метод - document.querySelectoor('form').addEventListener?
 
Это установка на одну форму, а на несколько, нужно сперва получить формы, обойти циклом, и на каждую из них повесить обработчик.
 
[].slice.call(document.querySelectorAll('form')).forEach(function(f) { 
    f.addEventListener('submit', function(e) {
        e.preventDefault();
        .....
        http.send("nameFF=" + this.nameFF.value + "&messageFF=" + this.messageFF.value);
        ...
			 Последний раз редактировалось laimas, 04.05.2016 в 17:21.
 |  |  
	| 
		
	| 
			
			 
			
				04.05.2016, 17:37
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 29.04.2016 
						Сообщений: 5
					 
		
 |  |  
	| Вот к примеру зачем использовать много форм. http://partners-work.com/4/  для такого вот дизайна. Мои знания в скриптах очень скудны. Не могли бы вы расписать как именно должна выглядеть вся структура ? |  |  
	| 
		
	| 
			
			 
			
				04.05.2016, 20:11
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| Лендинг, это в общем то выжимка самой соли, чтобы привлечь, а по ссылке что-то ближе к одностраничному сайту, много форм, действий. Но я же не говорю что нельзя, да на здоровье. ) 
У вас подключается jQuery, поэтому можно упростить все:
 
1) В теле страницы, внизу, подключается скрипт, тот что до вашей попытки отправки форм. Его содержание следующее:
 
$(function() {
    $('#dg-container').gallery({
	autoplay	:	true
    });
});
Перепишите его так:
 
$(function() {
    $('#dg-container').gallery({
	autoplay	:	true
    });
    $('form').submit(function(e) {
        e.preventDefault();
        var f = this; //это текущая форма
        $.ajax(
            type: "POST",
            url: "contacts.php", //если скрипт обработчик один у всех форм, иначе лучше получать это из action формы
            data: $(this).serialize(),
            success: function(q){
                alert(q + ', Ваше сообщение получено.\nНаши специалисты ответят Вам в течении 2-х дней.\nБлагодарим за интерес к нашей фирме!');
                //Это убрать
                //f.messageFF.removeAttribute('value'); //value - это свойство, 
                //f.messageFF.value='';
                //очистить форму, это так
                f.reset();
            } 
        );
    });
});
Только не понятно зачем очищать поля формы, к тому же только одного messageFF, да и к сообщению оно как-то не подходит. Не понятно каким же образом сервер будет понимать что за форма пришла, ведь есть отправка одних и тех же данных, но для: Заказать замер, Заказать услугу, Оформить заявку.
 
2) Скрипт в котором document.getElementById('feedback-form_1').addEventListener('submit', function(evt){.... - удалить.
 
PS. Разница по Гринвичу будет возвращаться для времени сервера, а не клиента, так что смысла особого в ней нет.			 Последний раз редактировалось laimas, 04.05.2016 в 20:30.
 |  |  
	| 
		
	| 
			
			 
			
				04.05.2016, 22:51
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 29.04.2016 
						Сообщений: 5
					 
		
 |  |  
	| Сделал по вашему примеру, по той же ссылке, все равно при заполнении и и клику по кнопке отправить перекидывает на другую форму((( что за беда такая... |  |  
	| 
		
	| 
			
			 
			
				05.05.2016, 01:26
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| У вас кнопки отправки форм вне тега формы расположены. |  |  
	| 
		
	| 
			
			 
			
				05.05.2016, 05:32
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	|  
А это то зачем перенесено в код?
 
//Это убрать
//f.messageFF.removeAttribute('value'); //value - это свойство, 
//f.messageFF.value='';
//очистить форму, это так
Странные однако у вас формы. ) |  |  
	| 
		
	| 
			
			 
			
				05.05.2016, 17:34
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 29.04.2016 
						Сообщений: 5
					 
		
 |  |  
	| Поправил формы, одна была на закрытая, это было причиной того что перекидывало на нее, но теперь просто при клике на отправку, страница перезагружается, и письмо не приходит(http://partners-work.com/10/			 Последний раз редактировалось uran2282, 05.05.2016 в 17:42.
 |  |  |  |