PHP(9) 用户登录(版本1)
 
 
今天,我们来看一个用户登录的案例!这个案例我们来采用几个不同的版本来实现!数据库,我们就采用上一篇博文中的数据表和数据表吧!

首先,我们来设计一个用户登录界面,也就是所谓的GUI!界面的效果如下图
 
 
具体的样式,我在附件中已经提供了,大家可以下载看看!下面我们就开始写程序了!

1、 产生随机的验证码

2、 在客户端验证表单的合法性

3、 提交表单后,验证用户的合法性

4、 根据用户是否合法,返回信息到客户端

第一步:产生随机的验证码

在PHP中产生随机验证码的方式主要有两种:字符和图像(需要GD库支持);而字符型的验证码又具体的分为数字型和字型符(也就是数字和字母的组合体),在版本1中我们先来看一下数字的随机验证码!

字符串处理函数中的rand、mt_rand可以产生在指定范围内的随机数,这个正好符合我们的要求!
所以
$validCode = rand(1000,9999);//也就是说从1000至9999之间产生一个随机数,当然也可以使用mt_rand。

现在产生随机验证码后,应该将其显示在GUI中,用户以其为参照,所以,在“验证码”文本框后,将其输出就可以了!代码如下:

<?=$validCode?>

当第一步完成后,效果如下图
 

 
第二步:在客户端验证表单的合法性

所谓的在客户端验证表单的合法性,其实就是指使用JS来查看表单中必选项是否填写、必选项是否选择、表单中某些元素的数据是否合法(如用户名中禁止包含特殊符号)等。现在,我们先简单的验证一下,用户和密码是否填写!
function validateLogin()

{

    if($(“username”).value == “”)
 
    {

        window.alert(“用户名必须填写”);

        return false;

    }

    if($(“password”).value == “”)

    {

        window.alert(“密码必须填写”);

        return false;

    }

    return true;

}

function $(id)
 
{

    return document.getElementById(id);
 
}

程序运行的结果如下:
 

 
现在的问题就是如何验证”验证码”的合法性,而验证码本身又是随机数!!!???

我们可不可以这样说:上图中红圈括起来的部分,一定是正确的验证码?答案是肯定的,那么也就是说,我们只需要判断用户所输入的验证码是否与红圈部分一致,从而就可以获取用户所输入的验证码是否正确了!

现在的问题又出来了,那么怎么获取红色部分的文本呢?我们还记得在JS中存在innerHTML和innerText属性吗?如果我们将红色区域放置在某一个标记内,并且为该标记添加ID属性,那么,我们就可以通过document.getElementById(“xxx”).innerText或document.getElementById(“xxx”).innerHTML来获取其中的文本了(当然这两者之间是存在区别的!),好了,就这么干!所以代码部分应改为

<span id=”showValidCode”><?=$validCode?></span>

那么JS部分的代码就变成了:

function validateLogin()
{
    if($(“username”).value == “”)

    {
        window.alert(“用户名必须填写”);

        return false;

    }

    if($(“password”).value == “”)

    {

    window.alert(“密码必须填写”);

    return false;
 
    }

    if($(“validCode”).value != $(“showValidCode”).innerText)

    {
 
        window.alert(“验证码错误”);

        return false;

    }

    return true;

}

好了,运行一下,其结果如下:
 

 
第三步:提交表单后,验证用户的合法性

其实,所谓用户登录过程,就是将用户名和密码提交至服务器后,在数据库中查找是否存在此用户,如果存在,则证明用户登录成功,否则,登录失败,所以:

1. 我们需要在服务器上获取用户输入的用户名和密码

$username = $_POST[‘username’];

$password = md5($_POST[“password”])

因为,在数据库里用户的密码使用MD5加密了,所以,当获取出密码后,也必须进行加密!

2. 以用户输入的用户名和密码为条件,在数据库进行查询!

既然在数据库中查询,连接数据库服务器就成为必然了!

$conn = mysql_connect(“localhost”,”root”,””);

mysql_select_db(“test”);

$sql = “select * from users where username=’{$username} and password=’{$password}’”;

$result = mysql_query($sql);

现在的问题就是如何判断用户是否登录成功?如果SQL命令成功执行的话(也就是不存在语法错误),其返回的数据类型为资源,也就是其存放了结果的结果集,如果我们可以知道结果集中包含的行数(记录数),因为其结果集中的行数只能是零或非零的数字,如果为零的话,则证明用户登录失败,否则成功(即使成功,结果集中的行数也只能为1,原因…)!所以:

$rowsNum = mysql_num_rows($result);

3. 现在,我们可以根据用户登录的状态返回给客户端信息了,也就是第四步

if($rowsNum)

echo(“用户登录成功”);

else

echo(“用户登录失败,单击这里<a href=\”login.php\”>重新登录</a>”);

其运行的结果如下: