在网站用户经常需要注册新的账号以及对已经注册过的账号进行登录。
本文使用 php 实现基本功能并对基本原理进行讲解。
一. 注册(非 JSON)
1. HTML部分(register.html)
首先完成 HTML 页面的基本布局
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Register_Page</title>
</head>
<body>
<form action="registerHandler.php" method="post">
Name:<input type="text" name="user" id="user" />
Code:<input type="text" name="pass" id="pass" />
<input type="submit" value="register"/>
</form>
</body>
</html>
- 这里采用 post 方式
- action 的对象为将要创建的 registerHandler.php 文件
2. php 部分(registerHandler.php)
我们在 HTML 文件里得到了 user 和 pass 的两个值,并将他们传递给了.php 文件。
php 文件内利用字符串的拼接特性将这两个值拼接为一个字符串。
再将这个字符串写入指定的 txt 文件,注意 file 函数如果在没有找到指定 txt 文件的时候,会重新创建一个 txt 文件。这样信息就被保存在了指定的空间内。
代码如下:
<?php
// 获取 post 请求中包含的注册数据
$user = $_POST["user"];
$pass = $_POST["pass"];
// 组成一个有规则的字符串,等待写入文件
$str = "user = {$user};pass = {$pass}\n";
$f = fopen("file/user.txt", "a");
// 把本次获得的字符串写入到文档中
fwrite($f, $str);
// 关闭文件
fclose($f);
?>
二. 将用户信息以 Table 格式显示(非必须,只为看效果)
原理:
1. 将 php 文件嵌入到 HTML 文件内。
2. 使用 explode 函数,将$str = "user = {$user};pass = {$pass}\n";
按照;
拆分为user = {$user}
和pass = {$pass}
。再分别通过=
拆分,分别获取$user
和$pass
。通过循环分别获取,并创建 table 标签,然后依次 echo 写入,达到目标。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>
</title>
</head>
<body>
<table border="1">
<tr><th>用户名</th><th>密码</th></tr>
<?php
// 1. 读取文件,获取信息数组
$arr = file("file/user.txt");
// print_r($arr);
echo "<hr>"."下面是把 user.txt 的用户名和密码输出为表格";
foreach ($arr as $value) {
$userinfo = explode(";", $value);
?>
<tr>
<td>
<?php
$username = explode("=", $userinfo[0])[1];
echo $username;
?>
</td>
<td>
<?php
$userpass = explode("=", $userinfo[1])[1];
echo $userpass;
?>
<?php } ?>
</td>
</tr>
</table>
</body>
</html>
三. 登录验证
原理:
1. 布局与注册相似,但是 action 指向另一个创建的 login.php 文件。
2. 在 login.php 文件中,获取到此次输入的 user 和 pass 值,以注册相同的格式拼接为字符串 $str
。
3. 通过 file_get_contents()
函数将user.txt
文件以整个字符串的形式导出,定义为$f
。
4. 判断:若 $f
中包含 $str
,那么代表我输入的这一段用户名和密码在数据库中是能找到的,即登陆成功。
5. 判断方法:explode 方法,若$f
可以被$str
拆分为含有两个或两个以上元素的数组,那么代表$f
中包含 $str
(在这里也可以使用 strpos 函数进行判断)。
代码如下:
<?php
header("Content-type:text/html;charset=utf-8");
$user = $_POST["user"];
$pass = $_POST["pass"];
$str = "user = {$user};pass = {$pass}\n";
$f = file_get_contents("file/user.txt");
$tmpArr = explode($str, $f);
if (count($tmpArr) > 1) echo "登陆成功!数据库有你的信息!";
else echo "登录失败!数据库里找不到你!";
?>
至此,我们完成了登录的判断,当然,方法不唯一。
四. 注册(JSON)
在这段代码里注册信息,我们使用了json_encode
和json_decode
方法将信息转化为 JSON 格式写入文档中,方便了操作和以后的使用。登录方法同以上。
JSON 的操作方式与非 JSON 类似,并没有本质的区别,不做赘述。
代码如下:
1. HTML部分(json_register.html)
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<form action="json_registerHandler.php" method="post">
用户名:<input type="text" name="user"/><br>
密__码:<input type="text" name="pass"/><br>
<input type="submit" value="注册"/>
</form>
</body>
</html>
2. php 写入注册信息部分
<?php
if (count($_POST) != 0) {
$str = json_encode($_POST) . "\n";
$f = fopen("file/jason_user.txt", "a");
fwrite($f, $str);
fclose($f);
}
?>
3. Table 打印注册信息部分
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<table border="1">
<tr><th>用户名</th><th>密码</th></tr>
<?php
$arr = file("file/jason_user.txt");
foreach ($arr as $value) {
$userL = json_decode($value);
?>
<tr>
<td>
<?php
$userName = $userL -> user;
echo $userName;
?>
</td>
<td>
<?php
$passName = $userL -> pass;
echo $passName;
?>
</td>
</tr>
<?php } ?>
<!--把 json_user.txt 打一下看看样子而已-->
<?php
echo file_get_contents("file/jason_user.txt");
?>
</table>
</body>
</html>