首页 > 作文

php学习历程1——注册、登录(面向过程、面向对象)

更新时间:2023-04-07 06:42:05 阅读: 评论:0

首先放一张天空之城

php入门来的第一个小项目,首先做的是一个简陋的文章管理系统。有登录、注册、文章list、添加文章、修改文章、删除文章、分页这几个小功能。

面向过程的编码面向对象的编码

首先做的就是登录注册功能

本文介绍我在登录、注册功能上的学习、理解和实践。

面向过程

刚学习完php函数和简单的html,连jsajax完全不会。起初想搞一个美观优雅的登录注册界面,但是碍于能力有限,最后写了一个宇宙中最无敌简陋的登录模板,然后开始写后端数据处理。

登录

模板想用的代码login.php

 1 <!doctype html> 2 <html> 3 <head> 4     <meta chart="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="urname1" size="20" maxlength="15"34               placeholder="请填写用户名">35     <br>36     密码37     <input type="password"38            name="password1" size="20" maxlength="15"> <br>39     <input40         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,我错了(已跪)。

接着我用面向过程的语言就写成了这个玩意儿……

login.php

 1 <?php 2 ssion_start(); 3  4 //注销登录 5 if(@$_get['action'] == 'logout') { 6  7     unt($_ssion['urname1']); 8     unt($_ssion['urid']); 9     echo '注销登录成功!点击此处 <a href="../view/login.html">登录</a>';10     exit;11 }12 13 14 $urname1 = $_post ['urname1'];15 $password1 = $_post ['password1'];16 17 include "../../../common/databa.php";18 19 $check_query = mysqli_query($conn,"lect urid from think_urrg where urname1='$urname1' and password1='$password1' limit 1");20 21 22 if ($result = mysqli_fetch_array($check_query)) {23     //登陆成功24     $_ssion['urname1'] =$urname1;25     $_ssion['urid'] =$result['urid'];26     echo  $urname1, ',登录成功!欢迎您!<a href="../view/articlelist.php">如果您的浏览器没有自动跳转,请点击这里</a>27                ' . '<script>28 ttimeout(function(){window.location.href=\'../view/articlelist.php\';},3000)29               </script>' ;30     echo '点击此处 <a href= "login.php?action=logout">注销</a>登录!<br />';31     exit;32 } el {33     die ( '登录失败!点击此处<a href ="javascript:history.back(-1);">返回</a>重试' );34 }35 36 /**37  * 判断是否为38  * 1.非submit事件39  * 2.非注销事件40  */41 if (!ist($_post['submit']) && !($_get['action'] == 'logout')){42     die('非法访问!');43 }44 45 ?>

1.用户名和密码正确,点击登录,可以成功。

2.用户名不存在或者用户名存在,密码错误,都报错,跳转错误页面,返回登录初始界面。

(哦,忘了给看数据库结构了)

think_urrg

注册

以下是注册的模板

平平淡淡才是真~

