Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2018, 14:44   #11
DanDiablo
Пользователь
 
Аватар для DanDiablo
 
Регистрация: 25.08.2015
Сообщений: 55
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
выложите ваш PHP файл с формой и обработчиком на PHP целиком.
Вот, пожалуйста, сделал так (выложил футер, чуть контакты не "спалил"):

Код:
<?
    $errors = [];
if (count($_POST)>0) {
    if (isset($_POST['name'])) {
        $name = trim($_POST['name']);
        if (mb_strlen($name, 'UTF-8') < 4) {
            $errors[] = 'Имя должно быть не меньше 4 букв!';
        }if ($name !== '' && !preg_match('/[^а-яА-ЯЁё\s]+/msi', $name)) {
            $errors[] = 'Имя должно быть русскими буквами!';
        }
    }

    if (isset($_POST['user_email'])) {
        $user_email = trim($_POST['user_email']);
        if ($user_email === '' || !preg_match('/^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+s/', $user_email)) {
            $errors[] = 'Пожалуйста, введите почту!';
        }
    }

    if (isset($_POST['tema'])) {
        $tema = trim($_POST['tema']);
        if (!preg_match('/[^а-яА-ЯЁё\s]+/msi', $tema)) {
            $errors[] = 'Тема должна быть русскими буквами!';
        }
    }

    if (mb_strlen($tema, 'UTF-8') < 8) {
        $errors[] = 'Тема должна быть не меньше 8 букв!';
    }

    if (isset($_POST['text'])) {
        $text = trim($_POST['text']);
        if (mb_strlen($text, 'UTF-8') < 10) {
            $errors[] = 'Сообщение должно быть не меньше 10 букв!';
        }
    }

    if (isset($_POST['tel'])) {
        $tel = trim($_POST['tel']);
        if ($tel !== '' && !is_numeric($tel)) {
            $errors[] = 'Пожалуйста, введите телефон!';
        }
    }
}else{
    $name = '';
    $user_email = '';
    $tema = '';
    $text = '';
    $tel = '';
    $errors = [];

}



if (COUNT($errors) > 0 ) {
    $error = 'Пожалуйста, исправьте данные ошибки: <ul><li>' . implode('</li><li>', $errors) . '</li></ul>';
}
else{
  $to = "***";
  $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  $headers .= "From: \"".$name."\" <".$user_email.">\r\n";
  $headers .= "Reply-To: $user_email\r\n";
  $subject = "Сайт ***, тема: " . htmlspecialchars($tema, ENT_QUOTES, 'utf-8');
  $message = "<b>Имя отправителя:</b>" . htmlspecialchars($name, ENT_QUOTES, 'utf-8') . "<br>
								<b>Телефон отправителя:</b> $tel <br> 
								<b>Почта отправителя:</b> $user_email <br>
								<b>Сообщение:</b> <br>" . htmlspecialchars($text, ENT_QUOTES, 'utf-8');
  $send = mail ($to, $subject, $message, $headers);
 }

?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Отправка письма:</title>
</head>
<body>

<div class="foms">

    <div class="address"><div><h5>Наш адрес:</h5>**** <br>****<br> тел.: **** <br>****<br><a href="mailto:***">***</a></div></div>

    <div class="formRezult">
        <div id="result">Ждем Ваших писем!</div><div id="imgsForms"></div>
    </div>

    <form action="" class="myForm" id="myForm" method="post">

        <?php
        echo $error;
        ?>

        <span class="formsDisc req">Введите имя:</span>
        <label>
            <input type="text" id="myFormName" placeholder="Введите имя:" title="Введите Ваше имя:" name="name"  pattern="^[А-Яа-яЁё\s]+$">

        </label>

        <span class="formsDisc">Введите телефон:</span>
        <label>
            <input type="tel" placeholder="Tел.: +7-ххх-ххх-хх-хх" title="Телефон: +7-ххх-ххх-хх-хх" name="tel" id="myFormTel" pattern="(\+7){1}-([0-9]{3})-([0-9]{3})-([0-9]{2})-([0-9]{2})">

        </label>

        <span class="formsDisc req">Введите почту:</span>
        <label>
            <input type="email" id="myFormEmail" placeholder="Введите почту:" title="Введите Вашу почту:"  name="user_email">

        </label>

        <span class="formsDisc req">Тема:</span>
        <label>
            <input type="text" id="myFormTema" placeholder="Тема сообщения:" title="Тема Вашего сообщения:" name="tema"  id="tema">

        </label>

        <span class="formsDisc req">Сообщение:</span>
        <label>
            <textarea name="text" id="myFormMessage"  placeholder="Ваше сообщение:" title="Ваше сообщение:" id="" cols="30" rows="5"></textarea>

        </label>

        <div class="buttons">

            <button type="submit" class="knopka">Отправить письмо!</button>

        </div>

        <div>

        </div>


    </form>
</div>

</body>
</html>

<?php
//var_dump($errors, $send);die;
//?>
Предупреждения об ошибке скрипта нет.

