2014-02-17 3 views
0

У меня есть HTML-форма, которая обрабатывается с помощью PHP. Я хотел бы показать сообщение, чтобы пользователь знал, что форма отправлена ​​успешно. На данный момент я не против, если страница перезагружается или нет. Я бы просто хотел «Успех!». сообщение появится после отправки формы.Как отобразить сообщение после того, как форма успешно отправлена ​​

Любая помощь будет замечательной!

PHP

<?php 
$errors = array(); 
$missing = array(); 
if (isset($_POST['submit'])) { 
    $to = '[email protected]'; 
    $subject = 'Web Design'; 
    $expected = array('name', 'company', 'email', 'phone', 'contactYou', 'interest', 'budget', 'comments'); 
    $required = array('name', 'email', 'contactYou', 'interest', 'budget', 'comments'); 
    $headers = "From: [email protected]\r\n"; 
    $headers .= "Content-type: text/plain; charset=utf-8"; 
    $authenticate = '[email protected]'; 
    require './_includes/mail_process.php'; 
    if ($mailSent) { 
     header('Location: index.php#c'); 
     exit; 
    } 
} 
?> 

HTML

<div id="contactBox"> 

      <form name="contact" id="contactForm" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
       <div id="formLeft"> 
        <p> 
         <label for="name">Name</label> 
         <?php if ($missing && in_array('name', $missing)) { ?> 
         <div class="warningDivLeft"> 
         <span class="warning">Please enter your name</span> 
         </div>        
         <?php } ?> 
         <input type="text" name="name" id="name" tabindex="10" 
         <?php 
         if ($errors || $missing) { 
          echo 'value="' . htmlentities($name, ENT_COMPAT, 'utf-8') . '"'; 
         } 
         ?>  
         > 
        </p> 
        <p>       
         <label for="company">Company Name/Website</label> 
         <input type="text" name="company" id="company" tabindex="30" 
         <?php 
         if ($errors || $missing) { 
          echo 'value="' . htmlentities($company, ENT_COMPAT, 'utf-8') . '"'; 
         } 
         ?>  
         > 
        </p> 
        <p>       
         <label for="email">Email</label> 
         <?php if ($missing && in_array('email', $missing)) { ?> 
         <div class="warningDivLeft"> 
         <span class="warning">Please enter your email</span> 
         </div> 
         <?php } elseif (isset($errors['email'])) { ?> 
         <div class="warningDivLeft"> 
         <span class="warning">Invalid email address</span> 
         </div> 
         <?php } ?> 
         <input type="email" name="email" id="email" tabindex="40" 
         <?php 
         if ($errors || $missing) { 
          echo 'value="' . htmlentities($email, ENT_COMPAT, 'utf-8') . '"'; 
         } 
         ?>  
         > 
        </p> 
        <p>       
         <label for="phone">Phone</label> 
         <input type="text" name="phone" id="phone" tabindex="50" 
         <?php 
         if ($errors || $missing) { 
          echo 'value="' . htmlentities($phone, ENT_COMPAT, 'utf-8') . '"'; 
         } 
         ?>  
         > 
        </p> 
        <p>       
         <label for="contactYou">Contact you by...</label> 
         <?php if ($missing && in_array('contactYou', $missing)) { ?> 
         <div class="warningDivLeft"> 
         <span class="warning">Please select one</span> 
         </div> 
         <?php } ?> 
         <select name="contactYou" size="1" id="contactYou" tabindex="60"> 
          <option value="" selected="selected">- select</option> 
          <option value="email" <?php echo ($contactYou == 'email') ? ' selected="selected"' : ''; ?>>Email</option> 
          <option value="phone" <?php echo ($contactYou == 'phone') ? ' selected="selected"' : ''; ?>>Phone</option> 
         </select> 
        </p> 
       </div> 
       <div id="formRight"> 
        <p> 
         <label for="interest">I am interested in...</label> 
         <?php if ($missing && in_array('interest', $missing)) { ?> 
         <div class="warningDiv"> 
         <span class="warning">Please select one</span> 
         </div> 
         <?php } ?> 
         <select name="interest" size="1" id="interest" tabindex="80"> 
          <option value="" selected="selected">- select</option> 
          <option value="new" <?php echo ($interest == 'new') ? ' selected="selected"' : ''; ?>>Creating a new website</option> 
          <option value="current" <?php echo ($interest == 'current') ? ' selected="selected"' : ''; ?>>Redesigning a current website</option> 
          <option value="responsive" <?php echo ($interest == 'responsive') ? ' selected="selected"' : ''; ?>>Reponsive web design</option> 
          <option value="wordpress" <?php echo ($interest == 'wordpress') ? ' selected="selected"' : ''; ?>>A WordPress website</option> 
          <option value="general" <?php echo ($interest == 'general') ? ' selected="selected"' : ''; ?>>General enquiry</option> 
         </select> 
        </p> 
        <p> 
         <label for="budget">My budget is...</label> 
         <?php if ($missing && in_array('budget', $missing)) { ?> 
         <div class="warningDiv"> 
         <span class="warning">Please select one</span> 
         </div> 
         <?php } ?> 
         <select name="budget" size="1" id="budget" tabindex="90"> 
          <option value="" selected="selected">- select</option> 
          <option value="100" <?php echo ($budget == '100') ? ' selected="selected"' : ''; ?>>€100 - €500</option> 
          <option value="500" <?php echo ($budget == '500') ? ' selected="selected"' : ''; ?>>€500 - €1,000</option> 
          <option value="1000" <?php echo ($budget == '1000') ? ' selected="selected"' : ''; ?>>€1,000 - €2,000</option> 
          <option value="2000" <?php echo ($budget == '2000') ? ' selected="selected"' : ''; ?>>€2,000 - €5,000</option> 
          <option value="5000" <?php echo ($budget == '5000') ? ' selected="selected"' : ''; ?>>€5,000 - €10,000</option> 
          <option value="10000" <?php echo ($budget == '10000') ? ' selected="selected"' : ''; ?>>€10,000+</option> 
         </select> 
        </p> 
        <p> 
         <label for="comments">How can I help you?</label> 
         <?php if ($missing && in_array('comments', $missing)) { ?> 
         <div class="warningDiv"> 
         <span class="warning">Please leave a comment</span> 
         </div> 
         <?php } ?> 
         <textarea name="comments" id="comments" cols="45" rows="5" tabindex="100"><?php 
         if ($errors || $missing) { 
          echo htmlentities($comments, ENT_COMPAT, 'utf-8'); 
         } 
         ?></textarea> 
        </p> 
       </div> 
       <div id="formSubmit"> 
        <ul> 
         <li> 
          <input type="submit" name="submit" id="submit" value="Send Message" tabindex="70"> 
         </li> 
        </ul> 
       </div> 
        </form> 
     </div> 

