2014-11-22 41 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