当一个新用户访问站点的时候,我们希望他完成3件事:首先,查看我们所提供的服务;其次,在网站进行注册;最后,登录。我们将依次讨论这3件事。
在图30-4中,可以看到用户每一次光临站点时我们所提供的页面。
图 30-4 访问该站点后,用户可以创建新账户,查看可用的邮件列表或进行登录现在,我们先来了解新账户的创建和用户登录。在本章稍后的“用户函数的实现”和“管理函数的实现”部分中,我们将回顾列表细节。
30.5.1 新账户的创建
如果用户选择"New Account"菜单选项,将触发new-account动作。这样就会触发index.php中的如下代码段:
case'new-account':
//get rid of session variables
session_destroy;
display_account_form;
break;
如果用户当前处于登录状态,这段代码将会登出用户,并将显示如图30-5所示的账户详细信息表单。
图 30-5 新账户创建表单允许用户输入详细信息该表单是由output_fns.php文件的display_account_form函数生成的。这个函数除了在这里使用外,还在account-settings动作中使用,因为它可以用来显示一个创建新账户的表单。如果该函数由account-settings动作触发,表单会预先填好当前已有的用户数据。在这个例子中,表单是空的,准备接受新的账户信息。由于该函数只输出HTML,在这里,我们不做详细介绍。
以上表单中的提交按钮将触发store-account动作。该动作的代码如下所示:
case'store-account':
if(store_account($_SESSION['normal_user'],
$_SESSION['admin_user'],$_POST)){
$action='';
}
if(!check_logged_in){
display_login_form($action);
}
break;
store_account函数将用户的账户信息写入数据库中。程序清单30-4给出了该函数的代码。
程序清单30-4 mlm_fns.php脚本中的store_account函数——这些函数可以添加一个新用户或者修改数据库中一个已有的用户
//add a new subscriber to the database,or let a user modify their data
function store_account($normal_user,$admin_user,$details){
if(!filled_out($details)){
echo"<p>All fields must be filled in.Try again.</p>";
return false;
}else{
if(subscriber_exists($details['email'])){
//check logged in as the user they are trying to change
if(get_email==$details['email']){
$query="update subscribers set
realname='".$details[realname]."',
mimetype='".$details[mimetype]."'
where email='".$details[email]."'";
if($conn=db_connect){
if($conn->query($query)){
return true;
}else{
return false;
}
}else{
echo"<p>Could not store changes.</p>";
return false;
}
}else{
echo"<p>Sorry,that email address is already registered here.</p>
<p>You will need to log in with that address to
change its settings.</p>";
return false;
}
}else{
//new account
$query="insert into subscribers
values('".$details[email]."',
'".$details[realname]."',
'".$details[mimetype]."',
sha1('".$details[new_password]."'),
0)";
if($conn=db_connect){
if($conn->query($query)){
return true;
}else{
return false;
}
}else{
echo"<p>Could not store new account.</p>";
return false;
}
}
}
}
该函数首先检查用户是否填好了所需的资料。如果这些信息已经填好,函数接着将创建新用户,或者如果该用户已经存在,函数将更新该账户资料。用户只能更新当前登录用户的账户资料。这是通过调用get_email函数来检查的,该函数将得到当前登录用户的邮件地址。在稍后的内容中,我们还将接触这个函数,因为它使用了用户登录时设置的会话变量。