Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP表单验证并提交到另一个页面_Php_Forms_Validation - Fatal编程技术网

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

PHP表单验证并提交到另一个页面,php,forms,validation,Php,Forms,Validation,我是PHP新手,试图了解表单验证是如何完成的。我能够验证表单字段,并根据本文中的注释显示错误消息 但是,header函数会重定向页面,但不会将表单字段发布到下一页。如何将已验证的表单值发布到下一页 这是我的密码: <!DOCTYPE HTML> <html> <head> <title>PHP Learning</title> </head> <body> <?PHP $nameError = $email

我是PHP新手,试图了解表单验证是如何完成的。我能够验证表单字段,并根据本文中的注释显示错误消息

但是,header函数会重定向页面,但不会将表单字段发布到下一页。如何将已验证的表单值发布到下一页

这是我的密码:

<!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>

PHP学习


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>

在线PHP脚本执行

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

标题功能用于重定向到其他页面。它不会传递post变量。您可以通过使用会话变量或使用cookie来实现。 对于表单前端验证,我建议使用javascript(如果您愿意,可以使用jQuery)。而php仅用于后端验证

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

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>
php
会话_start();
/*----您的其他验证代码--*/
如果($有效){
$_SESSION['email']=$_POST['email'];
$_SESSION['name']=$_POST['name'];
标题('location:Processor.php');
退出();
}
处理器页面:
在线PHP脚本执行
用于使用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");
    }
});



JS: $(“#提交”)。单击(函数(){ var name=$(“#name”).val(); var email=$(“#email”).val(); 如果(name=”“|| email=”“){ event.preventDefault(); 警告(“请填写所有字段”); } });
包含应该很好

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

这是一篇比较老的文章,但我经常使用一个解决方案,这里没有列出,所以我想我会与大家分享,以防其他人发现这很方便

<?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> 
<? } ?>

警报(“”);

如果使用标题('location:Processor.php');会话变量不能传递到page Processor.php,因此必须使用include('Processor.php')

将php处理放在处理器上php不在表单页面上为什么不在
if($valid)
中执行其他逻辑,然后重定向到“谢谢”页面?如果只是可以将数据附加到URL(如GET请求),则可以使用会话编写代码,并在Processor中显示该值。php@dHaRauMaraniYa是的,使用会话有效。这很简单,因为我只有两个字段,但在实时情况下,我们可能有更多的字段。在这种情况下,在验证之后在会话中重新填充它们看起来很乏味。有其他选择吗?那么,请在同一个文件中处理您的代码,而不是在另一个文件中处理。如果你真的想在另一个文件上处理你的代码,那么就使用javascript/jquery验证。但我试图比较我过去在servlet中是如何做到这一点的,在servlet中,一旦表单字段验证通过,我将调用传递所有字段值的模型。它是如何在PHP中发生的?正如@ConcurrentHashMap所指出的,最好在这个页面中进行所有处理,然后再进行重定向,这样最终的页面就不需要POST变量了。或者更好地使用AJAX。@siddharth我了解客户端验证和通过会话传递值。现在,如果我想在PHP中进行服务器端验证,那么在出现验证错误的情况下,我将如何返回到输入页面(提交表单的页面)。如果您提交表单,页面将被重新加载。但是您可以使用ajax提交表单,并返回验证结果。session变量将传递到processor.php,甚至在设置会话之后,它也将传递到同一页面。