2014-02-17 56 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數據搞亂,等,等,不會做任何事情。會議沒有設置,他們得到友好的通用信息。