2014-11-22 85 views
1

我剛剛開始使用PHP,我一直在嘗試驗證HTML表單,然後將表單數據發佈到另一頁上,出於某種原因,這似乎並不想要工作。問題是,當點擊提交時,如果沒有錯誤,頁面會刷新。下面是代碼片段:PHP表單數據提交後不會發布

<?php 
$nameErr = $surnameErr = " "; 
$name = $surname = " "; 

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

    if (empty($_POST["name"])) { 
    $nameErr = "Name is required"; 
     $valid++; 
    } else { 
    $name = test_input($_POST["name"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
    $nameErr = "Only letters and white space allowed"; 

    } 
    } 

    if (empty($_POST["surname"])) { 
    $surnameErr = "Surname is required"; 
    $valid++; 
    } else { 
    $surname = test_input($_POST["surname"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$surname)) { 
    $surnameErr = "Only letters and white space allowed"; 

    } 
    } 

    if($valid == 0){ 
     header('LOCATION: page2.php'); 
     exit(); 
    } 

} 

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

這裏是HTML

<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 

<div class="label1"> 
    <label>First Name</label> 
    <input type="text" name="name" id="name" placeholder="John" value="<?php echo $name;?>" onblur="validateName('name')"> 

    <label>Surname</label> 
    <input type="text" name="surname" id="surname" placeholder="Smith" value="<?php echo $surname;?>" onblur="validateSurname('surname')"> <br /> 

    <input type="submit" name="submit" value="Submit"> 
</div> 
</form> 

使page2.php

<html> 
<body> 

Welcome <?php echo $_POST["name"]; ?><br> 
Your surname is: <?php echo $_POST["surname"]; ?> 

</body> 
</html> 
+0

你可以做的是改變形式行動「使page2.php」的職位是使用。並將您的php代碼轉移到page2.php – rapidoodle 2014-11-22 02:19:04

+0

@Ralfh將表單動作更改爲「page2.php」發佈數據,但不驗證表單,並將驗證代碼轉移到「page2.php」完全殺死代碼。 – SublimeTheMan 2014-11-22 02:39:35

+0

試着改變這個($ _SERVER [「REQUEST_METHOD」] ==「POST」)到這個(isset($ _ POST ['submit'])) – rapidoodle 2014-11-22 02:47:08

回答

1

當你做你header('LOCATION: page2.php');你將失去​​你所有發佈的數據,這將不會在page2.php

有幾種解決方案,例如:

  1. 使用include代替header重定向;
  2. 將發佈的數據存儲在會話或數據庫中,以便在其他頁面中可用。

我看不出有什麼理由不能在這裏使用include,有沒有你想重定向的具體原因?

+0

爲什麼我會失去數據?將表單的操作更改爲page2.php將數據發佈到下一個頁面沒有問題,但是在提交之前它不會驗證表單。 – SublimeTheMan 2014-11-22 01:48:46

+0

@ user3649696當你使用'header'重定向時,你請求一個新的腳本,它將沒有你以前設置的變量,包括超級全局變量。 – jeroen 2014-11-22 01:52:37

+0

你的意思是沿着「你的姓氏是:<?php echo $ _POST [」姓氏「];?>」,我忘了在原始文章中加入。 – SublimeTheMan 2014-11-22 02:35:28

0

試試這個

**main page** 

<form method="post" action="page2.php"> 
<div class="label1"> 
<label>First Name</label> 
<input type="text" name="name" id="name" placeholder="John" onblur="validateName('name')"> 

<label>Surname</label> 
<input type="text" name="surname" id="surname" placeholder="Smith" onblur="validateSurname('surname')"> <br /> 

<input type="submit" name="submit" value="submit"> 
</div> 
</form> 


**page2.php** 
<?php 

if (isset($_POST['submit'])) { 
$valid = 0; 

if (empty($_POST["name"])) { 
$name = "Name is required"; 
    $valid++; 
} else { 
$name = test_input($_POST["name"]); 
// check if name only contains letters and whitespace 
if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
$name = "Only letters and white space allowed"; 
} 
    else{$name=$_POST["name"];} 
} 

if (empty($_POST["surname"])) { 
$surname = "Surname is required"; 
$valid++; 
} else { 
$surname = test_input($_POST["surname"]); 
// check if name only contains letters and whitespace 
if (!preg_match("/^[a-zA-Z ]*$/",$surname)) { 
    $surname = "Only letters and white space allowed"; 

}  else{$surname=$_POST["surname"];} 
} 

} 

function test_input($data) { 
$data = trim($data); 
$data = stripslashes($data); 
$data = htmlspecialchars($data); 
return $data; 
} 
?> 
<html> 
<body> 

Welcome <?=$name?><br> 
Your surname is: <?=$surname?> 

</body> 
</html> 
+0

即使在執行此處顯示的內容之後,表單仍然未經驗證即提交。 – SublimeTheMan 2014-11-22 03:22:23

+0

輸入數字和特殊字符後的輸出是什麼? – rapidoodle 2014-11-22 03:23:18

+0

它仍然提交它,所以問題是,PHP驗證沒有運行?數據發佈到第二頁,但它無效。 – SublimeTheMan 2014-11-23 01:41:40