php學習歷程1——註冊、登陸(面向過程、面向對象)

 

 首先放一張天空之城javascript

 

 

Php入門來的第一個小項目,首先作的是一個簡陋的文章管理系統。有登陸、註冊、文章list、添加文章、修改文章、刪除文章、分頁這幾個小功能。php

  • 面向過程的編碼
  • 面向對象的編碼

 

  • 首先作的就是登陸註冊功能

 

本文介紹我在登陸、註冊功能上的學習、理解和實踐。html


  •  面向過程

剛學習完php函數和簡單的html,連jsajax徹底不會。起初想搞一個美觀優雅的登陸註冊界面,可是礙於能力有限,最後寫了一個宇宙中最無敵簡陋的登陸模板,而後開始寫後端數據處理。java

  • 登陸

 

模板想用的代碼login.phpmysql

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>login page</title>
 6 </head>
 7 <body>
 8 <br>
 9 <br>
10 <br>
11 <br>
12 <br>
13 <br>
14 <br>
15 <br>
16 <br>
17 <br>
18 <br>
19 <br>
20 <br>
21 <div>
22 <div style="width: 775px; height: 250px; float: left">
23 
24 </div>
25 <div align="center" style=" background-color: #78c4d8;display: table; height: 250px;width: 450px;box-shadow: 10px 10px 10px  #828282;
26         border-radius: 30px">
27     <div style="height: 89.5px">
28         
29     </div>
30     
31 <form action="../Controller/login.php" method="POST" align="center">
32     登陸
33     <input type="text" name="username1" size="20" maxlength="15"
34               placeholder="請填寫用戶名">
35     <br>
36     密碼
37     <input type="password"
38            name="password1" size="20" maxlength="15"> <br>
39     <input
40         type="submit" name="submit" value="登陸">
41     <input type="button"
42                                          onclick="window.location.href='register.html'" value="註冊">
43 </form>
44 </div>
45 </div>
46 </body>
47 </html>

 

別問我面向對象是什麼?我這時候還不懂,啥也不懂,本科沒好好學c++java,我錯了(已跪)。c++

 

