??在網(wǎng)站用戶經(jīng)常需要注冊新的賬號以及對已經(jīng)注冊過的賬號進(jìn)行登錄。
??本文使用 php 實現(xiàn)基本功能并對基本原理進(jìn)行講解适掰。
一. 注冊(非 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 的對象為將要創(chuàng)建的 registerHandler.php 文件
2. php 部分(registerHandler.php)
??我們在 HTML 文件里得到了 user 和 pass 的兩個值,并將他們傳遞給了.php 文件猪杭。
php 文件內(nèi)利用字符串的拼接特性將這兩個值拼接為一個字符串。
??再將這個字符串寫入指定的 txt 文件吉嚣,注意 file 函數(shù)如果在沒有找到指定 txt 文件的時候观话,會重新創(chuàng)建一個 txt 文件胃夏。這樣信息就被保存在了指定的空間內(nèi)轴或。
代碼如下:
<?php
// 獲取 post 請求中包含的注冊數(shù)據(jù)
$user = $_POST["user"];
$pass = $_POST["pass"];
// 組成一個有規(guī)則的字符串,等待寫入文件
$str = "user = {$user};pass = {$pass}\n";
$f = fopen("file/user.txt", "a");
// 把本次獲得的字符串寫入到文檔中
fwrite($f, $str);
// 關(guān)閉文件
fclose($f);
?>
二. 將用戶信息以 Table 格式顯示(非必須仰禀,只為看效果)
原理:
??1. 將 php 文件嵌入到 HTML 文件內(nèi)照雁。
??2. 使用 explode 函數(shù),將$str = "user = {$user};pass = {$pass}\n";
按照;
拆分為user = {$user}
和pass = {$pass}
答恶。再分別通過=
拆分饺蚊,分別獲取$user
和$pass
。通過循環(huán)分別獲取亥宿,并創(chuàng)建 table 標(biāo)簽卸勺,然后依次 echo 寫入,達(dá)到目標(biāo)烫扼。
<!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. 讀取文件,獲取信息數(shù)組
$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 指向另一個創(chuàng)建的 login.php 文件映企。
??2. 在 login.php 文件中,獲取到此次輸入的 user 和 pass 值静浴,以注冊相同的格式拼接為字符串 $str
堰氓。
??3. 通過 file_get_contents()
函數(shù)將user.txt
文件以整個字符串的形式導(dǎo)出,定義為$f
苹享。
??4. 判斷:若 $f
中包含 $str
双絮,那么代表我輸入的這一段用戶名和密碼在數(shù)據(jù)庫中是能找到的,即登陸成功得问。
??5. 判斷方法:explode 方法囤攀,若$f
可以被$str
拆分為含有兩個或兩個以上元素的數(shù)組,那么代表$f
中包含 $str
(在這里也可以使用 strpos 函數(shù)進(jìn)行判斷)宫纬。
代碼如下:
<?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 "登陸成功焚挠!數(shù)據(jù)庫有你的信息!";
else echo "登錄失斃焐А蝌衔!數(shù)據(jù)庫里找不到你榛泛!";
?>
??至此,我們完成了登錄的判斷噩斟,當(dāng)然曹锨,方法不唯一。
四. 注冊(JSON)
??在這段代碼里注冊信息剃允,我們使用了json_encode
和json_decode
方法將信息轉(zhuǎn)化為 JSON 格式寫入文檔中沛简,方便了操作和以后的使用。登錄方法同以上硅急。
??JSON 的操作方式與非 JSON 類似覆享,并沒有本質(zhì)的區(qū)別,不做贅述营袜。
代碼如下:
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>