Последний раз редактировалось DanDiablo; 18.04.2018 в 14:58.
DanDiablo вне форума Ответить с цитированием
Старый 18.04.2018, 14:48   #12
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Хм, а зачем исходный код в ВВ-код «Цитата» совать – когда прямо рядом с ним есть ВВ-код «Код»...?
Вообще же не читабельно.
Andkorol вне форума Ответить с цитированием
Старый 18.04.2018, 14:49   #13
DanDiablo
Пользователь
 
Аватар для DanDiablo
 
Регистрация: 25.08.2015
Сообщений: 55
По умолчанию

Ajax (jQuery там уже использовался для плагина cms, так что на нем и делал)

Код:
jQuery(document).ready(function() {
	jQuery(function(){
        jQuery("#myFormTel").mask("+7-999-999-99-99");
        }),
    jQuery("#myForm").submit(function() {
        jQuery.ajax({
            type: "POST",
            url: "mail.php",
            data: jQuery(this).serialize()
        }).done(function() {
            jQuery(this).find("input").val("");
            jQuery(".knopka").html("Спасибо!");
            jQuery("#result").html("Спасибо за письмо!");
            jQuery("#imgsForms").show("slow");
            jQuery("#myForm").trigger("reset");
            jQuery(".knopka").val("Отправляется");
            jQuery(".knopka").prop("disabled", "true");
        });
        return false;
    });

Последний раз редактировалось DanDiablo; 18.04.2018 в 14:57.
DanDiablo вне форума Ответить с цитированием
Старый 18.04.2018, 14:51   #14
DanDiablo
Пользователь
 
Аватар для DanDiablo
 
Регистрация: 25.08.2015
Сообщений: 55
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Хм, а зачем исходный код в ВВ-код «Цитата» совать – когда прямо рядом с ним есть ВВ-код «Код»...?
Вообще же не читабельно.
Виноват, замаялся уже сегодня, все исправил!
DanDiablo вне форума Ответить с цитированием
Старый 18.04.2018, 15:15   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

так. по порядку.
1) у Вас отправка происходит сразу при открытии PHP файла - т.к. блок отправки письма расположен не в том месте (его надо делать только в блоке, где $_POST).
и, кстати, запись if($_POST) вполне допустима.
переменные все пустые и есть попытка отправить пустое письмо.

2) если смущает ошибка, возникающая при попытке обновить окно, то с этим можно бороться.
см.

http://programmersforum.ru/showthread.php?t=254985

https://habrahabr.ru/post/149376/

3) немного не понял со скриптом. Если у Вас используется jQuery - то почему я его не увидел в теле модуля (пост #11)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.04.2018, 11:45   #16
DanDiablo
Пользователь
 
Аватар для DanDiablo
 
Регистрация: 25.08.2015
Сообщений: 55
По умолчанию

1) Благодарю! Вот чувствовал, что где то рядом решение. Позже проверю.

2) Вот тут ajax мне нужен и из этого

3) Вот тут я уже Вас не понимаю.

Был простой скрип отправки:
Код:
<?php
		if (isset($_POST['name'])) {$name = $_POST['name'];}
		if (isset($_POST['user_email'])) {$user_email = $_POST['user_email'];}
		if (isset($_POST['tema'])) {$tema = $_POST['tema'];}
		if (isset($_POST['text'])) {$text = $_POST['text'];}
		if (isset($_POST['tel'])) {$tel = $_POST['tel'];}

		$to = "*****";
		$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
		$headers .= "From: \"".$name."\" <".$email.">\r\n";
		$headers .= "Reply-To: $user_email\r\n";
		$subject = "Сайт ЦАДИ, тема: $tema";
		$message = "<b>Имя отправителя:</b> $name <br>
								<b>Телефон отправителя:</b> $tel <br>
								<b>Почта отправителя:</b> $user_email <br>
								<b>Сообщение:</b> <br> $text";
		$send = mail ($to, $subject, $message, $headers);
		
	?>
И ajax для него:

Код:

