2013-04-28 21 views
0

我已經基於http://rosstanner.co.uk/2012/11/build-simple-contact-form-html-php-bootstrap/PHP表單發送電子郵件。如何在頁面重新發布時維護表單中的值?

創建了一個html/php表單,它成功地驗證了表單並將發送郵件。但是,如果表單無效,則會將用戶返回到index.php,但會丟失它們輸入的表單值,這顯然是一個糟糕的用戶體驗。

我試圖用cookies來糾正這一點,但我有一種感覺,它是不好的做法,它似乎並沒有反正在iPhone上運行。任何建議如何我可以實現這一目標?

的index.php

 <h3><a name="book">Send a booking enquiry</a></h3> 

     <p>We are in the process of building a new booking system. In the mean 
     time please enter your details below and you will be contacted 
     shortly.</p> 
     <?php 

     $return_form_vals = array(); 

if (isset($_COOKIE['cookie'])) { 
foreach ($_COOKIE['cookie'] as $name => $value) { 
    $return_form_vals[htmlspecialchars($name)]=htmlspecialchars($value); 
    } 

      } 
     ?> 
     <div class="boostrap form item"> 
      <form action="contact-send.php" method="post"> 
      <fieldset> 
       <input class="textfield" name="your_name" placeholder= 
       "Enter your name" value="<?php echo $return_form_vals['your_name'];?>" type="text"><br> 
       <input class="textfield" name="phone_number" placeholder= 
       "Enter your phone number" type="text" value="<?php echo $return_form_vals['phone_number'];?>"><br> 
       <input class="textfield" name="email_address" placeholder= 
       "Enter your email address" type="text" value="<?php echo $return_form_vals['email_address'];?>"><br> 
       <input class="textfield" name="number_of_people" placeholder= 
       "Enter the number of people in your group" type="text" value="<?php echo $return_form_vals['number_of_people'];?>"><br> 
       <input id="start_date" class="textfield" type="date" name="start_date" placeholder= 
       "Enter the start date for your trip" type="text" value="<?php echo $return_form_vals['start_date'];?>"><br> 
       <input id="end_date" class="textfield" type="date" name="end_date" placeholder= 
       "Enter the end date for your trip" type="text" value="<?php echo $return_form_vals['end_date'];?>"><br> 
       <input name="save" type="hidden" value="contact"> <button class= 
       "btn btn-green" type="submit">Send</button> 
      </fieldset> 
      </form><?php 


        // check for a successful form post 
        if (isset($_GET['s'])){print_r($_GET['s']); echo "<div class=\"alert alert-success\">".$_GET['s']."</div>"; } 

        // check for a form error 
        elseif (isset($_GET['e'])) {echo "<div class=\"alert alert-error\">".$_GET['e']."</div>"; } 

      ?> 
     </div> 

接觸send.php

<?php 
if(!isset($_POST['save']) || $_POST['save'] != 'contact') 
{ 
    header('Location: index.php'); 
    exit; 
} 
$your_name = $_POST['your_name']; 
$phone_number = $_POST['phone_number']; 
$start_date = $_POST['start_date']; 
$end_date = $_POST['end_date']; 
$number_of_people = $_POST['number_of_people']; 
$email_address = $_POST['email_address']; 
/*$form_values = array(); 
$form_values['name'] = $your_name; 
$form_values['phone_number'] = $phone_number; 
$form_values['start_date'] = $start_date; 
$form_values['end_date'] = $end_date; 
$form_values['number_of_people'] = $number_of_people; 
$form_values['email_address'] = $email_address;*/ 

setcookie("cookie[your_name]",$_POST['your_name'],time()+10); 
setcookie("cookie[phone_number]",$_POST['phone_number'],time()+10); 
setcookie("cookie[start_date]",$_POST['start_date'],time()+10); 
setcookie("cookie[end_date]",$_POST['end_date'],time()+10); 
setcookie("cookie[number_of_people]",$_POST['number_of_people'],time()+10); 
setcookie("cookie[email_address]",$_POST['email_address'],time()+10); 

if(empty($your_name)) 
{ 
    $error = 'You must enter your name.'; 
} 
elseif(empty($phone_number)) 
{ 
    $error = 'You must enter a phone number.'; 
} 
elseif(empty($email_address)) 
{ 
    $error = 'You must enter your email address.'; 
} 
elseif(empty($start_date)) 
{ 
    $error = 'You must enter a start date.'; 
} 
elseif(empty($end_date)) 
{ 
    $error = 'You must enter an end date.'; 
} 
elseif(empty($number_of_people)) 
{ 
    $error = 'You must enter the number of people.'; 
} 
// check for a valid email address 
elseif(!preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/', $email_address)) 
{ 
    $error = 'You must enter a valid email address.'; 
} 
// check that a message was entered 
if(isset($error)) 
{ 
    header('Location: index.php?e=' . urlencode($error)); 
    exit; 
} 
$email_content .= "Email Address: $email_address\nName: $your_name\Phone Number: $phone_number\nStart Date: $start_date\End Date: $end_date\nNumber of People: $number_of_people\n"; 
// send the email 
mail("[email protected]", "Booking form entry", $email_content); 
mail("[email protected]", "Booking form entry", $email_content); 
// send the user back to the form 
header('Location: index.php?s=' . urlencode('Thank you for your booking enquiry. You will be contacted shortly.')); 
exit; 
?> 

回答

0

我建議讓您的數據在$_SESSION['name']=$value;,而不是$_COOKIE 爲了防止submiting錯誤的數據,你可以使用jQuery驗證link和submiting表格前檢查用戶輸入。然後你可以注意到用戶插入有效信息到每個字段。 例如:link

防止submiting空的,但需要的表單字段,你可以使用HTML屬性required 例如

<input class="textfield" name="your_name" placeholder= 
       "Enter your name" value="<?php echo $return_form_vals['your_name'];?>" type="text" required="required"><br> 

形式將不允許用戶提交之前,所有必填字段填寫

+0

所需=」所需「是非常優雅的解決方案! – weaveoftheride 2013-04-29 07:51:06

0

你應該嘗試使用$ _SESSION代替餅乾。 這是那麼容易,因爲

$_SESSION['key'] = $value; 

但是,當用戶關閉瀏覽器表單後再次談到將被清除。 因此,請考慮將該數據存儲在文件或數據庫中。您可以通過IP識別用戶。

相關問題