首先放一张天空之城
php入门来的第一个小项目,首先做的是一个简陋的文章管理系统。有登录、注册、文章list、添加文章、修改文章、删除文章、分页这几个小功能。
面向过程的编码面向对象的编码首先做的就是登录注册功能本文介绍我在登录、注册功能上的学习、理解和实践。
面向过程刚学习完php函数和简单的html,连js、ajax完全不会。起初想搞一个美观优雅的登录注册界面,但是碍于能力有限,最后写了一个宇宙中最无敌简陋的登录模板,然后开始写后端数据处理。
登录模板想用的代码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 条评论) |