jQuery(document).ready(function() {
	jQuery(function(){
        jQuery("#myFormTel").mask("+7-999-999-99-99");
        }),
    jQuery("#myForm").submit(function() {
        jQuery.ajax({
            type: "POST",
            url: "mail.php",
            data: jQuery(this).serialize()
        }).done(function() {
            jQuery(this).find("input").val("");
            jQuery(".knopka").html("Спасибо!");
            jQuery("#result").html("Спасибо за письмо!");
            jQuery("#imgsForms").show("slow");
            jQuery("#myForm").trigger("reset");
            jQuery(".knopka").val("Отправляется");
            jQuery(".knopka").prop("disabled", "true");
        });
        return false;
    });
И все работало, jQuery подключается где то там сам компонентом в cms.
Кнопочка 'вверх' тоже на нем работает.

Цитата:
Если у Вас используется jQuery - то почему я его не увидел в теле модуля
Где он должен быть и почему?

Простите мою глупость, практики полного написания сайта у меня нет.
DanDiablo вне форума Ответить с цитированием
Старый 19.04.2018, 12:02   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от DanDiablo Посмотреть сообщение
Был простой скрип отправки:
это неправильный скрипт.
он выполняет mail() вне зависимости от того, как его вызвали - с заполненным POST или нет. И в нём нет контроля данных - правильно внесли или нет.


Цитата:
Сообщение от DanDiablo Посмотреть сообщение
И ajax для него:
ну этот же скрипт должен быть в файле, верно?
В каком файле у Вас этот скрипт?


всё время такое чувство, что Вы боитесь сболтнуть лишнее.
Молчите, как партизан. Содержимое файлов из Вас приходится клещами вытягивать.
да и то Вы показываете только часть файла...


впрочем, я так от Вас добиваюсь ответа, как будто это мне нужно, а не Вам!

Будут вопросы - пишите в теме.
Успехов!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.04.2018, 13:30   #18
DanDiablo
Пользователь
 
Аватар для DanDiablo
 
Регистрация: 25.08.2015
Сообщений: 55
По умолчанию

Цитата:
]ну этот же скрипт должен быть в файле, верно?
В каком файле у Вас этот скрипт?
В файле js, где на jQuery (если уж он там нужен плагину) сделана проверка формы, кнопка "вверх" и "прилепляние\отлепляние" менюшки при скроллинге.

Но на данный момент я не понимаю, js надо указывать в php для ajax?!

Это же в ajax надо php обработчкик формы указывать.


Цитата:
впрочем, я так от Вас добиваюсь ответа, как будто это мне нужно, а не Вам!
Я пытаюсь дойти своим умом, если уж совсем не как, то сюда пишу.
А то своего опыта не будет совсем.

Цитата:
Будут вопросы - пишите в теме.
Успехов!
Благодарю!
Видимо, еще придется написать.
Пока временный перерыв из за вынужденного переключения на другую работу.
DanDiablo вне форума Ответить с цитированием
Старый 19.04.2018, 13:57   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от DanDiablo Посмотреть сообщение
В файле js, где на jQuery (если уж он там нужен плагину) сделана проверка формы, кнопка "вверх" и "прилепляние\отлепляние" менюшки при скроллинге.
js файл где-то к вашему файлу подключается?
допустим, что у Вас в папке js есть скрипт myforms.js

тогда где-то должно быть подключение этого скрипта.
например, так:
Код:
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Обратная связь</title>
	
	<link rel="stylesheet" href="css/style.css">
	<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
	<script src="js/myforms.js"></script>
</head>
.....
вот я про это и спрашивал.


Цитата:
Сообщение от DanDiablo Посмотреть сообщение
Но на данный момент я не понимаю, js надо указывать в php для ajax?!
ну, если у Вас шаблон страницы (HTML теги, форма и прочее) в PHP описан, то там же и заголовки HTML вначале идут. Там и подключаются скрипты, стили и прочее.


Цитата:
Сообщение от DanDiablo Посмотреть сообщение
Это же в ajax надо php обработчкик формы указывать.
Одно другому не мешает.

Это же всё выполняется в разное время и в разных машинах.

Если есть неясности, очень рекомендую ознакомиться с Самые основы. Как работает PHP.


Цитата:
Сообщение от DanDiablo Посмотреть сообщение
Я пытаюсь дойти своим умом, если уж совсем не как, то сюда пишу.
А то своего опыта не будет совсем.
Это похвально. Так и надо делать. Главное, не свернуть с дороги и не забрести в чащу.


Цитата:
Сообщение от DanDiablo Посмотреть сообщение
Видимо, еще придется написать.
Разбирайтесь. Пишите.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.04.2018, 14:43   #20
DanDiablo
Пользователь
 
Аватар для DanDiablo
 
Регистрация: 25.08.2015
Сообщений: 55
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
js файл где-то к вашему файлу подключается?
допустим, что у Вас в папке js есть скрипт myforms.js

тогда где-то должно быть подключение этого скрипта.
например, так:
Код:
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Обратная связь</title>
	
	<link rel="stylesheet" href="css/style.css">
	<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
	<script src="js/myforms.js"></script>
</head>
.....
вот я про это и спрашивал.

ну, если у Вас шаблон страницы (HTML теги, форма и прочее) в PHP описан, то там же и заголовки HTML вначале идут. Там и подключаются скрипты, стили и прочее.
Аа, это я не понял вопроса!

В самой cms есть модуль, где все подключается разом:

Код:
<script>window.jQuery || document.write('<script src="js/jquery-1.8.3.min.js"><\/script>')</script>

<script src="js/js.js" type="text/javascript"></script>
<div id="tops">&nbsp;</div>
Последний див - кнопочка вверх. И это все работает на каждой странице cms, я проверял. Тоже залипание менюшки.

Так же есть модуль footer, где уже в свою очередь подключен php так же на всех страницах:

Код:
<?php

include_once 'mail.php';
 
?>
Я так подозреваю, если подключить в двух модулях разом (php же тоже через модуль подключается на всех страницах):

Код:
<script src="js/js.js" type="text/javascript"></script>
То ни чего хорошего не будет.
DanDiablo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка формы ts-alan ASP.NET 0 26.05.2015 21:21
Отправка формы userrrr PHP 52 28.12.2014 18:44
отправка формы weder PHP 4 02.05.2010 21:00
отправка формы L_M PHP 5 28.07.2009 12:01