从零开始写一个 PHP 站 (1) —— 实现登录功能

4

Loading

新坑已开,慢慢填嘛……

PHP 作为一种动态Web设计语言,就少不了与用户交互的功能。最基本、最普遍的交互功能之一,就是注册登录的功能。今天就来讲讲怎么用 PHP 写登录 注册页面吧。

最基本的功能实现,其实只用 PHP 就 OK ,然而对于一个真正的网站而言,仅仅用 PHP 写显然是不现实的……所以,今天要说的,其实是用 PHP + MySQL 来完成整个登录注册系统。

整个系统的构建其实很简单,大概分为两个部分、五步。PHP 部分,登录前端、登录后端、注册前端、注册后端;MySQL 部分:用户表单。下面就一步步来看咯。

一、MySQL数据库及表的创建

至于服务器怎么搭建 PHP+MySQL 环境我就不多说了,选择也很多(LNMP、LAMP、LNMPA 等等),接下来直接进行创建数据库的操作。数据库管理系统是必不可少的,因为这将大大减轻整个数据库的维护负担,让我们能够从冗长繁杂的 SQL 语句中解脱出来,并且让数据库的结构、数据更加直观。PHP 下的数据库管理系统,当然是选择 phpMyAdmin 咯。

1.建立数据库

如果你使用了 LNMP 一键包或类似工具创建了一个虚拟主机,并在创建时已经建立了对应的数据库,可以跳过此步骤。

首先登录,在左侧就可以看到已经建立的数据库了:

由于我们需要新建一个网站,自然也就需要新建一个数据库。单击树形图中的“新建”链接,右侧会跳出已建立的数据库列表,以及给出了一个新建数据库的输入框。

“数据库名”可以随便写(不能中文),建议起一个好记且与网站相关的名称,“排序规则”无需修改,默认即可。点击创建,数据库就创建好了。

可以看到新建了一个空数据库,里面并没有表。

 

2.表的创建

表的创建也很简单,在创建好的数据库的管理界面就直接提供了“新建数据表”的选项,输入名字及字段数即可。在一个注册/登录系统中,必不可少的两个字段是用户名和密码,不过这里强烈建议添加 “UID” 字段,使数据表具有索引,这样才能对表中的每一行进行便捷、高效的管理。

于是我们要建立的数据表参数设置如下:

设置完毕后,点击“执行”即可创建一个新表。

执行结束之后,会自动跳转到如下的字段设置页面,“UID” 根据预计用户数目,选择相应的 INT 类型,这里我选择了 “TINYINT” 类型,即 -128~127 的符号数或者 0~255 的无符号数范围。需要更多的用户数量,选更大的数据类型就是咯。“username” 和 “password” 字段由于需要存储字符串,所以选择 “TEXT” 类型。

对于 UID 字段,务必在后面的 “A_I”(AUTO_INCREMENT 的缩写)复选框处打勾,以启用字段的自增功能;打勾后会弹出如下的“添加索引”对话框,可以保留默认直接单击“执行”即可。

全部设置好之后,单击字段设置页的“保存”,即可完成表的创建。

创建好之后的表结构如下图所示。

二、PHP 页面的编写

这里的编写实际上分前后端,前端对应用户界面,后端对应数据处理。我们先写前端,再写后端,这样可以更方便的处理变量的传递。为了一些后续功能的实现,我就把前后端放在一个 PHP 文件中了。

1.登录前端的编写

为什么先写登录?因为好写啊……

直接上代码,必要的地方会给注释。

<!doctype html>

<!-- HTML 头部,用于声明网页的类型和编码等,并设置网页标题 -->
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录</title>
</head>

<!-- 创建一个表单,用于将数据以 POST 方式提交给后端处理 -->
<!-- "action="后面跟的是PHP语句,用于将表单中的 Sumbit 类型按钮所提交的内容传给本页面 -->
<form id="form1" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);>" method="post">
    <input name="username" type="text" placeholder="输入用户名" />
    <input name="password" type="password" placeholder="输入密码" />
    <button name="submit" type="submit">登录</button>
</form>

其实很简单,也很短的一段代码,一看就懂。
需要注意的几点:
1.要提交的数据一定要放在 form 标签之下,这样才能够正常的把表单数据 POST 给 PHP ;
2. input 标签的 name 参数是 POST 的变量名,后端需与之对应(后面会写);
3. action 参数中之所以用了 htmlspecialchars() 函数,是为了防攻击,将可能被附加在地址上的代码格式化,使其无法执行。

2.登录后端编写

上面前端用的是 HTML 语言,这里就要用 PHP 语言咯。同样的简短。

<?php
    $link=mysqli_connect(" "," "," "," ");//连接到数据库服务器,四个参数依次为主机名、 MySQL 用户名、 MySQL 密码、要使用的数据库名
    if($link)//判断数据库是否连接成功
    {
        if(isset($_POST["submit"]))//判断是否有数据提交
        {
            mysqli_query($link,'SET NAMES UTF8');
            $name=$_POST["username"];
            $password=$_POST["password"];//将 POST 得到的用户名和密码赋值给变量(这里引号中的变量参数即为上面 input 标签中的 name 参数)
            $stmt=mysqli_prepare($link, "SELECT password FROM users WHERE name=?");
            $stmt->bind_param('s', $name);
            $stmt->execute();
            $stmt->bind_result($pa);
            $stmt->fetch();
            $stmt->close();//执行数据库查询(具体函数用法请自行百度,篇幅所限不再赘述),之所以用 mysqli_prepare ,是因为它可以将提交的数据完全格式化成对应数据类型的标准形式,是防SQL注入最根本的手段之一
            if($pa==$password)//判断密码是否匹配
            {
                echo '登录成功。';
            }
            else
            {
                echo '登录失败。';
            }
        }
    }
?>

 

这段后端代码插入到前端代码的 body 标签即可正常被调用执行。
学学 PHP MySQLi 函数吧, PHP MySQL 函数由于太容易有注入漏洞,而且语法不够友好,已经被 PHP 官方弃用!

下一期就会难一点,说说注册页面怎么写。(其实就是表单内容,以及数据库操作多了一些……)