Jump to content
  • 0

Форма обратной связи - ответное сообщение


frendlix
 Share

Question

День добрый!

Есть форма обратной связи, она спокойно присылает e-mail на нужный мне адрес, но во первых почему то не валидирует вообще, т.е. нет проверки на заполнение полей, енто раз.

Но главная проблема в том что мне нужно что бы при успешной отправке сообщения пользователю который отправил нам сообщение приходил ответ на его же почту, мол спасибо бла бла бла, сейчас у нас нет:


<?php
$posttags = get_the_tags();
if ($posttags) {
foreach($posttags as $tag) {
echo $tag->name . ' ';
}
}
?>

, но когда будет мы вас оповестим.

Вот код формы:

php:


<?php
class Mail { private $_plain = "text/plain";
public function isTypeHtml($is_html = true) {
if ($is_html == true) {
$this->_plain = "text/html";
} else {
$this->_plain = "text/plain";
}
} public function send($to, $to_name, $from, $from_name, $subject, $message) {
$headers = "From: =?utf-8?B?" . base64_encode($from_name) . "?= <$from>\r\n";
$headers .= "To: =?utf-8?B?" . base64_encode($to_name) . "?= <$to>\r\n";
$headers .= "Subject: =?utf-8?B?" . base64_encode($subject) . "?=\r\n";
$headers .= "Content-type: $this->_plain; charset=\"utf-8\"\r\n";
$headers .= "X-Mailer: http://sait.ru \r\n";
if (mail($to, $subject, $message, $headers)) {
return true;
}
else return false; }
}if (isset($_POST["send"])) {
$mail = new Mail();
$mail->isTypeHtml(false);
$message .= "E-mail: " . $_POST["email"] . "\n\r";
$message .= "Ля ля: " . $_POST["message"] . "\n\r";
if ($mail->send("mail@gmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message)) {
echo "<script> alert('Сообшение успешно отправлено!')</script>";
} else {
echo "<script> alert('Возникли ошибки при отправке сообщения!')</script>";
}
}
?>

html:


<form method="post" action="">
текст <input class="classname" name="message" rows="" cols="0" value="<?php
$posttags = get_the_tags();
if ($posttags) {
foreach($posttags as $tag) {
echo $tag->name . ' ';
}
}
?>" /> текст:
<input class="inputsubscribe subscribefont" type="text" name="email" size="25" maxlength="255" value="" placeholder="Введите ваш E-mail"/><br>
<button type="submit" class="subscribenews" name="send">Заказать</button>

Помогите ребят, спасибо!

Link to comment
Share on other sites

22 answers to this question

Recommended Posts

  • 0

Лень код разбирать, да и ни к чему. А почему сейчас не приходит? Функция mail на сервере вообще работает?

Что не приходит? Сейчас все приходит, не понятно как по результату вместо alert отправлять ответное письмо.

Link to comment
Share on other sites

  • 0

$to, $to_name, $from, $from_name, $subject, $message

Вот эти значения и валидируйте ) как хотите

а что вам мешает после

$mail->send("mail@gmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message)

вызвать ещё раз функцию send(), но уже с другими параметрами?

Edited by Николя223
Link to comment
Share on other sites

  • 0

а что вам мешает после

$mail->send("mail@gmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message)

вызвать ещё раз функцию send(), но уже с другими параметрами?

Возможно что мне мешает непонимание того как это сделать (:

Пока что в голову пришло только вот так сделать:

if ($mail->send("mail@gmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message); send("mail@gmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message)) {echo...

Но сдается мне что я написал неправильный синтаксис, вот и вся проблема))

Чукча html занимается php на уровне доначальном))

Link to comment
Share on other sites

  • 0

а что вам мешает после

$mail->send("mail@gmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message)

вызвать ещё раз функцию send(), но уже с другими параметрами?

Возможно что мне мешает непонимание того как это сделать (:

Пока что в голову пришло только вот так сделать:

if ($mail->send("mail@gmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message); send("mail@gmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message)) {echo...

Но сдается мне что я написал неправильный синтаксис, вот и вся проблема))

Чукча html занимается php на уровне доначальном))

Конечно, чувак, неправильно. Какой send сработает просто так? Если бы он работал, то вместо конструкции $mail->send, так бы и было написано - send;

Просто скопируй функцию отправки еще раз и все.


if ($mail->send("mail@gmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message)) {
echo "<script> alert('Сообшение успешно отправлено!')</script>";
} else {
echo "<script> alert('Возникли ошибки при отправке сообщения!')</script>";
}

if ($mail->send("SECONDgmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message)) {
echo "<script> alert('Сообшение на другой ящик успешно отправлено!')</script>";
} else {
echo "<script> alert('Возникли ошибки при отправке сообщения!')</script>";
}

Edited by Zverushka
Link to comment
Share on other sites

  • 0

if ($mail->send("mail@gmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message)){

$mail->send("newmail@gmail.com", "Ла ла", "support@gmail.com", "Ля", "Ля", $message);

echo...

}

так пробуй

Все гениальное просто, спасибо (:

Чуть еще допилил, стало вообще отлично!

Link to comment
Share on other sites

  • 0

Хочется еще добавить кое какой вопрос (:

Форма при отправке данных выводит jquery fancybox скрипт, который собственно выводит всплывающее окно типа pop-up с сообщением о успешной отправке.

Вопрос в следующем при обновлении страницы форма еще раз отправляет данные.

Что пробовал - о чем думал:

1. Редирект на страницу с сообщением о результате действия (успешном или нет) - тут все ясно, кроме того, что тогда у меня пропадает красивое фенсибокс окошко.

2. Очистка данных из формы aka reset но он не помог

3. Почитал что можно использовать: unset($_POST); и что бы отрабатывался он сразу после отправки данных, но что то корректно всунуть его у меня не вышло.

Какие еще могут быть способы или варианты что бы избавится от повторной отправки формы при обновлении?

Спасибо!

Link to comment
Share on other sites

  • 0
Редирект на страницу с сообщением о результате действия (успешном или нет) - тут все ясно, кроме того, что тогда у меня пропадает красивое фенсибокс окошко.

не совсем правильная логика, редиректить нужно только после УСПЕШНЫХ действий, а если введенные данные не корректны - выдавать соотв. предупреждение.

ну и если заголовки как-то будут пересекаться во время редиректа, то применять буферизацию вывода:

ob_start();

ob_clean();

есть правда еще один способ, который я взял себе на заметку у нашего уважаемого гуру Int-а:


if (isset($_SESSION['flag']) && (time()-$_SESSION['flag'] < 15)) {
echo '<h1>Защита от повторного обновления! Нужно подождать 15 сек...</h1>';
} else {
// тут ваш код...
echo '<h1>Информация отправлена!</h1>';
$_SESSION['flag']=time();
}

Link to comment
Share on other sites

  • 0
не совсем правильная логика, редиректить нужно только после УСПЕШНЫХ действий, а если введенные данные не корректны - выдавать соотв. предупреждение. ну и если заголовки как-то будут пересекаться во время редиректа, то применять буферизацию вывода: ob_start(); ob_clean();

Ну да, я просто не так написал)) В случае неправильных данных он alert выдает через jquery опять таки.

А если sucsess то всплывает поп ап.

Поэтому редирект меня не очень устраивает.

А тот вариант что вы предложили возьму на вооружение, может очень даже пригодится, если ничего более элегантного не найду.

Link to comment
Share on other sites

  • 0

Получается у тебя происходит якобы нажатие кнопки отправить (то есть кнопки submit) на обычной перезагрузке страницы?И страница не просит подтвердить отправку данных при обновлении? Конечно без кода страницы тут не посоветуешь ничего...

Link to comment
Share on other sites

  • 0

Как бы да получается, страница по крайней мере в опере (новой) и хроме не просит.

Код страницы:


<?php
class Mail {
private $_plain = "text/plain";
public function isTypeHtml($is_html = true) {
if ($is_html == true) {
$this->_plain = "text/html";
} else {
$this->_plain = "text/plain";
}
}
public function send($to, $to_name, $from, $from_name, $subject, $message) {
$headers = "From: =?utf-8?B?" . base64_encode($from_name) . "?= <$from>\r\n";
$headers .= "To: =?utf-8?B?" . base64_encode($to_name) . "?= <$to>\r\n";
$headers .= "Subject: =?utf-8?B?" . base64_encode($subject) . "?=\r\n";
$headers .= "Content-type: $this->_plain; charset=\"utf-8\"\r\n";
$headers .= "X-Mailer: sitename \r\n";
if (mail($to, $subject, $message, $headers)) {
return true;
}
else return false;
}
}
if (isset($_POST["send"])) {
$mail = new Mail();
$mail->isTypeHtml(false);
$message2 =$_POST["fio"];
$message .= $_POST["email"];
$message1 .= $_POST["message1"];
if ($mail->send("mail@gmail.com", "Бла 1", "mail@gmail.com", "Sitename", "Заказ на $message1", "E-mail: $message \r\nИмя: $message2 \r\nНужен: $message1"))
{$mail->send("$message", "Бла 1", "mail@gmail.com", "Sitename", "Подтверждение Вашего запроса на сайте Sitename!", "Здравствуйте $message2! \r\nВаше сообщение успешно отправлено! \r\nКак только $message1 появится на нашем сайте, мы сразу сообщим Вам об этом! \r\n--\r\n
Спасибо за Ваше обращение! \r\nСлужба поддержки сайта: Sitename \r\nE-mail для общих вопросов: mail@gmail.com \r\nE-mail для вопросов по заказам или оплате: mail@gmail.com");
echo "
<a class='fancybox' href='../sucsess.html'></a>
<script>jQuery(document).ready(function($){
$('.fancybox')
.attr('rel', 'gallery')
.fancybox({
'padding' : '0',
'scrolling' : 'no',
});
$('.fancybox').eq(0).trigger('click');
}); </script>";
} else {
echo "<script> alert('Возникли ошибки при отправке сообщения!')</script>";
}
}
?>
<form method="post" action="">
<div id="marginyes">
<div id="backsubnews" style="height: 235px;">
<div id="backbuttonyes" style="height: 215px;">
<div style="border-right: 3px solid #AA1212;text-align:center;width:290px;text-transform: uppercase;font-size: 15px!important;text-shadow: 1px 0px 1px #3f3f3f;color:#ffffff;margin-top: 5px;
float: left;">
Сейчас у нас нет нужного товара<br/>
<input style="font-weight: bold;font-size: 18px;background: none;border: none;color: #fff;text-transform: uppercase;padding: 0px;margin: 0 15%;
text-align: center;" name="message1" rows="" cols="0" value="<?php
$posttags = get_the_tags();
if ($posttags) {
foreach($posttags as $tag) {
echo $tag->name . ' ';
}
}
?>" />Но вы можете предварительно его заказать:
<div class="buyautograph">
<p class="marginpyes"><input style="margin-top: -13px;padding: 8px!important;" class="inputsubscribe subscribefont" type="text" name="email" id="email" size="25" maxlength="255" value="" placeholder="Введите ваш E-mail"/><br>
<input style="margin-top: -25px; margin-bottom: 0px;padding: 8px!important;" class="inputsubscribe subscribefont" type="text" value="" name="fio" id="name"size="25" maxlength="255" placeholder="Введите ваше Имя"/><br>
<button id="img_button" type="submit" class="subscribenews" name="send">Заказать</button></p>
</div>
</div>
<div class="godirectory" style="margin-top: 15px; width:285px;">
<a style="color:#ffffff;" href="../cat/">
<div class="subscribenews" style="width: 255px;margin: 140px 15px;font-size: 18px!important;line-height: 30px;text-shadow: 1px 1px 0px #333;">
Посмотреть весь<br/>каталог
</div>
</a>
</div>
</div>
</div>
</div>
</form>

Там еще проверка на заполнение полей есть но она jquery и к делу особого отношения не имеет думаю.

Link to comment
Share on other sites

  • 0

Может для начала отделить форму от содержимого? В любом случае это будет удобней. Вынеси отсылку сообщений в contanct.php и соотвественно action="contact.php"; А, хотя у тебя странице магазин имитирует.. Я просто делаю это на ajax чтобы не было перезагрузки и перехода на другую страницу.

Хотя я помню делала на новой странице) и тут клиент - а сделайте мне в том же окошке без перезагрузки - ну блин думаю, надо было сразу не халявить и ajax рисовать).

$('.fancybox').eq(0).trigger('click'); - что это интересно?

Edited by Zverushka
Link to comment
Share on other sites

  • 0

Может для начала отделить форму от содержимого? В любом случае это будет удобней. Вынеси отсылку сообщений в contanct.php и соотвественно action="contact.php"; А, хотя у тебя странице магазин имитирует.. Я просто делаю это на ajax чтобы не было перезагрузки и перехода на другую страницу.

Хотя я помню делала на новой странице) и тут клиент - а сделайте мне в том же окошке без перезагрузки - ну блин думаю, надо было сразу не халявить и ajax рисовать).

