我创建了一个使用IF .. ELSE以简单形式验证数据的测试表单。这工作正常,任何验证消息或错误都会发布到同一页面(userform.php),以通知用户成功或否则。
我现在要做的是在成功完成表单后将用户带到另一页。到目前为止,这是我的代码:
<?php
if (isset($_POST['email'], $_POST['password'])) {
$errors = array ();
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST ['email'];
$password = $_POST ['password'];
if (empty ($firstname) || empty ($lastname) || empty ($email) || empty ($password)) {
$errors [] = "Please complete the form";
}
if (empty($email)) {
$errors [] = "You must enter an email address";
}
if (empty($password)) {
$errors [] = "You must enter a password";
}
if (filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE){
$errors[] = "Please enter a valid email address";
}
}
if (!empty ($errors)) {
foreach ($errors as $error) {
echo '<strong>', $error ,'</strong><br />';
$result = "userform.php";
}
} else {
$result = "confirm.php";
}
?>
<form action="<?php echo $result ?>" method="post">
这个想法是用户成功或以其他方式完成表单会更改表单操作中使用的$ result变量。上面的代码不起作用,那我该怎么做呢? 它甚至可能吗?
答案 0 :(得分:1)
而不是底部的“form action =”:
<?php
include($result);
?>
答案 1 :(得分:1)
据我所知,你希望它能像以下一样工作:
userform.php
confirm.php
userform.php
如果是这种情况,我认为您不想更改表单操作:这将要求用户重新提交表单。而是使用HTTP重定向将其发送到confirm.php
:
header("Location: confirm.php");
......或者如果你想成为关于它的书:
header("Status: 303 See Other");
header("Location: http://exampel.com/confirm.php"); // according to the protocol,
// `Location` headers should be full URLs
<?php
/* ... */
if (!empty ($errors)) {
foreach ($errors as $error) {
echo '<strong>', $error ,'</strong><br />';
}
?>
<form action="userform.php" method="post">
<?php
} else {
header("Location: confirm.php");
// if you need to pass additional information to confirm.php, use a query string:
// header("Location: confirm.php?var1=".$var1);
}
?>
答案 2 :(得分:0)
您现在正在这样做,如果他们第二次提交表单,会将用户重定向到confirm.php。您可以将代码更改为:
} else {
// $result = "confirm.php";
header("Location: confirm.php");
exit();
}
这样,如果输入了所有内容,用户将被重定向到confirm.php。但是如果一切都好的话你怎么处理这些变量呢?它们不会被带到新页面。
答案 3 :(得分:0)
} else {
$result = confirm.php;
foreach($_POST as $key => $val){
$input.="<input type='hidden' name='$key' value='$val' />";
}
$form = "<form method='post' name='confirm' action='confirm.php'>".$input."</form>";
$script = "<script type='text/javascript'>document.confirm.submit();</script>";
echo $form.$script;
}
答案 4 :(得分:0)
empty ($errors)
总是会空着。这就是为什么你总是得到:
$result = 'confirm.php';
另外,我认为你不能轻易做到这一点。相反,你为什么不创建一个check.php或其他任何检查变量/检查错误等等。然后做你想做的事情(重定向回到填写表格或继续到confirm.php页面。
答案 5 :(得分:-2)
整个想法都错了。您必须在代码中修复2个问题。
不可能在没有缩进的情况下阅读这样丑陋的群众。
<强> 2。未成年人。
我在这里看不到使用确认页面。你在那个页面上要做什么?从哪里获得形式值?
您似乎必须使用简单的Javascript代码来显示确认或将输入的数据存储到会话中
而且,我必须说,只显示反馈表单的确认页面是非常罕见的做法。
所以,我认为你真的只需要一个表单动作而且只有ccare才能正确填写表格
<?
if ($_SERVER['REQUEST_METHOD']=='POST') {
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST ['email'];
$password = $_POST ['password'];
$errors = array();
if (empty ($firstname) || empty ($lastname) || empty ($email) || empty ($password)) {
$errors [] = "Please complete the form. All fields required.";
}
if (filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE){
$errors[] = "Please enter a valid email address";
}
if (!$errors) {
// do whatever you wish to this data
// and then redirect to whatever address again
// the current one is a default
header("Location: ".$_SERVER['PHP_SELF']);
exit;
} else {
// all field values should be escaped according to HTML standard
foreach ($_POST as $key => $val) {
$form[$key] = htmlspecialchars($val);
}
} else {
$form['fiestname'] = $form['lasttname'] = $form['email'] = $form['password'] = '';
}
include 'form.tpl.php';
?>
在form.tpl.php文件中,您有表单字段,输入值和错误消息的条件输出
<? if ($errors): ?>
<? foreach($errors as $e): ?>
<div class="err"><?=$e?></div>
<? endforeach ?>
<? endif ?>
<form method="POST">
<input type="text" name="firstname" value=<?=$form['firstname']>
... and so on