Страница 1 из 1

Проблема с формой обратной связи

Добавлено: Чт окт 30, 2014 23:43
boryspil
Необходимо было создать что-то наподобие формы обратной связи, где пользователь вводил бы некоторые данные, которые затем бы отсылались на почту. Так как я далек от веб-программирования, то нашел вот тут http://www.seomark.ru/forma.html подходящий скрипт и немного его "допилил" под свои нужды. Добавил всего две формы для ввода данных и скрипт стал неверно отправлять данные (см. ниже)

Вот код самой формы для заполнения :

<form method="post" action="mail.php">
<strong>Имя:</strong><br />
<input type="text" name="name" size="30"/>
<br />
<strong>Телефон:</strong><br />
<input name="phone" type="text" size="30" />
<br />
<strong>Проживаете в:</strong><br />
<input name="city" type="text" size="30" />
<br />
<strong>Ваше сообщение:</strong><br />
<textarea name="mess" rows="3" cols="25"></textarea>
<p>
<input type="submit" value="Отправить сообщение"/>
</p>
</form>

А вот сам скрипт :

<?php
if (isset($_POST['name'])) {$name = $_POST['name'];}
if (isset($_POST['phone'])) {$city = $_POST['phone'];}
if (isset($_POST['city'])) {$mess = $_POST['city'];}
if (isset($_POST['mess'])) {$mess = $_POST['mess'];}

$to = "my@mail.ru"; /*Укажите ваш адрес электоронной почты*/
$headers = "Content-type: text/plain; charset = UTF-8";
$subject = "Сообщение с вашего сайта";
$message = "Имя: $name \nТелефон: $phone \nГород: $city \nСообщение: $mess";
$send = mail ($to, $subject, $message, $headers);
if ($send == 'true')
{
echo "<b>Ваше сообщение отправлено ! Мы свяжемся с вам в ближайшее время.<p>";
echo "<a href=index.html>Нажмите,</a> чтобы вернуться на главную страницу";
}
else
{
echo "<p><b>Ошибка. Сообщение не отправлено!";
}
?>

Результат исполнения скрипта при заполнении всех полей выглядит так :

Имя: Олег
Телефон:
Город: 0998787654
Сообщение: Текст

На самом деле поля заполнялись так :

Имя: Олег
Телефон: 0998787654
Город: Киев
Сообщение: Текст

Re: Проблема с формой обратной связи

Добавлено: Пт окт 31, 2014 10:07
bj
На этом участке кода, была ошибка

Код: Выделить всё

if (isset($_POST['name'])) {$name = $_POST['name'];}
if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
if (isset($_POST['city'])) {$city = $_POST['city'];}
if (isset($_POST['mess'])) {$mess = $_POST['mess'];}
Замените свой код на этот.

Re: Проблема с формой обратной связи

Добавлено: Пн янв 05, 2015 18:21
Профан
Дабы не плодить однородных тем:

Есть форма:

Код: Выделить всё

         <form method="post" action="send.php">
          <label for="name">Имя*:</label>
           <input name="name" class="required input_field" />
            <div class="cleaner_h10">
            </div>
          <label for="email">Email*:</label>
           <input name="email" class="validate-email required input_field" />
            <div class="cleaner_h10">
            </div>
          <label for="theme">Тема*:</label>
           <input name="theme" class="validate-email required input_field" />
            <div class="cleaner_h10">
            </div>
          <label for="message">Сообщение*:</label>
           <textarea name="message" class="required" maxlength="3600" value="">
           </textarea>
            <div class="cleaner_h10">
            </div>
           <input type="submit" class="submit_btn" name="submit" onclick="return checkAll()" value="Отправить" />
           <input type="reset" class="reset_btn" name="reset" value="Очистить" />
         </form> 
Есть JS-скрипт для проверки правильности заполнения полей:

Код: Выделить всё

//validate 0//
function isValidName ( str ) { 
if (str == "") { 
alert ("Укажите Ваше имя"); 
return false; 
} 
return true; 
}
//validate 1// 
function isValidEmailAddress ( str ) { 
if (str == "") { 
alert ('Укажите корректный e-mail адрес'); 
return false; 
} 
else if ( str.indexOf ( " " , 0) != -1 || str. indexOf ( "@" ,3 ) == -1 || str. indexOf ( "." , 6) == -1 ) { 
alert("Ошибка: " + str + ". Вы уверены, что это действительно Ваш адрес?" ); 
return false; 
} 
return true; 
} 
//validate 2//
function isValidTheme ( str ) { 
if (str == "") { 
alert ("Укажите тему сообщения"); 
return false; 
} 
return true; 
} 
//validate 3//
function isValidNotes ( str ) { 
if (str == "") { 
alert ("Введите текст сообщения"); 
return false; 
} 
return true; 
}
function checkAll () { 
form = document.forms[0]; 
//check for 0//
if (!isValidName(form.elements[0].value)) {form.elements[0].focus(); return false;
} 
//check for 1//
if (!isValidEmailAddress(form.elements[1].value)) {form.elements[1].focus(); return false;
} 
//check for 2//
if (!isValidTheme(form.elements[2].value)) {form.elements[2].focus(); return false;
} 
//check for 3//
if (!isValidNotes(form.elements[3].value)) {form.elements[3].focus(); return false;
}
alert ("Спасибо, мы вскоре с Вами свяжемся!");
}
Проблема в том, что первые три поля (имя, е-mail и тема) валидацию проходят. Но после этого, при незаполненном поле "сообщение" появляется модальное окно "Спасибо, мы вскоре с Вами свяжемся!" (конец обработки данных) и происходит отправка данных.

Что не так, подскажите пожалуйста!

Заранее благодарен!

Re: Проблема с формой обратной связи

Добавлено: Пн янв 05, 2015 23:30
bj
У Вас сообщение ""Спасибо, мы вскоре с Вами свяжемся!"" выводится безусловно.
Как вариант - создать переменную-флаг, в которую можно будет записывать результаты работы функций проверки состояния полей. При отрицательном результате проверки, присвоить флагу значение "ложно", прекратить дальнейшую проверку (т.к. все поля обязательны к заполнению, и если хоть одно не проходит валидацию, остальные проверять нет смысла), передать работу функции по выводу сообщений и вывести соответствующее сообщение.

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