1 (14.12.2012 10:01:22 отредактировано marikk)

Всем привет. Подскажите пожалуйста как избавится от следующей подлянки.

    
 <-- форма для заполнения -->
                 
<form action="" method=post id="form" name="form">
   <div id="tname" style="color: red;">Введите Ваше имя:*</div>
    <div class="h2"><input type="text" name="name" onBlur="testName ()"/></div>
   
   Введите Ваш E-mail:
    <div class="h2"><input type="text" name="email"/></div>
   
   Введите Ваш город:
    <div class="h2"><input type="text" name="city"/></div>
   
  <div id="tmessage" style="color: red;">Ваше сообщение:*</div>
   <textarea rows="40" cols="30" name="message"  onBlur="testMg ()"></textarea>

   <a href="#" class="link2" onclick="document.getElementById('form').reset()">Очистить</a> &nbsp; &nbsp; &nbsp; <a href="#" class="link2"  onclick="document.getElementById('form').submit();">Отправить</a>
   <br class="clear" />

</form>
   <div id="nameN" class="error" style="display:none;">Имя не указано или указано неправильно</div>
   <div id="nameM" class="error" style="display:none;">Сообщение не может быть пустым</div>

<-- php код отправки -->

<?php
   if (strlen($_POST['name']) > 0 && strlen($_POST['message']) > 0) {
      $ml = "xxx@freemail.ru";
      $hd= "From Site";
      $mg = "Имя: ".$_POST['name'].". Город: ".$_POST['city'].". Обратный адрес: ".$_POST['email'].". Сообщение: ".$_POST['message'];
      if (mail($ml, $hd, $mg)) 
         echo "<div class=\" good \">Сообщение успешно отправлено</div>";
      else 
         echo "<div class=\" error \">Сообщение не может быть отправлено. Попробуйте позже</div>";
   }
?>

  После заполнения формы и нажатия кнопки отправить, браузер обновляет страницу и передает параметры $_POST['name'] и тд. Ниже формы выводится результат выполнения php кода - успешно или ошибка. 
  Все отрабатывает отлично, но если пользователь обновит страницу, php код отработает повторно, это связано с повторной отправкой значений формы. Можно ли как-нибудь пресечь это ?

2

При отправке письма устанавливать cookies и в php поставить условие "при наличие cookies не выполнять скрипт". Может еще как-нибудь можно  ?

3 (14.12.2012 16:09:41 отредактировано voral)

Последним аккордом работы вашего скрипта сделайте следующее:
1. Занесите в переменную сессии нужное сообщение
2. Команду

header("Location: <ваш_скрипт>");

В начале скрипта. Проверяйте наличие сообщения в переменных сесии. Выводите куда надо, а потом unset($_SESSION['your_var_name']);

То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me".
GNU/Linux Debian

4

voral пишет:

Последним аккордом работы вашего скрипта сделайте следующее:
1. Занесите в переменную сессии нужное сообщение
2. Команду

header("Location: <ваш_скрипт>");

В начале скрипта. Проверяйте наличие сообщения в переменных сесии. Выводите куда надо, а потом unset($_SESSION['your_var_name']);

Спасибо что про сессии напомнили. Появилась одна мыслишка, как сделаю отпишусь.

5 (17.12.2012 11:51:59 отредактировано marikk)

При успешном отправлении сообщение в переменную сессии запихнул md5 сообщения, в начале скрипта происходит сравнение, чтоб одинакового не слали. Все работает как нужно, еще раз Спасибо.