2014-02-17 31 views
0

后,我有与PHP处理的HTML表单显示一条消息。我想显示一条消息让用户知道表单已成功提交。现在我不介意页面是否重新加载。我只想要一个'成功'!消息一旦提交表单就会出现。如何形成已成功提交

任何帮助将是伟大的!

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

那么'#'操作符告诉网页向下滚动到那个ID。所以,实际上你可以放'头(“位置:”。$ _ SERVER [“REQUEST_URI”]“?成功= 1#C”);'和刷新后,页面会向下滚动到该节。然后在该部分中,您可以打印成功消息。另一种选择是不使用头部重定向,而是只是打印一条信息,比如'die('谢谢,你的信息已经发送,按BACK返回');' – degenerate

+0

非常感谢!这工作完美。我只有一个问题。当提交表单时出现错误(例如必填字段为空)时,页面会重新加载到页面的顶部,而不是重新加载到页面的相同部分,以便用户可以看到错误消息。我认为它以前是这样工作的,但是新的代码可能改变了事情。谢谢。 – ineedhalp

0

$_GET的作品,但它总是存在的,如果他们重新审视在他们的历史链接(点击他们的历史,浏览器后退,或刷新)

您可以设置在成功$_SESSION,然后重定向到另一个页面(例如thanks.php)。

在thanks.php如果会话设置,以及你希望的任何标准,回声出来什么消息是有关在会话中的数据。

然后取消设置会话。

这样,如果他们点击一个链接,然后回来给thanks.php页面,你的脚本将显示会话没有设置,因此可以产生一个通用的消息:

这页是确认发送东西。当您在 刷新页面或使用浏览器后退按钮时,您就在这里。作为 安全程序的一部分,我们清除数据发送一次,确认等

刷新thanks.php,用GET数据搞乱,等,等,不会做任何事情。会议没有设置,他们得到友好的通用信息。