0

http://rosstanner.co.uk/2012/11/build-simple-contact-form-html-php-bootstrap/に基づいて html / php フォームを作成しました

フォームが正常に検証され、メールが送信されます。ただし、フォームが無効化された場合、ユーザーは index.php に戻されますが、入力したフォームの値は失われます。これは明らかにユーザーが経験した悪いことです。

私はこれを修正するためにクッキーを使用しようとしましたが、私はその悪い習慣を感じており、とにかく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>

contact-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("g@gmail.com", "Booking form entry", $email_content);
mail("m@gmail.com", "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;
?>
4

2 に答える 2

0

間違ったデータを送信するのを防ぐために、フォームを送信する前にjQuery検証リンクを使用してユーザー入力を確認する$_SESSION['name']=$value;代わりに、データを保持することをお勧めします。次に、ユーザーが各フィールドに有効な情報を挿入することに気付くことができます。例:リンク$_COOKIE

空の必須フォームフィールドの送信を防ぐにrequired は、たとえば HTML 属性を使用できます

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

フォームは、すべての必須フィールドが入力される前にユーザーが送信することを許可しません

于 2013-04-28T09:43:27.217 に答える