$('.fancybox').eq(0).trigger('click'); - что это интересно?

Это собственно как раз подключение красивого fancybox окошечка))

Ajax я думал, но что то сразу затупил, а теперь уже хочется этот вариант добить если выйдет))

Link to comment
Share on other sites

  • 0

Ну по меньше мере стоит обрабатывать данные формы не на той же не странице, а на другой - раз все равно пользователя в итоге перенаправляет на другую страницу. Мне кажется в этом случае проблема отпадет сама собой. Просто через javascript проверить данные формы на корректность.

Link to comment
Share on other sites

  • 0

Очень интересно, почему при обновлении браузер не просит разрешения на повторную отправку формы, а сам отправляет... даже не могу подсказать без теста в чем причина)

... Делай редирект(можно даже на ту же страницу), тогда проблема решиться. ридирект делается через header.

Могу ещё внимание обратить , что у форм есть важный атрибут - enctype

ещё и его стоило бы прописать

Edited by Николя223
Link to comment
Share on other sites

  • 0

А почту с заполненными полями второй раз отсылает? Или пустые?

Пустые
аз все равно пользователя в итоге перенаправляет на другую страницу.

Не, он на той же остается просто alert типа выскакивает если все окей.

Делай редирект(можно даже на ту же страницу)

Ну да, пока что только такой вариант оптимальный, блин жаль что никак по другому...

