首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》30.5 实现登录

关灯直达底部

当一个新用户访问站点的时候,我们希望他完成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函数来检查的,该函数将得到当前登录用户的邮件地址。在稍后的内容中,我们还将接触这个函数,因为它使用了用户登录时设置的会话变量。