接着我用面向過程的語言就寫成了這個玩意兒……ajax

 login.phpsql

 1 <?php
 2 session_start();
 3 
 4 //註銷登陸
 5 if(@$_GET['action'] == 'logout') {
 6 
 7     unset($_SESSION['username1']);
 8     unset($_SESSION['userID']);
 9     echo '註銷登陸成功!點擊此處 <a href="../View/login.html">登陸</a>';
10     exit;
11 }
12 
13 
14 $username1 = $_POST ['username1'];
15 $password1 = $_POST ['password1'];
16 
17 include "../../../Common/dataBase.php";
18 
19 $check_query = mysqli_query($conn,"select userID from think_userrg where username1='$username1' and password1='$password1' limit 1");
20 
21 
22 if ($result = mysqli_fetch_array($check_query)) {
23     //登錄成功
24     $_SESSION['username1'] =$username1;
25     $_SESSION['userID'] =$result['userID'];
26     echo  $username1, ',登陸成功!歡迎您!<a href="../View/articleList.php">若是您的瀏覽器沒有自動跳轉,請點擊這裏</a>
27                ' . '<script>
28 setTimeout(function(){window.location.href=\'../View/articleList.php\';},3000)
29               </script>' ;
30     echo '點擊此處 <a href= "login.php?action=logout">註銷</a>登陸!<br />';
31     exit;
32 } else {
33     die ( '登陸失敗!點擊此處<a href ="javascript:history.back(-1);">返回</a>重試' );
34 }
35 
36 /**
37  * 判斷是否爲
38  * 1.非submit事件
39  * 2.非註銷事件
40  */
41 if (!isset($_POST['submit']) && !($_GET['action'] == 'logout')){
42     die('非法訪問!');
43 }
44 
45 ?>

 

1.用戶名和密碼正確,點擊登陸,能夠成功。數據庫

2.用戶名不存在或者用戶名存在,密碼錯誤,都報錯,跳轉錯誤頁面,返回登陸初始界面。後端

(哦,忘了給看數據庫結構了)

think_userrg

 

 

 


  • 註冊

 

如下是註冊的模板

 

平平淡淡纔是真~

代碼以下register.html

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>register</title>
 6 </head>
 7 <body>
 8     <br>
 9     <br>
10     <br>
11     <br>
12     <br>
13     <br>
14     <br>
15     <br>
16     <br>
17     <br>
18     <br>
19     <br>
20     <form action="../Controller/register.php" method="POST" enctype="multipart/form-data"
21           align="center">
22 
23         用戶名: <input type="text" name="username1" size="20" maxlength="15"
24             placeholder="必須填寫用戶名"> <br> 登陸密碼: <input type="password"
25             name="password1" size="20" maxlength="15"> <br> 確認密碼: <input
26             type="password" name="confirmPassword" size="20" maxlength="15">
27         <br> <input type="submit" name="submit" value="註冊"> <input
28             type="button" name="back" value="返回"
29             onclick="window.location.href='login.html'">
30     </form>
31 
32 </body>
33 </html>

 

而後是後端register.php

 

 1 <?php
 2 include "../../../Common/dataBase.php";
 3 
 4 if (empty ( $_POST )) {
 5     exit ( "您提交的表單數據超過post_max_size!<br>" );
 6 }
 7 
 8 // 判斷輸入密碼與確認密碼是否相同
 9 $password1 = $_POST ['password1'];
10 $confirmPassword = $_POST ['confirmPassword'];
11 if ($password1 != $confirmPassword) {
12     exit ('兩次輸入的密碼不相同!<a href ="../View/register.html">返回重試</a>');
13 }
14 
15 $username1 = $_POST ['username1'];
16 
17 // 判斷用戶名是否重複
18 $usernameSQL = "select * from userrg where username1 = '$username1'";
19 $resultSet = mysqli_query ($conn, $usernameSQL );
20 
21 $row = mysqli_fetch_array($resultSet);
22 //判斷用戶名是否存在
23 if ($username1 == $row['username1']) {
24     die ('用戶名被佔用,請更換其餘用戶名<a href ="../View/register.html">返回重試</a>');
25 }else{
26 
27 $sql = "insert into userrg (username1,password1,confirmPassword)
28          values ('$username1','$password1','$confirmPassword')";
29 mysqli_query ($conn,$sql);
30 // 註冊成功跳轉到登陸界面
31     die ('註冊成功!點擊此處<a href="../View/login.html">登陸</a>');
32 }
33 
34 
35 
36 
37 ?>

 

 而後就沒了。

 


  •  面向對象

 你竟然沒走?真的機智!機智如我~       :)

說明一下,以上是其實不是最初的版本,是改了好屢次以後的終於變成我本身代碼的代碼。

 

接下來是我學習了面向對象以後,對原來代碼的修改。

我師傅說雖然是寫成了一個個類文件,可是仍是有點面向過程的思惟,我本身也以爲是這樣子,我也不敢說,我也不敢問,我就是個年幼的程序猿。

 

話很少說,直接上代碼。

注意:登陸的註冊功能還應用了兩個文件。我會在末尾也貼出來。

登陸處理代碼Login.php

 1 <?php
 2 //namespace A;
 3 //use A\User;
 4 /**
 5  * Login類
 6  */
 7 require_once '../../Back/User/User.php';
 8 include '../../MySQLDB.php';
 9 
10 class Login extends User
11 {
12     function __construct()
13     {
14     }
15 
16     public function check($usernm, $userpwd)
17     {
18 
19         $arr = array(
20             'dbname' => 'newpage'
21         );
22         $db = MySQLDB::getInstance($arr);
23         $sql = "select uid from new_user where usernm='$usernm' and userpwd='$userpwd' limit 1";
24         if ($result = $db->fetchArray($sql) ) {
25             echo $usernm . "歡迎您,點擊<a href='../Article/list.php'>此處</a>跳轉主頁";
26         } else
27             die("密碼錯誤");
28     }
29 }
30 
31 $usernm = $_POST['usernm'];
32 $userpwd = $_POST['userpwd'];
33 
34 $log = new Login();
35 $log->is_POST();
36 $a = $usernm;
37 $b = $userpwd;
38 $log->is_empty($a, $b);
39 $log->check($a, $b);
40 
41 ?>

註冊處理代碼Register.php

 1 <?php
 2 // namespace User\Register;
 3 
 4 require_once '../../Back/User/User.php';
 5 include '../../MySQLDB.php';
 6 //var_dump($_POST['usernm']);
 7 //var_dump($_POST['userpwd']);
 8 
 9 /**
10  * Register類
11  */
12 class Register extends User
13 {
14     #註冊帳戶方法
15     function __construct()
16     {
17 
18 //        $usernm= $_POST['usernm'];
19 //        $userpwd=$_POST['userpwd'];
20 //        $userrepwd=$_POST['userrepwd'];
21 
22     }
23 
24     #判斷兩次輸入的密碼是否相同
25     public function pwdSame()
26     {
27         $userpwd = $_POST['userpwd'];
28         $userrepwd = $_POST['userrepwd'];
29         if ($userpwd != $userrepwd) {
30             die ("兩次輸入的密碼不相同!請重試!");
31         }
32 
33     }
34 
35 
36 
37     #將用戶信息寫入數據庫
38     public function query()
39     {
40         $usernm = $_POST['usernm'];
41         $userpwd = $_POST['userpwd'];
42         $createtime = date("Y-m-d H:i:s", time());
43         $arr = array(
44             'dbname' => 'newpage'
45         );
46         $db = MySQLDB::getInstance($arr);
47         $sql = "insert into new_user (usernm,userpwd,createtime) value ('$usernm','$userpwd','$createtime')";
48         if ($result = $db->my_query($sql)) {
49             die('註冊成功!點擊此處<a href="../Login/Login.html">登陸</a>');
50         } else
51             return false;
52     }
53 
54     #加載選擇數據庫信息方法
55     public function dbname()
56     {
57     }
58 }
59 
60 
61 $usernm = $_POST['usernm'];
62 $userpwd = $_POST['userpwd'];
63 
64 
65 $reg = new Register();
66 $a = $usernm;
67 $b = $userpwd;
68 $reg->is_empty($a, $b);
69 
70 $reg->is_POST();
71 $reg->pwdSame();
72 $reg->is_repeat();
73 $reg->query();
74 
75 
76 ?>

 

附件1:User.php

 1 <?php
 2 /**
 3  * Created by PhpStorm.
 4  * User: ts-jinjinying
 5  * Date: 2019/6/13
 6  * Time: 10:40
 7  */
 8 
 9 //namespace A;
10 
11 /**
12  * User類
13  */
14 class User
15 {
16     /**
17      *  用戶類的屬性
18      * @param string $usernm 用戶名
19      * @param int $uid 用戶ID
20      * @param string $userpwd 密碼
21      * @param string $userrepwd
22      * @param datetime $createtime 建立時間
23      */
24     public $usernm;
25     public $uid;
26     public $userpwd;
27     public $userrepwd;
28     public $createtime;
29 
30     #初始化對象屬性
31     public function __construct($usernm, $userpwd)
32     {
33         $this->usernm = $usernm;
34         $this->userpwd = $userpwd;
35     }
36 
37     #判斷是否提交
38     public function is_POST()
39     {
40         if (!(isset($_POST['submit']))) {
41             return false;
42         }
43     }
44 
45     #判斷是否爲空
46     public function is_empty($a, $b)
47     {
48         if (empty($a && $b))
49             die("用戶名或密碼不能爲空");
50     }
51 
52     #判斷用戶名是否重複
53     public function is_repeat()
54     {
55         $usernm = $_POST['usernm'];
56         $arr = array(
57             'dbname' => 'newpage'
58         );
59         $select = MySQLDB::getInstance($arr);
60         $usernmSql = "select * from new_user where usernm = '$usernm'";
61 
62         $row = $select->fetchRow($usernmSql);
63         if ($usernm == $row['usernm']) {
64             die("用戶名被佔用,請更換其餘用戶名!");
65         } else {
66             echo "用戶名合法!";
67         }
68     }
69 
70 
71     #註銷方法
72     public function logout()
73     {
74         if ('合法') {
75             echo "註銷成功";
76         } else
77             return false;
78     }
79 
80     function __destruct()
81     {
82     }
83 }

 

 附件2:MySQLDB.php

  1 <?php
  2 /**
  3  * Created by PhpStorm.
  4  * User: ts-jinjinying
  5  * Date: 2019/6/14
  6  * Time: 8:51
  7  */
  8 
  9 
 10 /**
 11  * Class MySQLDB
 12  * MySQLDB工具類
 13  */
 14 class MySQLDB
 15 {
 16 //定義相關的屬性
 17     private $host;//主機地址
 18     private $port;//端口號
 19     private $user;//用戶名
 20     private $pass;//密碼
 21     private $charset;//字符集
 22     private $dbname;//數據庫名
 23     //運行時須要的屬性;
 24     private $link;//保存鏈接資源
 25     private static $instance;//用於保存對象
 26 
 27     /**
 28      * MySQLDB constructor.
 29      * @param $arr
 30      * 構造方法
 31      */
 32     private function __construct($arr)
 33     {
 34         //初始化屬性的值
 35         $this->init($arr);
 36         //鏈接數據庫
 37         $this->my_connect();
 38         //選擇默認字符集
 39         $this->my_charset();
 40         //選擇默認數據庫
 41         $this->my_dbname();
 42     }
 43 
 44     /**
 45      * 得到單例對象的公開的靜態方法
 46      * @param array $arr 傳遞給構造方法的參數
 47      */
 48     public static function getInstance($arr)
 49     {
 50         if (!self::$instance instanceof self) {
 51             self::$instance = new self($arr);
 52         }
 53         return self::$instance;
 54     }
 55 
 56     private function init($arr)
 57     {
 58         $this->host = isset($arr['host']) ? $arr['host'] : '127.0.0.1';
 59         $this->port = isset($arr['port']) ? $arr['port'] : '3306';
 60         $this->user = isset($arr['user']) ? $arr['user'] : 'root';
 61         $this->pass = isset($arr['pass']) ? $arr['pass'] : '';
 62         $this->charset = isset($arr['charset']) ? $arr['charset'] : 'utf8';
 63         $this->dbname = isset($arr['dbname']) ? $arr['dbname'] : '';
 64     }
 65 
 66     /**
 67      * 鏈接數據庫
 68      */
 69     private function my_connect()
 70     {
 71         //若是鏈接成功,就將鏈接資源保存到$link屬性裏面
 72         if ($link = @mysqli_connect("$this->host:$this->port", "$this->user", "$this->pass")) {
 73             $this->link = $link;
 74         } else {
 75             //鏈接失敗
 76 
 77             echo "數據庫鏈接失敗!<br/>";
 78             echo "錯誤編號:", mysqli_errno($this->link), "<br/>";
 79             echo "錯誤信息:", mysqli_error($this->link), "<br/>";
 80 //            die;
 81             return false;
 82         }
 83     }
 84 
 85     /**
 86      * 錯誤調試方法,執行一條sql語句
 87      */
 88 
 89     public function my_query($sql)
 90     {
 91         $result = mysqli_query($this->link, $sql);
 92         if (!$result) {
 93             //執行失敗
 94             echo "SQL語句執行失敗<br/>";
 95             echo "錯誤編號:", mysqli_errno($this->link), "<br/>";
 96             echo "錯誤信息:", mysqli_error($this->link), "<br/>";
 97 //            die;
 98             return false;
 99         }
100         return $result;
101     }
102 
103     /**
104      * 返回多行多列的查詢結果
105      * @param string $sql 一條sql語句
106      * @return mixed  array|false
107      */
108     public function fetchAll($sql)
109     {
110         //先執行sql語句
111         if ($result = $this->my_query($sql)) {
112             //執行成功
113             //遍歷資源結果集
114             $rows = array();
115             while ($row = mysqli_fetch_assoc($result)) {
116                 $rows[] = $row;
117             }
118             //釋放結果集資源
119             mysqli_free_result($result);
120             //返回全部的數據
121             return $rows;
122         } else {
123             return false;
124         }
125     }
126 
127     /**
128      * 返回一行的查詢結果
129      * @param string $sql 一條sql語句
130      * @return mixed  array|false
131      */
132     public function fetchRow($sql)
133     {
134         //先執行sql語句
135         if ($result = $this->my_query($sql)) {
136             //執行成功
137             $row = mysqli_fetch_assoc($result);
138             mysqli_free_result($result);
139             //返回這一條記錄的數據
140             return $row;
141         } else {
142             return false;
143         }
144     }
145 
146 
147     /**
148      * 返回單行單列的查詢結果(單一值)
149      * @param string $sql 一條sql語句
150      * @return mixed  string|false
151      */
152     public function fetchColumn($sql)
153     {
154         //執行sql語句
155         if ($result = $this->my_query($sql)) {
156             //執行成功
157             $row = mysqli_fetch_row($result);
158             //釋放結果集資源
159             mysqli_free_result($result);
160             //返回這個單一值
161             return isset($row[0]) ? $row[0] : false;
162         } else {
163             //執行失敗
164             return false;
165         }
166     }
167 
168     /**
169      * @param $sql
170      * @return array|bool|null
171      * 返回遍歷數據表的全部數據
172      */
173     public function fetchArray($sql)
174     {
175         //執行sql語句
176         if ($result = $this->my_query($sql)) {
177             //執行成功
178             //遍歷資源結果集
179             $rows = array();
180 
181             while($row = mysqli_fetch_array($result)){
182                 $rows[]= $row;
183             }
184             //釋放結果集資源
185             mysqli_free_result($result);
186             //返回全部數據
187             return $rows;
188         } else
189             return false;
190     }
191 
192 
193     /**
194      * 選擇默認的字符集
195      */
196     private function my_charset()
197     {
198         $sql = "set names $this->charset";
199         $this->my_query($sql);
200     }
201 
202     /**
203      * 選擇默認數據庫
204      */
205     private function my_dbname()
206     {
207         $sql = "use $this->dbname";
208         $this->my_query($sql);
209     }
210 
211     /**
212      * 析構方法
213      */
214     public function __destruct()
215     {
216         //釋放額外的數據庫鏈接資源
217         mysqli_close($this->link);  // TODO: Implement __destruct() method.
218     }
219 
220     /**
221      * __sleep方法,序列化對象的時候自動調用
222      */
223     public function __sleep()
224     {
225         //返回一個數組,數組內的元素爲須要被序列化的屬性名的集合
226         return array('host', 'port', 'user', 'pass', 'charset', 'dbname');   // TODO: Implement __sleep() method.
227     }
228 
229     /**
230      * __wakeup方法,反序列化一個對象的時候自動調用
231      */
232     public function __wakeup()
233     {
234         /**數據庫相關初始化操做*/
235 
236         //鏈接數據庫
237         $this->my_connect();
238         //選擇默認字符集
239         $this->my_charset();
240         //選擇默認數據庫
241         $this->my_dbname();
242     }
243 
244     /**
245      * 私有化克隆模式方法,防止經過克隆獲得一個新的對象
246      */
247     private function __clone()
248     {
249         // TODO: Implement __clone() method.
250     }
251 
252     public function __set($name, $value)
253     {
254         // TODO: Implement __set() method.
255     }
256 
257     public function __get($name)
258     {
259         // TODO: Implement __get() method.
260     }
261 
262     public function __unset($name)
263     {
264         //什麼都不作,表示不能刪除任何屬性
265     }
266 
267     public function __isset($name)
268     {
269         // TODO: Implement __isset() method.
270     }
271 }

 

上面的代碼中有些本文沒有說明,之後有機會會一一說明,也是對我本身代碼的覆盤。

新人練手小項目的分享,一方面是記錄本身的學習,一方面分享給別的正在入門的朋友。

這個標籤還會堅持下去。

tails:第0000 0000 0000 0010

相關文章
相關標籤/搜索