看了很多 评论,都说无图无真相、说好的高清无码大图呢,为了响应众多呼声,在征得妹子的同意下,我今天就先发一张图吧。 先别急着失望,也别说我是骗人的。看看聊天内容,其实哄妹子开心很容易,在教她学东西的时候,让她多点成就感,让她感觉自己真的学到
看了很多评论,都说“无图无真相”、”说好的高清无码大图呢”,为了响应众多呼声,在征得妹子的同意下,我今天就先发一张图吧。
先别急着失望,也别说我是骗人的。看看聊天内容,其实哄妹子开心很容易,在教她学东西的时候,让她多点成就感,让她感觉自己真的学到了东西、有进步,这样她自然就会心花怒放,觉得时间过得快,觉得跟你待在一起感觉很好。如果你整天说,“你也太笨了吧,这都不懂”,又或者说,“怎么教都不会,我帮你写好了,到时候你糊弄一下老师”,人家女生能乐意么?帮人要帮到点子上,只要把程序员琢磨代码的心思拿出百分之一到女孩身上就不会总是出现被发好人卡或者是帮人深夜修电脑还骑自行车往家赶的情况了。
——————————————————闲聊结束——————————————————
前情回顾:在第(2)篇中,我们重点讲解了表单提交、获取和处理所提交表单的数据。在最后,还提到PHP操作MySQL的内容,演示了如何连接数据库。
那么今天,我们要讲解的内容主要是以下两点:1.如何与数据库进行简单的交互 2.简单的MVC架构
第六步:从数据库中取数据
一般来说,在登录过程中,我们只需要从数据库中取数据与页面提取的数据进行对比——验证用户名、密码以及权限,而不需要进行增删改的操作。那么,这里就以查询操作为例,而其他操作,让妹子看书去吧,不能让她沦为伸手党。
首先,我们看一下我事先建好的数据库基本表。这里就不提供sql语句了,让她自己去动手建,有图形化界面的帮助,相当简单。
看完基本表,再看看PHP代码部分——Controller.php
<span> 1</span> <span>php </span><span> 2</span> <span>session_start</span><span>(); </span><span> 3</span> <span> 4</span> <span>$user_id</span> =<span>$_POST</span>['user_id'<span>]; </span><span> 5</span> <span>$user_password</span>= <span>$_POST</span>['user_password'<span>]; </span><span> 6</span> <span>$user_limitation</span>=<span>$_POST</span>['limit'<span>]; </span><span> 7</span> <span> 8</span> <span>$host</span> ='localhost'<span>; </span><span> 9</span> <span>$user_name</span>='root'<span>; </span><span>10</span> <span>$password</span> =''<span>; </span><span>11</span> <span>12</span> <span>$admin_limitation</span> ='1'<span>; </span><span>13</span> <span>$guest_limitation</span>='0'<span>; </span><span>14</span> <span>15</span> <span>$conn</span> = <span>mysql_connect</span>(<span>$host</span>,<span>$user_name</span>,<span>$password</span>);<span>//</span><span>连接MySQL</span> <span>16</span> <span>if</span>(!<span>$conn</span><span>){ </span><span>17</span> <span>die</span>('数据库连接失败:'.<span>mysql_error</span><span>()); </span><span>18</span> <span> } </span><span>19</span> <span>mysql_select_db</span>('scut_xiaoy');<span>//</span><span>选择数据库</span> <span>20</span> <span>21</span> <span>$sql</span>='select id,password,limitation from login';<span>//</span><span>定义sql语句</span> <span>22</span> <span>23</span> <span>$result</span> = <span>mysql_query</span>(<span>$sql</span>) OR <span>die</span>("<br>ERROR:<br>".<span>mysql_error</span>()."<br>产生问题的SQL:".<span>$sql</span><span>); </span><span>24</span> <span>//</span><span>执行sql语句,成功则返回结果集赋值给变量$result,失败则执行die语句</span> <span>25</span> <span>26</span> <span>if</span>(<span>$num</span>=<span>mysql_num_rows</span>(<span>$result</span><span>)) </span><span>27</span> <span> { </span><span>28</span> <span>while</span>(<span>$row</span>=<span>mysql_fetch_array</span>(<span>$result</span>,<span>MYSQL_ASSOC)){ </span><span>29</span> <span>//</span><span>while循环,每一次循环取出结果集中的一行赋值给数组变量$row</span> <span>30</span> <span>if</span>(<span>$row</span>['id']==<span>$user_id</span>&&<span>$row</span>['password']==<span>$user_password</span>&&<span>$row</span>['limitation']==<span>$user_limitation</span><span>){ </span><span>31</span> <span>//</span><span>判断语句,仅在用户名、密码、权限三者都符合的情况下为真</span> <span>32</span> <span>if</span>(<span>$row</span>['limitation']==<span>$guest_limitation</span><span>){ </span><span>33</span> <span>echo</span> "This is a user page!"<span>; </span><span>34</span> <span> } </span><span>35</span> <span>else</span><span>{ </span><span>36</span> <span>echo</span> "This is a admin page!"<span>; </span><span>37</span> <span> } </span><span>38</span> <span> } </span><span>39</span> <span> } </span><span>40</span> <span> } </span><span>41</span> <span>mysql_close</span>(<span>$conn</span><span>); </span><span>42</span> ?>
到目前为止,我们已经基本完成了登录流程的讲解,从登陆页面的代码、表单提交到获取处理表单数据,再到最后根据验证是否通过、根据权限显示不同的页面。
在Controller.php的最后部分,我用了一个if else语句做判断,我们可以把代码写进里面,作为不同页面的显示。但是这样有一个缺点,就是代码都挤到一个php文件里面。如果只是一个登录功能,这样的缺点还不是很明显,当项目规模扩大之后,我们会发现,某几个PHP文件会十分的臃肿,而且不好维护。为了让妹子养成良好的习惯,我决定给她讲讲简单的MVC分层思想。
第七步:简单的MVC分层讲解
其实我博客里面有两篇就是讲关于MVC分层,但那是基于JAVA WEB开发的,不过有些内容还是可以挪过来。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法。
——《百度百科》
通俗的讲,在下面的讲解中,视图为用户看到的页面(HTML+CSS+JS+少量的PHP代码)并且负责将数据提交给控制器、控制器为控制数据交互流程以及页面跳转的PHP文件、模型是控制器用来处理数据的PHP文件(注:此为菜鸟言论,不负任何法律责任)。
我们登录流程的最开始讲起——登录页面就是我们的第一个View(视图),代码在前面有,我就不贴出来了,可以用纯HTML代码写。视图提交数据给Controller控制器,也就是我们最开始的Controller.php,经过改造,新的代码如下:
<span> 1</span> <span>php </span><span> 2</span> <span>require_once</span> 'Model.php';<span>//</span><span>使用require_once语句导入Model.php文件,若已导入不会重复导入</span> <span> 3</span> <span>session_start</span><span>(); </span><span> 4</span> <span> 5</span> <span>$user_id</span> =<span>$_POST</span>['user_id'<span>]; </span><span> 6</span> <span>$user_password</span>= <span>$_POST</span>['user_password'<span>]; </span><span> 7</span> <span>$user_limitation</span>=<span>$_POST</span>['limit'<span>]; </span><span> 8</span> <span> 9</span> <span>$login</span>=<span>new</span> Class_Login();<span>//</span><span>定义Class_Login类的对象$login</span> <span>10</span> <span>$jugg</span>=<span>$login</span>->login(<span>$user_id</span>, <span>$user_password</span>,<span>$user_limitation</span><span>); </span><span>11</span> <span>//</span><span>以$user_id, $user_password,$user_limitation作为参数调用$login对象的login方法,返回值赋给$jugg</span> <span>12</span> <span>13</span> <span>if</span>(<span>$jugg</span>==0){<span>//</span><span>根据返回值跳转至不同的页面</span> <span>14</span> <span>header</span>('Location: http://localhost/MyMVC/user.html'<span>); </span><span>15</span> <span>} </span><span>16</span> <span>else</span><span> { </span><span>17</span> <span>header</span>('Location: http://localhost/MyMVC/admin.html'<span>); </span><span>18</span> <span>} </span><span>19</span> ?>
因为一开始就想给同学讲MVC,所以名字一开始也就取为Controller.php,现在终于名副其实了。在代码中,我导入了Model.php文件,并且使用了Class_Login中的login方法进行处理数据(验证账户)返回判断值,最后根据不同的返回值跳转至不同的页面。这就是登录过程中Controller(控制器)的作用——接收视图传来的数据(用户名、密码等信息),然后将数据交由Model(模型)处理,最后根据返回值选择不同的View(视图)进行跳转(其实还可以将模型返回的数据通过控制器交由视图显示,暂且不提)。
如果理解了Controller(控制器),其实Model也很好理解。请看Model.php的代码——
<span> 1</span> <span>php </span><span> 2</span> <span>class</span> Class_Login{<span>//</span><span>Class_Login类的定义</span> <span> 3</span> <span>public</span> <span>function</span> login(<span>$user_id</span>,<span>$user_password</span>, <span>$user_limitation</span>){<span>//</span><span>定义login方法</span> <span> 4</span> <span>$host</span> ='localhost'<span>; </span><span> 5</span> <span>$user_name</span>='root'<span>; </span><span> 6</span> <span>$password</span> =''<span>; </span><span> 7</span> <span> 8</span> <span>$admin_limitation</span> ='1'<span>; </span><span> 9</span> <span>$guest_limitation</span>='0'<span>; </span><span>10</span> <span>11</span> <span>$conn</span> = <span>mysql_connect</span>(<span>$host</span>,<span>$user_name</span>,<span>$password</span>);<span>//</span><span>连接MySQL</span> <span>12</span> <span>if</span>(!<span>$conn</span><span>){ </span><span>13</span> <span>die</span>('数据库连接失败:'.<span>mysql_error</span><span>()); </span><span>14</span> <span> } </span><span>15</span> <span>16</span> <span>mysql_select_db</span>('scut_xiaoy');<span>//</span><span>选择数据库</span> <span>17</span> <span>$sql</span>='select id,password,limitation from login'<span>; </span><span>18</span> <span>$result</span> = <span>mysql_query</span>(<span>$sql</span>) OR <span>die</span>("<br>ERROR:<br>".<span>mysql_error</span>()."<br>产生问题的SQL:".<span>$sql</span><span>); </span><span>19</span> <span>20</span> <span>if</span>(<span>$num</span>=<span>mysql_num_rows</span>(<span>$result</span><span>)) </span><span>21</span> <span> { </span><span>22</span> <span>echo</span> '<pre class="brush:php;toolbar:false">'<span> ; </span><span>23</span> <span>while</span>(<span>$row</span>=<span>mysql_fetch_array</span>(<span>$result</span>,<span>MYSQL_ASSOC)){ </span><span>24</span> <span>if</span>(<span>$row</span>['id']==<span>$user_id</span>&&<span>$row</span>['password']==<span>$user_password</span>&&<span>$row</span>['limitation']==<span>$user_limitation</span><span>){ </span><span>25</span> <span>if</span>(<span>$row</span>['limitation']==<span>$guest_limitation</span><span>){ </span><span>26</span> <span>return</span> 0<span>; </span><span>27</span> <span> } </span><span>28</span> <span>else</span><span>{ </span><span>29</span> <span>return</span> 1<span>; </span><span>30</span> <span> } </span><span>31</span> <span> } </span><span>32</span> <span> } </span><span>33</span> <span> } </span><span>34</span> <span>mysql_close</span>(<span>$conn</span><span>); </span><span>35</span> <span> } </span><span>36</span> <span> } </span><span>37</span> <span>38</span> ?>
至于两个View(视图),即是user.html、admin.html的代码我就不贴出来了,理由大家都懂~
一时半会,大概她还不会太明白这样做的含义,到项目的后期应该就会慢慢理解的了。
——————————————————————别笑,我还这就是那条分割线——————————————————————
连续写了几天博客,感觉收获越来越大。感谢所有有意无意follow这一系列博客的朋友,没有你们的点阅和评论,我绝对不可能像现在这样充满热情地写这些文字。另外,让我感到很欣慰的是,妹子学的很有兴趣,经常跟我说感觉时间过得特别快。其实,妹子没打算以后走技术路线,完成这个学校规定的实训任务之后就会投入到考研准备当中。所以,她能够做到这个地步,作为“技术顾问”我真的没有更多可以说的了。
透露一下,妹子在北京念大四,而我在广州,一个天南一个地北,所以大家别再,咳咳,都懂的。最后,透露一下,我已经拿到她的侧脸照了,在考虑是不是要爆出来。

技嘉的主板怎么设置键盘开机首先,要支持键盘开机,一定是PS2键盘!!设置步骤如下:第一步:开机按Del或者F2进入bios,到bios的Advanced(高级)模式普通主板默认进入主板的EZ(简易)模式,需要按F7切换到高级模式,ROG系列主板默认进入bios的高级模式(我们用简体中文来示范)第二步:选择到——【高级】——【高级电源管理(APM)】第三步:找到选项【由PS2键盘唤醒】第四步:这个选项默认是Disabled(关闭)的,下拉之后可以看到三种不同的设置选择,分别是按【空格键】开机、按组

Win11怎么退版本?很多朋友在升级了win11后认为其不好用,那么大家可以选择退回之前的版本哦。那么你知道该如何操作嘛?很多用户都不知道,其实方法并不难,下面小编给大家带来退回Win10的方法分享,一起来学习吧。退回Win10的方法分享1、进入“设置”。2、选择“WindowsUpdate”,然后点击“恢复”。3、在“恢复选项”中选择“以前版本的Windows”,点击“返回”。4、选择原因,然后点击“下一步”。5、你将看到“检查更新”的通知,选择“不,谢谢”。6、阅读需要了解的内容,然后点击“

神舟炫龙m7独显直连怎么开要开启神舟炫龙m7的独立显卡直连功能,您可以按照以下步骤进行操作:1.首先,确保您已经安装好了独立显卡的驱动程序。您可以前往神舟官方网站或独立显卡厂商官网下载并安装适合您显卡型号的最新驱动程序。2.在电脑桌面上,右键单击空白处,在弹出的菜单中选择“NVIDIA控制面板”(如果是AMD显卡,则选择“AMDRadeon设置”)。3.在控制面板中,找到“3D设置”或类似命名的选项,点击进入。4.在“3D设置”中,您需要找到“全局设置”或类似命名的选项。在这里,您可以指定使用独

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

耐克作为全球知名的运动品牌,其鞋子备受瞩目。然而,市场上也存在大量的假冒伪劣商品,其中就包括假冒的耐克鞋盒。辨别真假鞋盒对于保护消费者的权益至关重要。本文将为您提供一些简单而有效的方法,以帮助您辨别真假鞋盒。一:外包装标题通过观察耐克鞋盒的外包装,可以发现许多细微的差异。真正的耐克鞋盒通常具有高品质的纸质材料,手感光滑,且没有明显的刺激性气味。正品鞋盒上的字体和标志通常清晰、精细,并且没有模糊或颜色不协调的情况。二:LOGO烫金标题耐克鞋盒上的LOGO通常是烫金工艺,真品鞋盒上的烫金部分会呈现出

拯救者y7000p玩cf分辨率多少拯救者Y7000P玩CF的分辨率为1920*1080。因为该电脑配备了GTX1650显卡和i5-9300H处理器,性能较为优秀,足以满足CF这类游戏的需求。同时,1920*1080是目前主流电竞显示器的分辨率,画质清晰度足够。另外,如果有更高要求的玩家,可以适当降低游戏画质的设置,以获得更加流畅的游戏体验。为了享受更清晰的视觉体验,你可以将拯救者y7000p的分辨率调整为2560*1400。这样,你将能够享受到更高质量的图像显示。拯救者Y7000P2022款搭载

电脑100兆网口怎么变成千兆的要将电脑的100兆网口升级为千兆网口,一般需要按照以下步骤进行操作:1.确认网卡是否支持千兆网速:首先需要确认电脑上的网卡是否支持千兆以太网,如果不支持的话就无法实现将100兆网口提速至千兆。2.更换网线:要实现千兆网速,需要使用Cat5e或更高规格的网线,因为Cat5e网线可以支持千兆以太网,而对于100兆以太网来说则只需使用Cat5网线即可。3.更改网卡驱动程序:如果您的网卡支持千兆以太网,则需要更新网卡的驱动程序。可以前往网卡制造商的官方网站,下载并安装最新的

提起华硕旗下的游戏本,大家最先想起来的肯定是玩家国度,但除了玩家国度这个高端系列的游戏本之外,华硕旗下还有飞行堡垒系列的主流游戏本,下面我们就一起来看看游戏玩家呼声最高的华硕飞行堡垒7怎么样。 华硕飞行堡垒7 华硕旗下的飞行堡垒系列笔记本,定位轻松畅玩大型游戏,主打坚固与耐用,一直以来都是大众游戏玩家、学生群体的热门之选。 基本配置 首先我们来了解下这台飞行堡垒7的一些核心配置吧,从配置表中看,最值得注意的就是AMDRyzen73750H+NVIDIAGeForceGTX1660Ti


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SublimeText3 Linux new version
SublimeText3 Linux latest version

Notepad++7.3.1
Easy-to-use and free code editor

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

Dreamweaver CS6
Visual web development tools