mail_process.php

<?php 
$suspect = false; 
$pattern = '/Content-Type:|Bcc:|Cc:/i'; 

function isSuspect($val, $pattern, &$suspect) { 
    if (is_array($val)) { 
     foreach ($val as $item) { 
      isSuspect($item, $pattern, $suspect); 
     } 
    } else { 
     if (preg_match($pattern, $val)) { 
      $suspect = true;  
     } 
    } 
} 

isSuspect($_POST, $pattern, $suspect); 

if (!$suspect) { 
    foreach ($_POST as $key => $value) { 
     $temp = is_array($value) ? $value : trim($value); 
     if (empty($temp) && in_array($key, $required)) { 
      $missing[] = $key; 
      $$key = ''; 
     } elseif(in_array($key, $expected)) { 
      $$key = $temp; 
     } 
    } 
} 

if (!$suspect && !empty($email)) { 
    $validemail = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); 
    if ($validemail) { 
     $headers .= "\r\nReply-to: $validemail"; 
    } else { 
     $errors['email'] = true; 
    } 
} 

if (!$suspect && !$missing && !$errors) { 
    $message = ''; 
    foreach ($expected as $item) { 
     if (isset($$item) && !empty($$item)) { 
      $val = $$item; 
     } else { 
      $val = 'Not selected'; 
     } 
     if (is_array($val)) { 
      $val = implode(', ', $val); 
     } 
     $item = str_replace(array('_', '-'), ' ', $item); 
     $message .= ucfirst($item) . ": $val\r\n\r\n"; 
    } 
    $message = wordwrap($message, 70); 

    $mailSent = mail($to, $subject, $message, $headers, $authenticate); 
    if (!$mailSent) { 
     $errors['mailfail'] = true; 
    } 
} 
+3

Ну, а не перенаправляясь на другую страницу, вы можете отобразить сообщение. – idmean

+0

Спасибо за ваш комментарий. Как мне это сделать? – ineedhalp

ответ

2

Вместо:

header('Location: index.php#c'); 

перейти к:

header('Location: ' . $_SERVER['REQUEST_URI'] . '?success=1'); 

затем добавить:

if (isset($_GET['success'])) print 'Message sent!'; 

в любом месте вы хотите.

+0

Спасибо! Это сработало! Однако теперь страница перезагружается в верхней части страницы. Мой сайт - это сайт на одну страницу, и нажатие на каждый пункт меню приводит вас к другому разделу страницы. Моя контактная форма находится на самом дне. Как я могу вернуться в тот же раздел контактов после перезагрузки страницы или, еще лучше, просто получить сообщение, чтобы оно не было перезагружено? Спасибо. – ineedhalp

+0

Ну, оператор '#' сообщает веб-странице прокручивать вниз до этого идентификатора. Таким образом, вы можете на самом деле поместить 'header ('Location:'. $ _SERVER ['REQUEST_URI']. '? Success = 1 # c');' и после обновления страница будет прокручиваться вниз до этого раздела. Затем в этом разделе вы можете распечатать сообщение об успешном завершении.Другой вариант - НЕ использовать перенаправление заголовка и вместо этого просто печатать сообщение, например «die» («Спасибо, ваше сообщение отправлено. Нажмите BACK to return»); ' – degenerate

+0

Большое вам спасибо! Это сработало отлично. У меня есть еще одна проблема. Когда форма отправляется с ошибкой, такой как обязательное поле остается пустым, страница перезагружается в начало страницы, а не перезагружается в тот же раздел страницы, чтобы пользователь мог видеть сообщения об ошибках. Я думаю, что он работал так раньше, но новый код, возможно, изменил ситуацию. Спасибо. – ineedhalp

0

$_GET работает, но он всегда будет присутствовать, если они вернуться к ссылке в их истории (нажав их историю, браузер обратно или обновить)

Вы можете установить $_SESSION в случае успеха, а затем перенаправить на другую страницу (например, thanks.php).

В thanks.php, если сеанс установлен и какие бы критерии вы ни выбрали, эхо-эхо их сообщение зависит от данных в сеансе.

Затем отмените сеанс.

Таким образом, если они нажимают на ссылку и вернуться на страницу thanks.php, ваш сценарий будет показывать сессию не установлен, и поэтому может дать общее сообщение:

Эта страница для подтверждение отправки материала. Ты здесь, когда ты обновил страницу или воспользовался кнопкой «Назад». В рамках процедур безопасности, мы очищаем данные один раз послали и подтвердили, и т.д.

Обновления thanks.php, баловаться с данными GET, и т.д., и т.д., не будет ничего делать. Сеанс не установлен, они получают дружественное общее сообщение.

Смежные вопросы