政务网站建设交流发言,龙岩网站建设方案优化,电商平台开发报价,杭州专门做网站在之前的文章#xff0c;已经实现了注册登录的功能#xff0c;主要熟悉TP与HTML、JS交互#xff0c;数据库的基本操作等。接下来就要登录到主页#xff0c;熟悉一下列表的处理#xff0c;以及数据库多表联查操作。为了简化模型#xff0c;列表的字段仅有文章标题、简介、…在之前的文章已经实现了注册登录的功能主要熟悉TP与HTML、JS交互数据库的基本操作等。接下来就要登录到主页熟悉一下列表的处理以及数据库多表联查操作。为了简化模型列表的字段仅有文章标题、简介、内容、封面图片、作者字段。Session保持从登录到主页要想实现上述的功能就需要先进入到首页这里设计的是用户必须先登录才能进入到首页因此需要使用Session来记录登录的状态。在TP中使用Session格外简单。创建一个sessionsession(name,value);删除一个sessionsession(name,null);删除所有sessionsession(null);以上仅是最基本的使用方法还有其他的一些用法可以查看文档。所以需要在登录成功时把session创建好进入主页后检查session是否存在存在则继续不存在就返回到登录。修改login方法public function login() {//HTTP协议传输json需要添加请求头header(Content-Type:application/json; charsetutf-8);...//校验session(username, $user_name);$return[code] 1;$return[message] 登录成功;echo json_encode($return);}然后在index.html里点击登录按钮时加入以下跳转语句window.location.href {:U(Index/home)};为了测试这一点先写一个简单的主页仅仅输出一句话。然后创建home方法public function home() {$username session(username);if (empty($username)) {$this-redirect(Index/index);} else {$this-display();}}这段逻辑是如果session为空就跳转到登录页面成功获取到session时才显示主页。跳转要用重定向redirect方法。以上便实现了携带登录信息并跳转到主页的功能了然而有一个细节问题是当用户点击浏览器的返回按钮时页面又回退到了之前的登录页面很显然这不是我们希望的行为。我们希望用户点返回按钮时如果已经登录了依然停在主页。一般的做法是进入登录页时请求数据如果是已登录状态就跳转到主页这样点击返回按钮时返回到了登录页登录页又重新跳转到了主页便实现了我们需要的功能。代码比较简单节约篇幅就不粘贴了可以在文末链接查看。创建文章数据表初始化一些测试数据在数据库中加入以下这张表create table if not exists article(id int unsigned auto_increment,title varchar(50) not null,descript text not null,content text not null,image_path varchar(100) not null,author_id int unsigned not null,create_time int unsigned not null default 0,primary key (id))engineInnoDB default charsetutf8;其中author_id对应的是User表中对应作者的id。然后在项目的根目录创建一个upload文件夹因为是练手所以图片都直接放在项目里了实际中当项目比较大时文件都是专门放在另外的服务器的。然后找几张图片命名后放在以下路径image.png接下来在数据库中插入几条数据其中图片的路径写相对于根目录的路径也就是/upload/home/image/xxx.jpg。示例如下insert into article (title,descript,content,image_path,author_id,create_time)values (重磅消息1,Python超过Java了1,Python超过Java了,在Github上排名第二Java屈居第三。1,/upload/home/image/article1.jpg,1,0);多表联查显示在主页如文章一开始所言在页面上展示列表需要的字段有文章标题、简介、封面图和作者信息。前几个字段都在article这张表中而作者的信息是通过author_id字段关联到user表中的所以想要获取作者的信息就涉及到了联查。在MySQL中使用join关键字进行联查。规则为... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON condition其中INNER表示取得两个表中存在连接匹配关系的记录LEFT表示取得左表(table1)完全记录即使右表(table2)并无对应匹配记录RIGHT表示取得右表(table2)完全记录即使左表(table1)并无匹配对应记录。文字表述很是生硬下面看如何利用这个规则来查询出我们需要的数据因为article表和user表对我们一样重要所以应该使用INNER模式selectarticle.title,article.descript,article.content,article.image_path,user.user_namefromarticleinner joinuseronarticle.author_iduser.id;以上语句就表示找到一条article记录根据它的author_id找到一条user记录如果这个条件成立就把它的结果合并成一条数据返回数据只取我们select的字段。把数据库中所有的数据都找完之后就返回了一个列表这个列表就是我们需要的。除此以外如果两个表中有重复的字段时还可以使用别名来区分如这条语句使用别名就表示为selecta.title title,a.descript descript,a.content content,a.image_path image_path,u.user_name user_namefromarticle ainner joinuser uona.author_idu.id;也就是给article起别名为a给user起别名为u并给每个字段都起了别名这样如果a和u中如果有相同的字段可以通过不同的命名使返回结果符合预期。以上是用MySQL命令行实现的查询那么用TP该怎么写呢首先别名使用alias方法限定要查询的字段使用fieldjoin则有对应的方法名称也为join。所以以上语句使用TP的连贯操作如下$Article M(Article);$res $Article-alias(a)-field(a.title title,a.descript descript,a.content content,a.image_path image_path,u.user_name user_name)-join(inner join user u on a.author_idu.id)-select();当使用的join为inner方式时join方法中的“inner join”可以省略。获取到数据后需要把数据渲染到页面上这里有两种方式可以选择。一种是已经很熟悉的Ajax还有一种则是在HTML中嵌入php代码。因为更熟悉Ajax这里先展示Ajax的写法。由于界面是列表所以等标签只能动态创建我们使用jQuery完成这个功能类似如下$.each(list,function(index,value,array)){$(container).append({这里写要添加的div});}套用一下这里list就是我们的数组$.each是jQuery里的foreach循环的写法后边的index、value就表示位置和值。append方法就是往container中添加组件把全部代码都写在参数里就好了这里参数是字符串所以引用变量要用和字符串连接起来。例如 value.user_name ......原理就是这样的要看详细的代码可以在文末链接找。接下来实现第二种方案就是在HTML中嵌入php代码。这种方式就需要在调用display方法前把数据从数据库中查询出来然后通过assign方法绑定到页面上然后在页面里的php代码就可以获取到数据的值。修改home方法public function home() {$username session(username);if (empty($username)) {$this-redirect(Index/index);} else {$Article M(Article);$res $Article-alias(a)-field(a.title title,a.descript descript,a.content content,a.image_path image_path,u.user_name user_name)-join(user u on a.author_idu.id)-select();$this-assign(articles, $res);$this-display();}}以上代码使用assign把数据绑定到了页面上articles变量。接下来我们在html中使用这个变量。因为是数组所以也需要遍历。{$art.title}......可以看到使用也是非常简单只是使用变量时要使用php的规则并且用花括号括起来。在实际中根据需要两种方式都可以选择如果是前后端分离肯定只能用第一种方式了或者用别的框架实现但php都只以接口的形式提供数据。这样一个展示列表的页面就完成了相关代码已经同步到github。