我正在尝试为我正在处理的网站创建一个非常标准的用户创建表单,但我的PHP业余状态阻止我实现我的目标。
基本上我想要做的是让用户填写注册表单,然后让服务器端脚本尝试注册该信息。如果注册成功,则用户将被重定向到一个页面,告诉他们查找验证电子邮件。如果该注册失败(电子邮件地址已经在系统中,不匹配密码,无论如何),我想重新加载页面,但是向表单上方的用户显示错误消息。目前,我所拥有的表单是从一个php文件中回显出来的,该文件与存储页面的HTML是分开的。我的三个问题是这个。
根据我的阅读,成功重定向用户的方法是使用标题(“位置:http://foo.com”)。这是正确的,还是有更合适的方法呢?
如何访问导致第一个用户失败的错误?我已经读过,出于多种不同的原因设置会话变量是一个糟糕的想法,但如果没有这个,我怎样才能跟踪表单验证引发的错误?我是否应该创建一个全局$ errors变量,每当我回复注册表单时都会清除该变量?
对于这种情况,注册表单所在的页面是否应具有.html扩展名或.php扩展名,或者它无关紧要?更一般地说,当页面是.html与.php / .asp /其他什么时,是否有任何规则?
编辑:下面添加了代码。注意,表单是从../views/register_form.php中调用的文件呈现的(我假设这是我在PHP中使用MVC的方式)
呈现表单的页面(称为index.html)
<body>
<script type="text/javascript"> <!-- put the jquery load stuff into here -->
$(function(){
$("#registration_form").load("views/register_form.php");});
</script>
<div class="topbar"><!-- Create the top bar layout-->
<div class="fill">
<div class="container">
<a class="brand" href="#">Website!</a>
<ul class="nav">
<li class="active"><a href="#">Home</a></li>
<li> <a href="#about">About</a></li>
</ul>
<form action="scripts/login_user.php" method="post" class="pull-right">
<input class="input-medium" id="login-email" type="text" name="email_addr" placeholder="email" />
<input class="input-medium" id="login-password" type="password" name="password" placeholder="password" />
<button class="btn" type="submit">Login now!</button>
</form>
</div>
</div>
</div>
<div class="container">
<div class="content">
<div class="page header">
Page header!
</div>
<div id="registration_form">
</div>
脚本
if(//some of the data in the form isn't set)
{
//Set error conditions based on missing data
}
$confirm_password=$_REQUEST['confirm_password'];
$password=$_REQUEST['password'];
if($confirm_password != $password){
//report passwords don't match}
$email_addr=$_REQUEST['email_addr'];
$first_name=$_REQUEST['first_name'];
$last_name=$_REQUEST['last_name'];
try
{
$successful_creation=create_user_and_send_verification_email($email_addr, $password, $first_name, $last_name);
}
catch(Exception $e)
{
/*SQL errors are caught here*/
}
if($successful_creation==FALSE)
{
//If it couldn't be inserted for a non exception generating reason. If I get here, should I echo a page that has those errors printed, but is otherwise identical to the previous one?
}
else
{
//redirect to a "wait for a verification email" page
}
答案 0 :(得分:1)
我希望这有助于指明您正确的方向,尽管您现在拥有的代码更集中的问题会产生更好的答案。
网上有很多这方面的教程,您应该按照其中一个进行实验。
答案 1 :(得分:0)
为什么不在同一页面上编写服务器端代码,并且每个表单输入都使用一个标志 例如:如果电子邮件无效,则为$ email = 1。
提交后如果有任何标志被初始化,请检查标志,如果$ email = 1,则回显错误,否则重定向。