Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Форма обратной связи php + ajax (https://javascript.ru/forum/dom-window/65303-forma-obratnojj-svyazi-php-ajax.html)

WebMachine 11.10.2016 23:50

Форма обратной связи php + ajax
 
Ребят помогите. форма на php + ajax.
сам сайт: http://my-resume.xyz

я испробовал уже всё что можно.
и не выходит. на данный момент стоит :https://habrahabr.ru/sandbox/93363/

но форма не работает и + к тому же происходит перезагрузка.. ошибка в ajax'e 100%.
HTML:
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"  type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
    $("#form").submit(function() { //устанавливаем событие отправки для формы с id=form
            var form_data = $(this).serialize(); //собераем все данные из формы
            $.ajax({
            type: "POST", //Метод отправки
            url: "mail-send.php", //путь до php фаила отправителя
            data: form_data,
            success: function() {
                   //код в этом блоке выполняется при успешной отправке сообщения
                   alert("Ваше сообщение отпрвлено!");
            });
    });
});    
</script>
</head>
<body>
<form id="form">
<div class="form-group row">
<label class="col-md-4 control-label k_field_name">ФИО</label>
<div class="col-md-8"><input type="text" class="form-control" name="name1" id="name1" required></div>
</div>
<div class="form-group row">
<label class="col-md-4 control-label k_field_name">E-mail</label>
<div class="col-md-8"><input type="text" class="form-control" name="email1" id="email1" required></div>
</div>
<div class="form-group row">
<label class="col-md-4 control-label k_field_name">Телефон</label>
<div class="col-md-8"><input type="text" class="form-control" name="phone1" id="phone1" required></div>
</div>
<div class="form-group row">
<label class="col-md-4 control-label k_field_name">Город</label>
<div class="col-md-8"><input type="text" class="form-control" name="country1" id="country1" required></div>
</div>
<div class="form-group row">
<label class="col-md-4 control-label k_field_name">Темы для выступлений в СМИ</label>
<div class="col-md-8"><textarea class="form-control" name="mtext1" id="mtext1" required></textarea></div>
</div>
<div class="form-group row">
<label class="col-md-4 control-label k_field_name">Страница на Facebook</label>
<div class="col-md-8"><input type="text" class="form-control" name="facelink1" id="facelink1" required></div>
</div>
<div class="form-group row">
<div class="col-md-8 col-md-offset-4">
<button type="submit" class="btn btn-primary pull-left">Отправить</button>
<button type="button" class="md-close btn btn-primary pull-right">Закрыть</button>
</div>
</div>
</form>
</body>


PHP (mail-send.php):
<?
if((isset($_POST['name1'])&&$_POST['name1']!="")&&(isset($_POST['email1'])&&$_POST['email1']!="")&&(isset($_POST['phone1'])&&$_POST['phone1']!="")&&(isset($_POST['country1'])&&$_POST['country1']!="")&&(isset($_POST['facelink1'])&&$_POST['facelink1']!="")&&(isset($_POST['mtext1'])&&$_POST['mtext1']!="")){
        $to = 'web.pr@mail.ru';
        $subject = 'Заявка на вступление в клуб экспертов';
        $message = "<p><strong>Имя:</strong> $name1</p>
		\n<p><strong>E-mail:</strong> $email1</p>
		\n<p><strong>Телефон:</strong> $phone1</p>
		\n<p><strong>Город:</strong> $country1</p>
		\n<p><strong>Страница на Facebook:</strong> $facelink1</p>
		\n<p><strong>Темы для выступлений в СМИ:</strong> $mtext1</p>";
        $headers  = "Content-type: text/html; charset=utf-8 \r\n";
        $headers .= "From: $name1 <$to>\r\n";
        mail($to, $subject, $message, $headers);
}
?>

WebMachine 11.10.2016 23:55

пишет ошибку: Uncaught SyntaxError: Unexpected token )

warren buffet 13.10.2016 11:36

Еще пишут в какой строке. Вот и ищи эту строку.

Царь Леонид 13.10.2016 11:51

Фигурную скобку надо добавить перед )

WebMachine 13.10.2016 19:26

Цитата:

Сообщение от Царь Леонид (Сообщение 431562)
Фигурную скобку надо добавить перед )

Где именно? подскажи пожалуйста :)

Ramzes94 13.10.2016 20:21

Проблема в ajax коде, а вот в js я не шарю.

php выполняет свою работу

<?php
	if(!empty($_POST['name1'])&&!empty($_POST['email1'])&&!empty($_POST['phone1'])&&!empty($_POST['country1'])&&!empty($_POST['facelink1'])&&!empty($_POST['mtext1'])){
			$to = 'web.pr@mail.ru';
			$subject = 'Заявка на вступление в клуб экспертов';
			$message = "<p><strong>Имя:</strong> $name1</p>
			\n<p><strong>E-mail:</strong> $email1</p>
			\n<p><strong>Телефон:</strong> $phone1</p>
			\n<p><strong>Город:</strong> $country1</p>
			\n<p><strong>Страница на Facebook:</strong> $facelink1</p>
			\n<p><strong>Темы для выступлений в СМИ:</strong> $mtext1</p>";
			$headers  = "Content-type: text/html; charset=utf-8 \r\n";
			$headers .= "From: $name1 <$to>\r\n";
			mail($to, $subject, $message, $headers);
	}
?>

laimas 14.10.2016 03:19

Нужно отменять естественную отправку формы:

//либо так
$("#form").submit(function(e) { /
   e.prevetDefault();
   .....
});

//либо так
$("#form").submit(function(e) {
   .....
   return false
});


Цитата:

Сообщение от Ramzes94
php выполняет свою работу

Если бы вы хоть его код написали как положено, а так и в нем полный бардак. $subject = 'Заявка на вступление в клуб экспертов'; - не есть гарантия того, что его прочтут, тему сообщения кодируют.

Content-type: text/html;, а в теле </p>\n<p> - нет в html никаких \r\n или \n, они игнорируются.

!empty($_POST['name1'])&&!empty($_POST['email1'])....

$var = ' ';
echo !empty($var) ? 'Пусто' : 'Ок';


И будет ОК. Удалять нужно крайние пробелы всегда, прежде чем производить проверку, для одномерного массива это можно сделать обходом array_map(), для многомерного array_walk_recursive().

Методично проверять каждую переменную в портянке If не обязательно, можно проверить после trim наличие одного пустого поля.

Отправляя сообщение как html, текст сообщения пользователя обязательно пропускать через htmlspecialchars.

warren buffet 14.10.2016 07:31

Говнокодеры митингуют за колхоз.

Нормально делается вообще просто.

$form=array(

   'name'=>array(
       'caption'=>'Ваше имя',
       'placeholder'=>'Не менее трех букаф',
       'type'=>'text',
       'required'=>3,
       'class'=>'md8-blah-blah',
       'id'=>'kakoe-to-id'
   ),
   'phone'=>array(
   /* по тому же шаблону */
);


Теперь самоочевидно под такой массив пишется шаблон рендера формы.

Затем самоочевидно по такому массиву проверяется то, что пришло с браузера.

That's all folks.


Часовой пояс GMT +3, время: 05:07.