PHP表单验证并提交到另一个页面

时间:2014-09-13 05:39:13

标签: php forms validation

我是PHP的新手,并试图了解表单验证是如何完成的。我可以根据此post中的评论验证表单字段并显示错误消息。

但是标题功能会重定向页面,但不会将表单字段发布到下一页。如何将经过验证的表单值发布到下一页?

这是我的代码:

<!DOCTYPE HTML>
<html>
<head>
<title>PHP Learning</title>
</head>
<body>
<?PHP
$nameError = $emailError = "";

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

    $valid = true;

    if(empty($_POST['name'])){
        $valid=false;
        $nameError = "Name missing";
    }

    if(empty($_POST['email'])){
        $valid=false;
        $emailError = "Email missing";
    }

    if($valid){
        header('location:Processor.php');
        exit();
    }
}

?>

<form action="" method="post">
  <input type="text" name="name" size="30"/> <?PHP echo $nameError; ?> <br>
  <input type="text" name="email" size="30"/> <?PHP echo $emailError; ?> <br>
  <input type="submit" value="Submit"/>
</form>

</body>
</html>

Processor.php

<html>
<head>
<title>Online PHP Script Execution</title>
</head>
<body>
<?php

   echo "<br>", "Name: ", $_POST['name'];
   echo "<br>", "Email: ", $_POST['email'];
?>
</body>
</html>

5 个答案:

答案 0 :(得分:2)

标头功能用于重定向到其他页面。它不会传递post变量。您可以使用会话变量或使用cookie来完成此操作。 对于表单前端验证,我建议使用javascript(jQuery,如果你觉得舒服)。虽然只使用php进行后端验证。

如果必须使用php进行前端验证,请使用session

php
session_start();
/* ---- Your other validation code -- */
if($valid){
$_SESSION['email'] = $_POST['email'];
$_SESSION['name'] = $_POST['name'];
 header('location:Processor.php');
 exit();
}


processor page : 
 <html>
<head>
<title>Online PHP Script Execution</title>
</head>
<body>
<?php

   echo "<br>", "Name: ", $_SESSION['name'];
   echo "<br>", "Email: ", $_SESSION['email'];
?>
</body>
</html>

使用js进行前端验证

 <form action="Processor.php" method="post">
  <input type="text" name="name" id="name" size="30"/> <?PHP echo $nameError; ?> <br>
  <input type="text" name="email" id="email" size="30"/> <?PHP echo $emailError; ?> <br>
  <input type="submit" value="Submit" id="submit"/>
</form>

JS:
$("#submit").click(function(){
   var name = $("#name").val();
   var email = $("#email").val();
   if(name="" || email=""){
     event.preventDefault();
     alert("Please fill all the feilds");
    }
});

答案 1 :(得分:2)

这是一篇相对较旧的帖子,但我使用的解决方案很频繁,未在此列出,所以我想我会分享,以防其他人发现这个方便。

<?PHP

if($_SERVER['REQUEST_METHOD'] == "POST"){
    if(empty($_POST['name'])){
        header('Location: back_to_your_form.php?error=Name+missing');
        exit();
    }

    else if(empty($_POST['email'])){
        header('Location: back_to_your_form.php?error=Email+missing');
        exit();

    } else {
    // perform a function of some sort
    }
}    

?>

然后在html表单的标题中添加

<? if (isset($_GET['error'])) { ?>
    <script>alert('<? echo $_GET['error']; ?>');</script> 
<? } ?>

答案 2 :(得分:1)

header('location:Processor.php');将浏览器发送到另一个页面,但不是POST值。可以在同一页面中执行这些功能,也可以使用“会话”将数据传递到另一个页面。建议使用第一个选项。

答案 3 :(得分:0)

如果您使用标题(&#39;位置:Processor.php&#39;);会话变量无法传递到Processor.php页面,所以你必须使用include(&#39; Processor.php&#39;);

答案 4 :(得分:-1)

包括应该做得很好。

if($valid){
    include('Processor.php');
    exit();
}