ps:純自然h5,毫不添加任何添加劑(css)以及化學成分(js)(<( ̄ ﹌  ̄)我就是喜歡純自然,不接受任何反駁) php
用原生的php和html作了一個登錄註冊,大概是能夠窺見通常php開發的樣子了。不過,low的地方區別提早說一下:css
emmmm,首先用nginx或者Apache建立一個站點指向本地代碼的目錄,而後在host裏配置127.0.0.1指向該站點。(這個就不教了啊,以前講過),而後是一個user庫的sql,和登錄和註冊的前端代碼頁面(很差意思說這是代碼):html
CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', `username` varchar(64) NOT NULL DEFAULT '' COMMENT '帳號', `password` varchar(64) NOT NULL DEFAULT '' COMMENT '密碼', `nickname` varchar(64) NOT NULL DEFAULT '' COMMENT '暱稱', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <form action="login.php" method="post"> 帳 號 <input type="text" name="username"> <br> 密 碼 <input type="password" name="password"> <br> <button type="submit">提交</button> </form> <a href="register.html">沒有帳號?註冊</a> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Register</title> </head> <body> <form action="register.php" method="post"> 帳 號 <input type="text" name="username"> <br> 密 碼 <input type="password" name="password"> <br> 暱 稱 <input type="text" name="nickname"> <br> <button type="submit">註冊</button> </form> </body> </html>
假設咱們的網站有個首頁,須要判斷用戶是否登錄,登錄就歡迎他,沒有登錄就讓他去登錄,這個思路咱們這麼寫前端
<?php session_start(); if (!$_SESSION['nickname']) { header("location:login.html"); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> Hello <?php echo $_SESSION['nickname'] ?> </body> </html>
- 這行session_start() 是開啓session,必須在最開始寫,保證咱們可使用session相關的功能
- 若是當前session裏沒有存用戶的暱稱,那咱們就認爲該用戶沒有登錄,跳轉到登錄界面
- 跳轉是經過header的方式,參數重location後邊是目標地址
- <?php echo $_SESSION['nickname'] ?>這段代碼能夠鑲嵌在.php文件的html代碼的任何一個地方,echo出來的字符在html中具備等同的功能
- 這樣的就是先後端代碼混雜,若是項目龐大以後很是難於維護
這部分處理登錄請求,假設用戶輸入了帳號密碼這樣的數據(前端和後端都應該對數據進行校驗和處理,本文略去),而後拿到用戶信息,判斷用戶密碼是否正確,讓用戶成功登錄或者從新輸入。mysql
<?php session_start(); $username = $_POST['username']; $password = $_POST['password']; $password_md5 = md5('study'.$password); //鏈接mysql $db = new MySQLi("localhost","root","root","allcanadmin",'8889'); $sql = "select * from `user` where `username`= '{$username}'"; $res = $db->query($sql); $user = $res->fetch_array(); if ($password_md5 == $user['password']){ $_SESSION['nickname'] = $user['nickname']; header("location:index.php"); }else{ header("location:".getenv('HTTP_REFERER')); }
- 首先也是啓用了session,由於登錄登錄成功以後要經過session保存用戶信息這樣才能在其餘頁面確認用戶是已經登錄的狀態了。
- $_POST和$_GET是php自帶的兩個全局數組,保存了當前請求的post和get參數,好比此次登錄請求的from表單的傳遞用戶名的input標籤的name=username,而且請求方式是post,該參數就會在$_POST數組中,key是input標籤的name,value是input標籤的value。
- 業界通用的一個操做,服務器不要存用戶的明文密碼。本文經過用一個字符串拼接而後計算md5以後再保存(這只是一個比較簡單的方式)
- new MySQLi(地址,用戶名,密碼,庫名,端口) 建立一個mysqli對象(mysqli是一個更安全更好用的替代原來mysql的擴展,mysql擴展已被棄用),這個對象能夠操做mysql庫。
- $res = $db->query($sql); mysqli的對象$db運行query方法,執行參數的sql語句,這裏的sql是查詢用戶名爲用戶輸入用戶名的數據,保存在結果對象$res裏,再經過結果對象的fetch_array()方法,獲取到結果保存爲一個數組。
- getenv('HTTP_REFERER') 獲取環境變量,這裏是取到上一個頁面地址,用來作返回,若是用戶登錄失敗,返回到登錄界面。
這部分處理註冊業務,註冊理論上要控制用戶名不能重複,能夠經過mysql惟一索引或者代碼處查詢的方式保證惟一,本文采用查詢的方式。nginx
<?php $username = $_POST['username']; $password = $_POST['password']; $password_md5 = md5('study'.$password); $nickname = $_POST['nickname']; $db = new MySQLi("localhost","root","root","allcanadmin",'8889'); $sql_select = "select * from `user` where `username`= '{$username}'"; $res_select = $db->query($sql); if ($res_select){ header("location:".getenv('HTTP_REFERER')); } $sql = "insert into `user` (`username`,`password`,`nickname`) VALUES ('{$username}','{$password_md5}','{$nickname}')"; $res = $db->query($sql); if ($res){ header("location:login.html"); }else{ header("location:".getenv('HTTP_REFERER')); }
看懂登錄,註冊實現就很容易了,查找不到這個帳號則代表該帳號是能夠註冊的,新增一條數據就行了。
三篇文章極速php算是寫完了,大體的流程是這樣redis
ps:既然都看到這裏了,不如順便論述一下php的意義。我我的見解,拋去公司接手的是祖傳代碼這個狀況以外,php做爲一個快速迭代的語言選擇是絕對沒有問題的,用在項目初期或者創業型項目是最佳選擇,更不用說若是作一些cms或者內容展現的項目,php根本就是爲之而生的。不管是php是世界上最好的語言仍是php已死,都是站在一個角度上的偏見,在不是很小的一個範圍裏,php仍是一個很優的選擇。
學一手php,怎麼看都是不虧的。sql