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

Статус
В этой теме нельзя размещать новые ответы.

honuryk

Постоялец
Регистрация
13 Ноя 2006
Сообщения
126
Реакции
9
Здравствуйте, есть форма обратной связи, вот застопорился на одном моменте и ничего сделать не могу!!!



PHP:
<?php 
function show_form() 
{ 
?> 
<form action="" method=post> 
<div align="center"> 
              <br />Имя*<br /> 
              <input type="text" name="name" size="40"> 
              <br />Контактный телефон<br /> 
              <input type="text" name="tel" size="40"> 
              <br />Контактный email*<br /> 
              <input type="text" name="email" size="40"> 
              <br />Teма<br /> 
              <input type="text" name="title" size="40"> 
              <br />Сообщение*<br /> 
              <textarea rows="10" name="mess" cols="30"></textarea> 
              <br /><input type="submit" value="Отправить" name="submit"> 
</div> 
</form> 
* Помечены поля, которые необходимо заполнить 
<? 
} 

function complete_mail() { 
        // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и  substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменных $_POST['mess'], $_POST['name'], $_POST['tel'], $_POST['email'] все аналогично
        $_POST['title'] =  substr(htmlspecialchars(trim($_POST['title'])), 0, 1000); 
        $_POST['mess'] =  substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000); 
        $_POST['name'] =  substr(htmlspecialchars(trim($_POST['name'])), 0, 30); 
        $_POST['tel'] =  substr(htmlspecialchars(trim($_POST['tel'])), 0, 30); 
        $_POST['email'] =  substr(htmlspecialchars(trim($_POST['email'])), 0, 50); 
        // если не заполнено поле "Имя" - показываем ошибку 0 
        if (empty($_POST['name'])) 
             output_err(0); 
        // если неправильно заполнено поле email - показываем ошибку 1 
        if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email'])) 
             output_err(1); 
        // если не заполнено поле "Сообщение" - показываем ошибку 2 
        if(empty($_POST['mess'])) 
             output_err(2); 
        // создаем наше сообщение 
        $mess = ' 
Имя отправителя:'.$_POST['name'].' 
Контактный телефон:'.$_POST['tel'].' 
Контактный email:'.$_POST['email'].' 
'.$_POST['mess']; 
        // $to - кому отправляем 
        $to = 'test@test.ru'; 
        // $from - от кого 
        $from='test@test.ru'; 
        mail($to, $_POST['title'], $mess, "From:".$from); 
        echo 'Спасибо! Ваше письмо отправлено.'; 
} 

function output_err($num) 
{ 
    $err[0] = 'ОШИБКА! Не введено имя.'; 
    $err[1] = 'ОШИБКА! Неверно введен e-mail.'; 
    $err[2] = 'ОШИБКА! Не введено сообщение.'; 
    echo '<p>'.$err[$num].'</p>'; 
    show_form(); 
    exit(); 
} 

if (!empty($_POST['submit'])) complete_mail(); 
else show_form(); 
?>

Собственно проблема именно в выводе ошибки при не введенном поле или двох обязательных...

То есть если человек не вводит данные в два поля, показывается только одна ошибка, мол Вы не ввели Имя!!!!


И еще вопрос, я создал выпадающее меню в форме

PHP:
<select name="name" id="name">
          <option selected></option>
          <option>1</option>
          <option>2</option>
          <option>3</option>
          <option>4</option>
</select>

И например когда пользователь ввел данные и нажал отправить, но выбила ошибка, как сделать что бы данные в форме не очищались...

Для input сделал, а вот для select что-то не получается :(
 
То есть если человек не вводит данные в два поля, показывается только одна ошибка, мол Вы не ввели Имя!!!!

Потому что в функции output_err, после вывода ошибки и формы, стоит exit
Надо сначала показать все ошибки, потом вывести форму и уже потом выходить.
А еще лучше переписать проверку на JavaScript, чтобы проверка на заполнения шла еще до нажатия кнопки "Отправить".

И еще вопрос, я создал выпадающее меню в форме
И например когда пользователь ввел данные и нажал отправить, но выбила ошибка, как сделать что бы данные в форме не очищались...
можно так:
PHP:
<?

$select_mem = 5;
$selects = array(1,2,3,4,5);

echo '<select>';
foreach($selects as $select) {
    if($select == $select_mem) {
        echo '<option value="'.$select.'" SELECTED>'.$select.'</option>';
    } else {
        echo '<option value="'.$select.'">'.$select.'</option>';
    }
}
echo '</select>';
?>
 
можешь на примере показать, как это должно быть по 1му вопросу ?
 
можешь на примере показать, как это должно быть по 1му вопросу ?
вот пример, остальные поля делать по аналогии...
пока не введешь имя, кнопку просто не даст нажать
PHP:
<html>
<head>
<script language="JavaScript">
function checkform() {
  if (document.regform.text.value == '') {
    alert("Please enter your full name!");
    document.regform.text.focus();
    return false;
  }
  return true;
}
</script>
</head>
<body>
<form name="regform" action="http://yandex.ru/yandsearch" onsubmit="return checkform()">
Your Full Name:
<input type="text" name="text" value="">
<input type="submit" value="Register">
</form>
</body>
</html>
 
вот более расширенный пример...

PHP:
<form action="имя_скрипта" name="Form1" onsubmit="return Filled()">
<input type=text name="name">
<input type=text name="email">
<input type=submit value="OK"
</form>
 
function Filled() {
if document.Form1.name.value=""  
{
alert ("Введите имя");
return false;
}
if document.Form1.email.value != ""
{
valid_chars  ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
valid_chars += "1234567890";
valid_chars += "-@_.";
str=document.form1.email.value;
valid_string = true;
    for(i=0; i < str.length; i++ )
     {
       current_valid_char = false;
       for(j=0; j < valid_chars.length; j++)
         {
           if(str.charAt(i) == valid_chars.charAt(j))
             {
               current_valid_char = true;
             }
         }
       if(current_valid_char == false)
         {
          valid_string = false;
         }
     }
     return valid_string;
   }
else
{
    return false;
}

А вообще почитайте про регулярные выражения на javascript, можно любую фильтрацию сделать.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху