我有这个注册脚本,将信息放入mysql数据库。现在一切正常,当有人做错事时,它会说错误(例如“用户名未定义”)
但是当它出错时它看起来不太好,因为它只是在空白页面上显示消息,所以我想我会将其重定向到表单页面并在那里显示消息。
这是工作脚本
$forename = $_POST['forename'];
$surname = $_POST['surname'];
$email = $_POST['email'];
$password = $_POST['password'];
$username = $_POST['username'];
$errors = array()
;
if(!$username) {
$errors[] = "Username is not defined";
}
if(!$password) {
$errors[] = "Password is not defined";
}
然后继续。
现在我只是觉得我可以做到这一点
$errors = array();
if(!$username) {
$errors[] = header( 'Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined' ) ;
}
if(!$password) {
$errors[] = "Password is not defined";
}
但不,它只是忽略它。
有人可以帮助我吗
如果您需要,请随时询问更多脚本
非常感谢康纳答案 0 :(得分:5)
您不能将标题包装在这样的数组中。
您只需调用该函数,然后重定向。
header( 'Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined' ) ;
答案 1 :(得分:3)
它看起来不太好,因为它只是在空白页面上显示消息,
有什么问题?
为什么不再显示表格?已填满的字段。
这将是一个用户友好的界面。
只需将表单包含在填充了字段的同一页面中即可 这比你重定向到空白表单更常见。
这称为POST/Redirect/GET模式,这里有一个简短的例子:
代码
<?
if ($_SERVER['REQUEST_METHOD']=='POST') {
$err = array();
//performing all validations and raising corresponding errors
if (empty($_POST['name']) $err[] = "Username field is required";
if (empty($_POST['text']) $err[] = "Comments field is required";
if (!$err) {
// if no errors - saving data
// and then redirect:
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['name'] = $form['comments'] = '';
}
include 'form.tpl.php';
?>
模板
<? if ($err): ?>
<? foreach($err as $e): ?>
<div class="err"><?=$e?></div>
<? endforeach ?>
<? endif ?>
<form>
<input type="text" name="name" value="<?=$form['name']?>">
<textarea name="comments"><?=$form['comments']?></textarea>
<input type="submit">
</form>
答案 2 :(得分:0)
您将标题函数的返回值放在数组中,然后继续执行页面。
如果你不关心在重定向下通常会发生的任何事情,我认为这就是你所暗示的,你应该只设置标题,然后立即退出。不要试图将header函数的返回值放入errors数组中,因为没有意义。
if(!$username) {
header('Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined');
exit;
}
答案 3 :(得分:0)
如果这是问题,我不会这样做,但是在状态代码中包含状态代码也很重要。像:
header("Location: /foo.php",TRUE,302);
307用于临时重定向,302用于永久移动。很久以前,Chrome没有接受没有状态代码的标题重定向(我现在不知道)。
答案 4 :(得分:0)
填写错误数组后尝试此操作:
if (count($errors) > 0)
{
header( 'Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined' );
exit;
}
请记住,此部分之前不应有html输出!