新坑已开,慢慢填嘛……
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 官方弃用!
你好,最近我在寻找相关的实现登陆功能的代码进行学习,在看了您的博客以后试着将您贴在博客上的代码经过一些修改在我自己的站点上运行,收到了一些错误,比如:提示PHP遇到了意想不到的&符号。我想可能是因为其中的一些符号比如>(虽然我后来弄清楚了这应该是>)造成的。不知您是否愿意对代码进行一下完善(比如注意以下缩进之类的)以增强代码的可阅读性呢?
感谢提醒,可能是 代码高亮 插件太久没更新了导致格式错乱,会在今明两天修正。
不好意思啦!
php学习ing~期待更新!!!
感谢支持!
最近比较忙……所以偷懒了2333
更新会第一时间邮件通知咯