当用户载入index.php页面时,将看到如图29-2所示的输出页面。
图 29-2 Warm Mail系统的登录页面询问用户名与密码这是该应用程序的默认动作。如果没有选择$action动作,并且也没有提供登录细节,将执行代码的下面部分。
在预处理阶段,PHP将首先执行如下所示的代码:
include('include_fns.php');
session_start;
以上代码将开始一个会话,该会话可以用来保存会话变量$auth_user和$selected_account,这两个变量后面会用到。
在其他应用程序中,我们创建了短的变量名称。从第1章“PHP快速入门教程”开始,我们就在与每一个表单相关的脚本中使用短的变量名称,因此除了action变量外,我们不需要再提这一点。根据应用程序功能模块的不同,它可能是一个GET或POST变量。因此,可以从$_REQUEST数组获得这个变量。对于account变量也是如此,因此通常它可以通过GET进行访问,但是当要删除一个账户时,需要通过POST进行访问。
为了在定制用户界面时减少工作量,可以使用一个数组来控制出现在工具条中的按钮。我们声明了一个如下所示的空数组:
$buttons=array;
并将按钮设置为我们希望在页面看到的那些按钮:
$buttons[0]='view-mailbox';
$buttons[1]='new-message';
$buttons[2]='account-setup';
如果用户是以管理员身份登录的,还需要在这个数组中添加更多按钮。
在标题阶段,我们打印了一个普通的vanilla标题:
do_html_header($_SESSION['auth_user'],"Warm Mail",
$_SESSION['selected_account']);
...
display_toolbar($buttons);
这些代码将打印标题和标题头,然后可以看到如图29-2所示的按钮工具条。这些函数可以在output_fns.php函数库中找到,但由于可以轻易地在图中看出他们的运行结果,因此在这里,我们不再详细介绍它们。
现在,我们来了解代码的主体部分:
if(!check_auth_user){
echo"<p>You need to log in";
if(($action)&&($action!='log-out')){
echo"to go to".format_action($action);
}
echo".</p>";
display_login_form($action);
}
check_auth_user函数来自于user_auth_fns.php库。我们已经在前面的某些项目中使用过与此非常相似的代码——它检查用户是否登录。在这里,作为一种情况,如果用户没有登录,我们将显示一个登录表单,如图29-2所示。我们使用output_fns.php中的display_login_form函数绘制该表单。
如果用户正确填写了表单并点击"Log In"按钮,将看到如图29-3所示的输出页面。
图 29-3 在成功登录后,用户可以开始使用该应用程序在这个脚本的执行过程中,我们将触发代码的不同部分。登录表单有两个字段,$username和$password。如果填好了这两个字段,如下所示的预处理代码将会被触发:
if($username||$password){
if(login($username,$passwd)){
$status.="<p style=/"padding-bottom:100px/">Logged in successfully.</p>";
$_SESSION['auth_user']=$username;
if(number_of_accounts($_SESSION['auth_user'])==1){
$accounts=get_account_list($_SESSION['auth_user']);
$_SESSION['selected_account']=$accounts[0];
}
}else{
$status.="<p style=/"padding-bottom:100px/">Sorry,we could not log you
in with that username and password.</p>";
}
}
可以看到,以上代码将调用login函数,该函数与第27章“建立用户身份验证机制和个性化设置”和第27章“创建一个购物车”中的相似。如果一切正常,我们将在会话变量auth_user中注册该用户名。
除了设置当用户没有登录时所看到的按钮外,也可以添加另外的按钮让用户登出,如下所示:
if(check_auth_user){
$buttons[4]='log-out';
}
可以在图29-3中看到这个"Log Out"按钮。
在“标题”阶段,我们再次显示了标题和按钮。在正文阶段,显示了以前设置的状态信息:
echo$status;
接下来,我们将打印页脚并等待用户的下一步操作。