А как бы тогда сделать так что бы редиректилось на ту же страницу, но при этом всплывал поп ап уже на обновленной странице.

Link to comment
Share on other sites

  • 0

к окончанию страницы добавляй: ?send=true

и в коде:


if(isset($_GET['send'])){
if($_GET['send']=="true"){
echo " ";
}
}

либо примерно то же самое только в сессиях, или кукки

Edited by Николя223
Link to comment
Share on other sites

  • 0
Ну да, пока что только такой вариант оптимальный, блин жаль что никак по другому...

Почему же. Какая-то переменная должна быть обязательной к заполнению, сделай глобальное условие в php , чтобы код выполнялася, только если она не пустая.

И вот так тоже не пиши


$message .= $_POST["email"];
$message1 .= $_POST["message1"];

Код критически уязвим к взлому.

Пиши вот так

$message1 = addslashes(trim($_POST['message1 ']))

Одна удаляет пробелы (но это фигня), другая преобразует спец-символы в безопасные коды.

И если не уверен в безопасности своего кода, никогда не пиши вот так:


Как только $message1 появится

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By Only091
      Помогите пожалуйста, не получается сделать постраничную навигацию. Делал все по урокам. в Итоге получилось сделать два разных каталога один с фильтрами другой с постраничной навигацией. И теперь я пытаюсь объединить два каталога. Но не получается. Сами файлы урока в архике каталог. Буду очень благодарен если мне помогут! catalog.phpcatalogDB.js
      каталог.7z
    • By stonelabs
      Всем привет!

      Наша компания (https://stone-labs.com/) ищет команды (!) разработчиков для реализации ряда заказных проектов. Местоположение не важно - мы практикуем удаленную работу.
       
      Обязательные требования:
      Laravel или Symfony frameworks jQuery (UI), JavaScript, Ajax, Bootstrap MySQL REST API, опыт внедрения Third-party APIs английский на уровне чтения и понимания технической документации опыт в разработке веб приложений и их архитектуры с нуля корректное использование git & pull request flow работа в дневное время во временной зоне UTC +3  
      Будет плюсом, если у вашей команды есть:
      опыт с GitLab CI/CD, Jenkins опыт с MySQL Cluster, MongoDB, PostgreSQL, Redis опыт с Vue.js опыт Linux администрирования, SSH, Nginx, DevOps  
      Если вам интересно сотрудничество, пожалуйста, пишите на наш ящик wanted@stone-labs.com 
    • By Defroing
      <form method="POST" action= "action_handler.php" id="form"> <section class="table_1"> <table class="iksweb"> <tbody> <tr> <td rowspan="3"><b>История компании «Mc donald's»</b> <h3 class="the">Кто основал компанию «Mc donald's»?</h3> <section class="conteiner"> <div class="checkbox"> <input type="checkbox" class="i-6" id="i6" value="0" name="formDoor[]"> <label for="i6" tabindex="12">Роналд Макдоналд</label> </div> <div class="checkbox"> <input type="checkbox" class="i-6" id="i7" value="0" name="formDoor[]"> <label for="i7" tabindex="13">Рэй Крок</label> </div> <div class="checkbox"> <input type="checkbox" class="i-6" id="checkbox_68" value="1" name="formDoor[]"> <label for="checkbox_68" tabindex="14">Братья Дик и Мак Макдоналд</label> </div> <div class="checkbox"> <input type="checkbox" class="i-6" id="checkbox_170" value="0" name="formDoor[]"> <label for="checkbox_170" tabindex="14">Клинт Иствуд</label> </div> <div class="out-block out-6"></div> </section> </td> </tr> </tbody> </table> <div class="dsw"> <button class="b-6" tabindex="11" id="btn-1" type="submit" name="formSubmit">Отправить</button> </div> </form> <?php mysql_connect("localhost", "root", ""); mysql_select_db('olala') or die(mysql_error()); if(isset($_GET['submit'])){ $arr=$_GET; foreach ($arr as $key => $value) { $reg="/^check/";//отбираю нужные элементы if( preg_match ($reg,$key )) { //$new_mass[]=$arr[$key]; //print_r($new_mass); echo $arr[$key]; $sql_1="INSERT INTO `table_one` (`name`) VALUES('$arr[$key]')"; mysql_query($sql_1) or die(mysql_error()); } } } ?>  Создаю опросник и хочу, чтобы чекбоксы заносились в БД(таблицу пока не создавал). Хотелось узнать на счёт php кода, сможете подсказать, что в нём не так (дать какие нибудь советы). В openserver опросник пока не выкладывал.
    • By seoww
      Доброго времени суток. Я не сильно знающий веб-разработчик, но учусь. Начал создавать интернет магазин. Написал код самого сайта, посмотрел видео как делаются интернет-магазины и теперь не могу разобраться с PhpMyAdmin. Я не понимаю как она взаимодействует с сайтом. В интернете погуглил, так ничего дельного найти и не смог. Помогите пожалуйста.
      P.S сильно в меня камни не кидайте, я только учусь 
      Всем добра!
    • By Gmansurov
      Нужно отправить текст на сайт, не знаю как это сделать и не могу найти форумы по этим темам. Google Cloud Platform. Помогите пожалуйста.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy