10天学会phpWeChat——第五天:实现新闻投稿功能

在前几讲里,我们逐渐实现了自己小模块的新闻列表展示、新闻详情展示功能,现在您已经初步有能力开发一个phpWeChat小模块了,本文将在已开发的hello world模块基础上,增加一个新的功能——新闻投稿。

今天我们进入《10天学会phpWeChat》系列教程的第五天:实现新闻投稿功能,通过今天的学习,希望大家对phpWeChat的表单提交、数据入库有个清晰的认识。

我们定义,投稿的链接为:http://www.example.com/index.php?m=hello&a=tougao,如同以前的情况,目前直接访问改地址,肯定是报模板不存在的错误的,针对这个链接我们需要建立对应的模型处理函数、控制器路由以及对应的视图文件。

1、创建投稿视图文件 template/default/tougao.html

在视图文件里,我们创建一个表单用来提交文章数据

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>投稿</title>
 6 </head>
 7
 8 <body>
 9 <form action="{U(‘hello‘,‘tougaosave‘)}" method="post" name="tougaoform">
10     标题:<input type="text" name="info[title]" size="36" />
11     <br />
12     内容:<textarea name="info[content]" cols="55" rows="5"></textarea>
13     <br />
14     <input type="submit" value="投稿" />
15 </form>
16 </body>
17 </html>

访问http://www.example.com/index.php?m=hello&a=tougao,效果如下:

在以上的视图表单代码中,我们定义了form提交后的action为http://www.example.com/index.php?m=hello&a=tougaosave。因此我们需要在控制器里添加这个case ‘tougaosave‘:路由来实现对应的数据保存逻辑。

2、编辑前端控制器文件index.php

 1 <?php
 2     use wechat\hello\hello;
 3     use phpWeChat\Area;
 4     use phpWeChat\CaChe;
 5     use phpWeChat\Config;
 6     use phpWeChat\Member;
 7     use phpWeChat\Module;
 8     use phpWeChat\MySql;
 9     use phpWeChat\Order;
10     use phpWeChat\Upload;
11
12     !defined(‘IN_APP‘) && exit(‘Access Denied!‘);
13
14     switch($action)
15     {
16         case ‘index‘:
17             //从数据表读取数据并赋给数组$data
18             $data=Hello::dataList();
19
20             break;
21         case ‘detail‘:
22             $data=Hello::dataGet($id); //$id 可以改成$_GET[‘id‘]
23             break;
24         case ‘tougao‘:
25
26             break;
27         case ‘tougaosave‘:
28             print_r($info);
29             exit();
30             break;
31         //以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展
32
33         //case ‘index‘:
34
35             //在此写 index.php?m=hello&a=index 时的逻辑
36
37             //break;
38
39         //case ‘list‘:
40
41             //在此写 index.php?m=hello&a=list 时的逻辑
42
43             //break;
44
45         //以此类推...
46
47         //case ‘...‘:
48
49             //在此写 index.php?m=hello&a=... 时的逻辑
50
51             //break;
52
53         default:
54             break;
55     }
56 ?>

在以上的控制器中,我们通过

1 case ‘tougaosave‘:
2             print_r($info);
3             exit();
4             break;

来实现提交的数据处理。这里暂时只打印下数据。

效果如下:

3、编辑模型类文件(include/hello.class.php),增加处理方法来实现数据真正入库

 1 <?php
 2 // +----------------------------------------------------------------------
 3 // | phpWeChat hello 操作类 Last modified 2016-12-28 00:02:22
 4 // +----------------------------------------------------------------------
 5 // | Copyright (c) 2009-2016 phpWeChat http://www.phpwechat.com All rights reserved.
 6 // +----------------------------------------------------------------------
 7 // | Author: 骑马的少年 <[email protected]> <http://www.phpwechat.com>
 8 // +----------------------------------------------------------------------
 9 namespace wechat\Hello;
10
11 use phpWeChat\Area;
12 use phpWeChat\CaChe;
13 use phpWeChat\Config;
14 use phpWeChat\DataInput;
15 use phpWeChat\DataList;
16 use phpWeChat\Member;
17 use phpWeChat\Module;
18 use phpWeChat\MySql;
19 use phpWeChat\Order;
20 use phpWeChat\Upload;
21
22 class Hello
23 {
24     public static $mPageString=‘‘; // 这个静态成员是系统自带,请勿删除
25     private static $mArticleTable=‘wechat_hello_article‘;
26
27     static public function dataList()
28     {
29         //DB_PRE常量是phpWeChat自带常量,指数据表前缀。
30
31         $data=MySql::fetchAll("SELECT * FROM `".DB_PRE.self::$mArticleTable."` ORDER BY `id` DESC");
32
33         return $data;
34     }
35
36     static public function dataGet($id)
37     {
38         //DB_PRE常量是phpWeChat自带常量,指数据表前缀。
39
40         $id=intval($id);
41
42         $data=MySql::fetchOne("SELECT * FROM `".DB_PRE.self::$mArticleTable."` WHERE `id` =".$id);
43
44         return $data;
45     }
46
47     static function dataInsert($data)
48     {
49         return MySql::insert(DB_PRE.self::$mArticleTable,$data);
50     }
51 }
52 ?>

在模型文件中,我们定义了dataInsert()方法来实现数据的数据库插入,此时我们正式修正控制器的操作:

4、最终的前端控制器文件index.php

 1 <?php
 2     use wechat\hello\hello;
 3     use phpWeChat\Area;
 4     use phpWeChat\CaChe;
 5     use phpWeChat\Config;
 6     use phpWeChat\Member;
 7     use phpWeChat\Module;
 8     use phpWeChat\MySql;
 9     use phpWeChat\Order;
10     use phpWeChat\Upload;
11
12     !defined(‘IN_APP‘) && exit(‘Access Denied!‘);
13
14     switch($action)
15     {
16         case ‘index‘:
17             //从数据表读取数据并赋给数组$data
18             $data=Hello::dataList();
19
20             break;
21         case ‘detail‘:
22             $data=Hello::dataGet($id); //$id 可以改成$_GET[‘id‘]
23             break;
24         case ‘tougao‘:
25
26             break;
27         case ‘tougaosave‘:
28             //print_r($info);
29
30             $op=Hello::dataInsert($info);
31
32             if($op)
33             {
34                 echo ‘文章投稿成功,ID为‘.$op;
35             }
36             else
37             {
38                 echo ‘文章投稿失败‘;
39             }
40             exit();
41             break;
42         //以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展
43
44         //case ‘index‘:
45
46             //在此写 index.php?m=hello&a=index 时的逻辑
47
48             //break;
49
50         //case ‘list‘:
51
52             //在此写 index.php?m=hello&a=list 时的逻辑
53
54             //break;
55
56         //以此类推...
57
58         //case ‘...‘:
59
60             //在此写 index.php?m=hello&a=... 时的逻辑
61
62             //break;
63
64         default:
65             break;
66     }
67 ?>

此时提交表单,提示如下图所示:

我们访问:http://www.example.com/index.php?m=hello&a=index 模块首页链接,则刚才投稿的文章已经显示出来:

至此,一个带有前端投稿功能的小模块顺利完成。我们离毕业已经越来越近了!:)

时间: 2025-01-05 17:36:53

10天学会phpWeChat——第五天:实现新闻投稿功能的相关文章

10天学会phpWeChat——第八天:Form类,丰富表单提交的字段类型

通过前面七讲的系列教程,我们完成了一个包含后台并自适应PC+h5移动端的文章管理模块. 在实际的生产环境中,文章投稿.商品上传等操作并不会简单局限于一个text和textarea组成的表单.在实际中,我们可能会用到web富文本编辑器(如ueditor.markdown).图片上传.多图上传.附件上传.地图标注等更加丰富的表单类型. 今天,我们开始<10天学会phpWeChat>的第八讲:Form类,丰富表单提交的字段类型. 一.什么是Form类? Form类是phpWeChat封装好的一个类,

10天学会phpWeChat——第十天:phpWeChat的会员注册、登录以及微信网页开发

通过前面的系列教程,我们系统的讲解了phpWeChat从视图端.控制器端到模型端的操作流程:熟悉了phpWeChat的目录结构:掌握了视图端模板如何创建一个丰富的表单和模型端如何操作数据库.这一切都是传统Web以及现代H5开发的核心. 我们今天进行<10天学会phpWeChat>教程的最后一讲,phpWeChat的微信网页开发.在这一讲里,我们将重点讲解在微信网页开发中几个常见参数的获取和一个微信扫一扫的实例. 一.微信网页开发中的几个重要参数(文档参考:https://mp.weixin.q

10天学会phpWeChat——第二天:hello world!我的第一个功能模块

今天我们开始进入<10天学会phpWeChat>系列教程的第二天:创建我的第一个hello world! 功能模块. 1.登录后台,进入 系统设置--自定义模块,如图: 自定义模块参数说明: 上级模块:上级模块一共三个选项:会员member (一般很少会在其下面建立模块).pc电脑端(建立Pc访问的官网.单页.商城模块等).wechat微信公共号端(建立微信公共号端访问的微官网.微资讯.微商城等) 这里我们可以根据实际需求选择,此处示例我们选择wechat. 模块名称:模块的中文名称,命名没特

10天学会phpWeChat——第三天:从数据库读取数据到视图

在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从MySql读取并通过视图多样化的呈现给用户. 今天我们进入<10天学会phpWeChat>系列教程的第三天:从数据库读取数据到视图. 一.首先,我们创建一个MySql数据文章表(pw_wechat_hello_article)用来存储要显示给用户的数据. 为了简单明了,这个表我们只保留3个字段: I

10天学会phpWeChat——第九天:数据库增、删、改、查(CRUD)操作

数据库的操作(CRUD)是一个现代化计算机软件的核心,尤其针对web应用软件.虽然在前面的几讲里,我们针对数据库操作大致有了一些了解,但今天我们需要再次强化下. 除了新瓶装老酒,我们今天还引入一个新的数据库操作方法:连贯操作. 今天讲解的内容是基于phpWeChat核心框架1.1.3版本, 下载地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20 框架更新:http://bbs.phpwechat.com/forum-2-1

10分钟学会基于ASP.NET的 JQuery实例 (转)

本文介绍如何在ASP.NET(ASP.NET/AJAX)里使用基于JQuery的AJAX技术.(源代码下载见最后) 在使用JQuery前,请到www.jquery.com下载最新版本的js代码,然后再代码里使用 <script src="_scripts/jQuery-1.2.6.js" type="text/javascript"></script>即可,当然,由于微软已经把JQuery集成到VS里,所以你可以到WWW.ASP.NET/aj

10天学安卓-第五天

原文:10天学安卓-第五天 经过前几天的练习,相信大家已经对如何做出一个简单的界面有了初步的了解,并且已经做出来一个还不错的天气列表了. 今天大家稍事休息,要练习的内容比较少,着重学习一些理论知识,先理清几个概念. Android系统架构 Android系统本质上是Linux系统,但相对于Linux系统,主要在驱动.性能.内存管理.设备管理等一些部分做了比较多的改动,以更适用于移动设备. 从上图可以看到,Android系统架构为四层,分别是Linux内核.系统运行库.应用程序框架以及应用层,每一

10分钟学会Linux

10分钟学会Linux有点夸张,但是可以让一个新手初步熟悉Linux中最重要最基本的知识,本文翻译的英文网页在众多Linux入门学习的资料中还是非常不错的. 英文地址:http://freeengineer.org/learnUNIXin10minutes.html 中文译文如下: 前言  这是我已经在过去的几年中给学生(CAD用户培训)培训中所使用的材料. 其目的是在一个页面上就可以使用 UNIX的shell的基础命令.(这样他们就没有打电话问我了). 本文档受版权保护,但根据GFDL的条款自

10分钟学会MySQL基础教程

10分钟学会MySQL基础操作 1分钟安装 Part1:写在最前 MySQL安装的方式有三种: ①rpm包安装 ②二进制包安装 ③源码安装 这里我们推荐二进制包安装,无论从安装速度还是用于生产库安装环境来说,都是没问题的.现在生产库一般采用MySQL5.6,测试库采用MySQL5.7. MySQL5.6安装看这里 http://suifu.blog.51cto.com/9167728/1846671 MySQL5.7安装看这里 http://suifu.blog.51cto.com/916772