2014-09-05 39 views
1

因此,我嘗試爲我的網上商店製作一個PHP表單,客戶可以在其中輸入他們的姓名,地址,電子郵件地址......但驗證似乎無法正常工作。它始終停留在同一頁面(而不是轉到insert.php文件),就好像輸入的數據是錯誤的,即使它不是。對於不在線的店鋪進行PHP表單驗證

<?php 
$nameErr = $emailErr = $codeErr = $cityErr = $streetErr = $fakturaErr = ""; 
$name_ok = $email_ok = $code_ok = $city_ok = $street_ok = 0; 
$name = $email = $code = $city = $street = $info = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

    if (empty($_POST["name"])) { 
     $nameErr = "Pole wymagane"; 
    } 
    else{ 
     $name = test_input($_POST["name"]); 
    // check if name only contains letters and whitespace 
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
      $nameErr = "Dozwolone tylko litery"; 
     } 
     else{ 
      $name_ok=1; 
     } 
    } 

    if (empty($_POST["code"])) { 
     $codeErr = "Pole wymagane"; 
    } 
    else { 
     $code = test_input($_POST["code"]); 
    // check if name only contains letters and whitespace 
     if (!preg_match("/^[0-9 ]*$/",$code)) { 
      $codeErr = "Niewłaściwy format kodu"; 
     } 
     else{ 
      $code_ok=1; 
     } 
    } 

    if (empty($_POST["city"])) { 
     $cityErr = "Pole wymagane"; 
    } 
    else{ 
     $city = test_input($_POST["city"]); 
    // check if city only contains letters and whitespace 
     if (!preg_match("/^[a-zA-Z ]*$/",$city)) { 
      $cityErr = "Dozwolone tylko litery"; 
     } 
     else{ 
      $city_ok=1; 
     } 
    } 

    if (empty($_POST["street"])) { 
     $streetErr = "Pole wymagane"; 
    } 
    else { 
     $street = test_input($_POST["street"]); 
    // check if name only contains letters and whitespace 
     if (!preg_match("/^[a-zA-Z ]*$/",$street)) { 
      $streetErr = "Dozwolone tylko litery"; 
     } 
     else{ 
      $street_ok=1; 
     } 
    } 



    if (empty($_POST["email"])) { 
     $emailErr = "Email is required"; 
    } 
    else { 
     $email = test_input($_POST["email"]); 
    // check if e-mail address is well-formed 
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
      $emailErr = "Niewłaściwy format adresu e-mail"; 
     } 
     else{ 
      $email_ok=1; 
     } 
    } 

    $action = ""; 
    if($name_ok==1 && $code_ok==1 && $city_ok==1 && $street_ok==1 && $email_ok==1) { 
     $action = "insert.php"; 
    } 
    else { 
     $action = "#"; 
    } 

    /*if (empty($_POST["comment"])) { 
    $comment = ""; 
    } else { 
    $comment = test_input($_POST["comment"]); 
    } 

    if (empty($_POST["gender"])) { 
    $genderErr = "Gender is required"; 
    } else { 
    $gender = test_input($_POST["gender"]); 
    } 
    */ 
} 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

?> 


<div class="all"> 
    <form action="<?php echo $action; ?>" method="post"> 
     <font color="#A20B0B">*Pola wymagane</font><br><br> 

     Imię i nazwisko: <input type="text" name="name"> 
     <span class="error"><font color="#A20B0B">* <?php echo $nameErr;?></font></span> 
     <br><br> 

     Kod pocztowy: 
     <input type="text" name="code"> 
     <span class="error"><font color="#A20B0B">* <?php echo $codeErr;?></font></span> 
     <br><br> 

     Miasto: 
     <input type="text" name="city"> 
     <span class="error"><font color="#A20B0B">* <?php echo $cityErr;?></font></span> 
     <br><br> 

     Ulica: 
     <input type="text" name="street"> 
     <span class="error"><font color="#A20B0B">* <?php echo $streetErr;?></font></span> 
     <br><br> 

     E-mail: 
     <input type="text" name="email"> 
     <span class="error"><font color="#A20B0B">* <?php echo $emailErr;?></font></span> 
     <br><br> 

     <label>Dodatkowe informacje: <textarea name="info" rows="5" cols="40"></textarea> 
     <br><br> 

     Faktura: 
     <input type="radio" name="faktura" value="tak">Tak 
     <input type="radio" name="faktura" value="nie">Nie 
     <span class="error"><font color="#A20B0B">* <?php echo $fakturaErr;?></font></span> 
     <br><br> 

     <input type="submit" name="submit" value="Submit" id="register" disabled> 
    </form> 

</div> 
+0

你有這個問題,你的Err變量的內容是什麼? – 2014-09-05 12:09:58

+0

如果連續兩次正確輸入所有內容會發生什麼?你可以試試嗎? – 2014-09-05 12:12:29

回答

0

在您檢查輸入是否有效之後,您會提交輸入值如果沒有重定向到下一個索引頁面。

根據你的代碼$ action將會得到空值。這就是爲什麼它不是重定向

insert.php

function test_input($data) { 
     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
     return $data; 
    } 

    if (empty($_POST["name"])) { 
     $nameErr = "Pole wymagane"; 
    } 
    else{ 
     $name = test_input($_POST["name"]); 
     // check if name only contains letters and whitespace 
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
      $nameErr = "Dozwolone tylko litery"; 
     } 
     else{ 
      $name_ok=1; 
     } 
    } 

    // Paste you other post values code here 


    if($name_ok==1 && $code_ok==1 && $city_ok==1 && $street_ok==1 && $email_ok==1) { 
     // Do INSERT 
    } 
    else { 
     header('Location:index.php'); 
    } 

HTML

<form action="insert.php" method="post"> 
0

我覺得問題出在這裏,你在提交後設置動作。

<form action="<?php echo $action; ?>" method="post"> 

在第一個循環$ action無法識別,因此您沒有任何操作。

1

您驗證所有輸入,然後顯示HTML。

好吧,所以基本上你有這樣的:

PHP Part with all validations on $_POST

和下面的動作

<form action="<?php echo $action; ?>" method="post">

,因爲PHP它的事情時,頁面加載它設置$action#因爲這是第一頁加載,沒有輸入任何內容。 (所有的$ _POST都是空的)

現在,當你正確輸入所有內容並點擊提交時,它會將用戶發送回同一頁面,因爲$action#。現在,它會再次做到這一點:

PHP Part with all validations on $_POST

和行動:

<form action="<?php echo $action; ?>" method="post">

但是,因爲您輸入的一切現在正確的動作是insert.php而不是#

因爲默認操作現在是insert.php而PHP只是在頁面加載時才這樣做。它不會檢查數據是否在另一次填寫。所以基本上如果你現在再次點擊submit,即使你所有的輸入都是空的,你也會發送到insert.php