代码如下register.html

 1 <!doctype html> 2 <html> 3 <head> 4 <meta chart="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="urname1" size="20" maxlength="15"24             placeholder="必须填写用户名"> <br> 登录密码: <input type="password"25             name="password1" size="20" maxlength="15"> <br> 确认密码: <input26             type="password" name="confirmpassword" size="20" maxlength="15">27         <br> <input type="submit" name="submit" value="注册"> <input28             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/databa.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 $urname1 = $_post ['urname1'];16 17 // 判断用户名是否重复18 $urnamesql = "lect * from urrg where urname1 = '$urname1'";19 $resultt = mysqli_query ($conn, $urnamesql );20 21 $row = mysqli_fetch_array($resultt);22 //判断用户名是否存在23 if ($urname1 == $row['urname1']) {24     die ('用户名被占用,请更换其他用户名<a href ="../view/register.html">返回重试</a>');25 }el{26 27 $sql = "inrt into urrg (urname1,password1,confirmpassword)28          values ('$urname1','$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 //u a\ur; 4高中历史知识点 /** 5  * login类 6  */ 7 require_once '../../back/ur/ur.php'; 8 include '../../mysqldb.php'; 9 10 class login extends ur11 {12     function __construct()13     {14     }15 16     public function check($urnm, $urpwd)17     {18 19         $arr = array(20             'dbname' => 'newpage'21         );22         $db = mysqldb::getinstance($arr);23         $sql = "lect uid from new_ur where urnm='$urnm' and urpwd='$urpwd' limit 1";24         if ($result = $db->fetcharray($sql) ) {25             echo $urnm . "欢迎您,点击<a href='../article/list.php'>此处</a>跳转主页";26         } el27             die("密码错误");28     }29 }30 31 $urnm = $_post['urnm'];32 $urpwd = $_post['urpwd'];33 34 $log = new login();35 $log->is_post();36 $a = $urnm;37 $b = $urpwd;38 $log->is_empty($a, $b);39 $log->check($a, $b);40 41 ?>

注册处理代码register.php

 1 <?php 2 // namespace ur\register; 3  4 require_once '../../back/ur/ur.php'; 5 include '../../mysqldb.php'; 6 //var_dump($_post['urnm']); 7 //var_dump($_post['urpwd']); 8  9 /**10  * register类11  */12 class register extends ur13 {14     #注册账户方法15     function __construct()16     {17 18 //        $urnm= $_post['urnm'];19 //        $urpwd=$_post['urpwd'];20 //        $urrepwd=$_post['urrepwd'];21 22     }23 24     #判断两次输入的密码是否相同25     public function pwdsame()26     {27         $urpwd = $_post['urpwd'];28         $urrepwd = $_post['urrepwd'];29         if ($urpwd != $urrepwd) {30             die ("两次输入的密码不相同!请重试!");31         }32 33     }34 35 36 37     #将用户信息写入数据库38     public function query()39     {40         $urnm = $_post['urnm'];41         $urpwd = $_post['urpwd'];42         $createtime 我爱我的祖国演讲稿= date("y-m-d h:i:s", time());43         $arr = array(44             'dbname' => 'newpage'45         );46         $db = mysqldb::getinstance($arr);47         $sql = "inrt into new_ur (urnm,urpwd,createtime) value ('$urnm','$urpwd','$createtime')";48         if ($result = $db->my_query($sql)) {49             die('注册成功!点击此处<a href="../login/login.html">登录</a>');50         } el51             return fal;52     }53 54     #加载选择数据库信息方法55     public function dbname()56     {57     }58 }59 60 61 $urnm = $_post['urnm'];62 $urpwd = $_post['urpwd'];63 64 65 $reg = new register();66 $a = $urnm;67 $b = $urpwd;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:ur.php

 1 <?php 2 /** 3  * created by phpstorm. 4  * ur: ts-jinjinying 5  * date: 2019/6/13 6  * time: 10:40 7  */ 8  9 //namespace a;10 11 /**12  * ur类13  */14 class ur15 {16     /**17      *  用户类的属性18      * @param string $urnm 用户名19      * @param int $uid 用户id20      * @param string $urpwd 密码21      * @param string $urrepwd22      * @param datetime $createtime 创建时间23      */24     public $urnm;25     public $uid;26     public $urpwd;27     public $urrepwd;28     public $createtime;29 30     #初始化对象属性31     public function __construct($urnm, $urpwd)32     {33         $this->urnm = $urnm;34         $this->urpwd = $urpwd;35     }36 37     #判断是否提交38     public function is_post()39     {40         if (!(ist($_post['submit']))) {41             return fal;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         $urnm = $_post['urnm'];56         $arr = array(57             'dbname' => 'newpage'58         );59         $lect = mysqldb::getinstance($arr);60         $urnmsql = "lect * from new_ur where urnm = '$urnm'";61 62         $row = $lect->fetchrow($urnmsql);63         if ($urnm == $row['urnm']) {64             die("用户名被占用,请更换其他用户名!");65         } el {66             echo "用户名合法!";67         }68     }69 70 71     #注销方法72     public function logout()73     {74         if ('合法') {75             echo "注销成功";76         } el77             return fal;78     }79 80     function __destruct()81     {82     }83 }

附件2:mysqldb.php

  1 <?php2 /**3  * created by phpstorm.4  * ur: ts-jinjinying5  * date: 2019/6/146  * time: 8:517  */8 9 10 /**11  * class mysqldb12  * mysqldb工具类13  */14 class mysqldb15 {16 //定义相关的属性17     private $host;//主机地址18     private $port;//端口号19     private $ur;//用户名20     private $pass;//密码21     private $chart;//字符集22     private $dbname;//数据库名23     //运行时需要的属性;24     private $link;//保存连接资源25     private static $instance;//用于保存对象26 27     /**28      * mysqldb constructor.29      * @param $arr30      * 构造方法31      */32     private function __construct($arr)33     {34         //初始化属性的值35         $this->init($arr);36         //连接数据库37         $this->my_connect();38         //选择默认字符集39         $this->my_chart();40         //选择默认数据库41         $this->my_dbname();42     }43 44     /**45      * 获得单例对象的公开的静态方法46      * @param array $arr 传递给构造方法的参数47      */48     public static function getinstance($arr)49     {50         if (!lf::$instance instanceof lf) {51             lf::$instance = new lf($arr);52         }53         return lf::$instance;54     }55 56     private function init($arr)57     {58         $this->host = ist($arr['host']) ? $arr['host'] : '127.0.0.1';59         $this->port = ist($arr['port']) ? $arr['port'] : '3306';60         $this->ur = ist($arr['ur']) ? $arr['ur'] : 'root';61         $this->pass = ist($arr['pass']) ? $arr['pass'] : '';62         $this->chart = ist($arr['chart']) ? $arr['chart'] : 'utf8';63         $this->dbname = ist($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->ur", "$this->pass")) {73             $this->link = $link;74         } el {75             //连接失败76 77             echo "数据库连接失败!<br/>";78             echo "错误编号:", mysqli_errno($this->link), "<br/>";79             echo "错误信息:", mysqli_error($this->link), "<br/>";80 //            die;81             return fal;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 fal;99         }100         return $result;101     }102 103     /**104      * 返回多行多列的查询结果105      * @param string $sql 一条sql语句106      * @return mixed  array|fal107      */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         } el {123             return fal;124         }125     }126 127     /**128      * 返回一行的查询结果129      * @param string $sql 一条sql语句130      * @return mixed  array|fal131      */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         } el {142             return fal;143         }144     }145 146 147     /**148      * 返回单行单列的查询结果(单一值)149      * @param string $sql 一条sql语句150      * @return mixed  string|fal151      */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);1新余学校60             //返回这个单一值161             return ist($row[0]) ? $row[0] : fal;162         } el {163             //执行失败164             return fal;165         }166     }167 168     /**169      * @param $sql170      * @return array|bool|null171      * 返回遍历数据表的所有数据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         } el189             return fal;190     }191 192 193     /**194      * 选择默认的字符集195      */196     private function my_chart()197     {198         $sql = "t names $this->chart";199         $this->my_query($sql);200     }201 202     /**203      * 选择默认数据库204      */205     private function my_dbname()206     {207         $sql = "u $this->dbname";208         $this->my_query($sql);209     }210 211     /**212      * 析构方法213      */214     public function __destruct()215     {216         //释放额外的数据库连接资源217         mysqli_clo($this->link);  // todo: implement __destruct() method.218     }219 220     /**221      * __sleep方法,序列化对象的时候自动调用222      */223     public function __sleep()224     {225         //返回一个数组,数组内的元素为需要被序列化的属性名的集合226         return array('host', 'port', 'ur', 'pass', 'chart', '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_chart();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 __t($name, $value)253     {254         // todo: implement __t() method.255     }256 257     public function __get($name)258     {259         // todo: implement __get() method.260     }261 262     public function __unt($name)263     {264         //什么都不做,表示不能删除任何属性265     }266 267     public function __ist($name)268     {269         // todo: implement __ist() method.270     }271 }

上面的代码中有些本文没有说明,以后有机会会一一说明,也是对我自己代码的复盘。

新人练手小项目的分享,一方面是记录自己的学习,一方面分享给别的正在入门的朋友。

这个标签还会坚持下去。

tails:第0000 0000 0000 0010

本文发布于:2023-04-07 06:42:03,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/3f0c4cb5986ebc760bdd68f63899ef2e.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:php学习历程1——注册、登录(面向过程、面向对象).doc

本文 PDF 下载地址:php学习历程1——注册、登录(面向过程、面向对象).pdf

标签:用户名   宋体   密码   语句
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图