我是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>
答案 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();
}