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

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

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

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

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

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>投稿</title>
</head> <body>
<form action="{U('hello','tougaosave')}" method="post" name="tougaoform">
标题:<input type="text" name="info[title]" size="36" />
<br />
内容:<textarea name="info[content]" cols="55" rows="5"></textarea>
<br />
<input type="submit" value="投稿" />
</form>
</body>
</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

 <?php
use wechat\hello\hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_APP') && exit('Access Denied!'); switch($action)
{
case 'index':
//从数据表读取数据并赋给数组$data
$data=Hello::dataList(); break;
case 'detail':
$data=Hello::dataGet($id); //$id 可以改成$_GET['id']
break;
case 'tougao': break;
case 'tougaosave':
print_r($info);
exit();
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>

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

 case 'tougaosave':
print_r($info);
exit();
break;

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

效果如下:

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

 <?php
// +----------------------------------------------------------------------
// | phpWeChat hello 操作类 Last modified 2016-12-28 00:02:22
// +----------------------------------------------------------------------
// | Copyright (c) 2009-2016 phpWeChat http://www.phpwechat.com All rights reserved.
// +----------------------------------------------------------------------
// | Author: 骑马的少年 <phpwechat@126.com> <http://www.phpwechat.com>
// +----------------------------------------------------------------------
namespace wechat\Hello; use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\DataInput;
use phpWeChat\DataList;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; class Hello
{
public static $mPageString=''; // 这个静态成员是系统自带,请勿删除
private static $mArticleTable='wechat_hello_article'; static public function dataList()
{
//DB_PRE常量是phpWeChat自带常量,指数据表前缀。 $data=MySql::fetchAll("SELECT * FROM `".DB_PRE.self::$mArticleTable."` ORDER BY `id` DESC"); return $data;
} static public function dataGet($id)
{
//DB_PRE常量是phpWeChat自带常量,指数据表前缀。 $id=intval($id); $data=MySql::fetchOne("SELECT * FROM `".DB_PRE.self::$mArticleTable."` WHERE `id` =".$id); return $data;
} static function dataInsert($data)
{
return MySql::insert(DB_PRE.self::$mArticleTable,$data);
}
}
?>

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

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

 <?php
use wechat\hello\hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_APP') && exit('Access Denied!'); switch($action)
{
case 'index':
//从数据表读取数据并赋给数组$data
$data=Hello::dataList(); break;
case 'detail':
$data=Hello::dataGet($id); //$id 可以改成$_GET['id']
break;
case 'tougao': break;
case 'tougaosave':
//print_r($info); $op=Hello::dataInsert($info); if($op)
{
echo '文章投稿成功,ID为'.$op;
}
else
{
echo '文章投稿失败';
}
exit();
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>

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

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

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

《10天学会phpWeChat》系列教程传送门:

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

  1. 10天学会phpWeChat——第七天:创建一个自适应PC网站+H5移动端的模块

    本教程基于phpWeChat核心框架1.1.0+版本.下载地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20 通过前面六讲的系 ...

  2. 10天学会phpWeChat——第六天:实现新闻的后台管理

    通过前面五讲的系列教程,我们完成了一个简单模块的前端发布.列表展示.详情展示.实际生产环境中,所有前台的数据都会有对应的后台操作进行统筹管理.我们称之为后台管理系统. 今天,我们开始<10天学会 ...

  3. 10天学会phpWeChat——第四天:大U函数U()的使用

    在第三天,我们创建了一个"增强版"的文章模块,实现了数据从数据库到视图端展示的流程.但是我们仅仅是实现了数据列表的展示,对于文章详情等页面跳转并未涉及. 本文重点讲解phpWeCh ...

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

    在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从M ...

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

    今天我们开始进入<10天学会phpWeChat>系列教程的第二天:创建我的第一个hello world! 功能模块. 1.登录后台,进入 系统设置--自定义模块,如图: 自定义模块参数说明 ...

  6. 10天学会phpWeChat——第一天:核心框架的目录结构

    phpWeCaht是一款优秀的PC网站+微信公共号开发框架. 本博客系列将图文结合,详细介绍phpWeChat 的使用方法,今天进入phpWeChat系列教程之<10天学会phpWeChat&g ...

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

    通过前面七讲的系列教程,我们完成了一个包含后台并自适应PC+h5移动端的文章管理模块. 在实际的生产环境中,文章投稿.商品上传等操作并不会简单局限于一个text和textarea组成的表单.在实际中, ...

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

    数据库的操作(CRUD)是一个现代化计算机软件的核心,尤其针对web应用软件.虽然在前面的几讲里,我们针对数据库操作大致有了一些了解,但今天我们需要再次强化下. 除了新瓶装老酒,我们今天还引入一个新的 ...

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

    通过前面的系列教程,我们系统的讲解了phpWeChat从视图端.控制器端到模型端的操作流程:熟悉了phpWeChat的目录结构:掌握了视图端模板如何创建一个丰富的表单和模型端如何操作数据库.这一切都是 ...

随机推荐

  1. JAVA vo pojo javabean dto区别

    JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性 ...

  2. 转一下关于struct字对齐的原因

    作者:張道遠链接:https://www.zhihu.com/question/27862634/answer/38506197来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. 一、Android屏幕的计量单位

    px  :是屏幕的像素点in   :英寸mm:毫米pt   :磅,1/72英寸dp  :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1pxdip :等同于dpsp  :同dp ...

  4. SP Flash Tool使用异常集锦

    1.The load scatter file is invalid无法载入scatter文件 (ubuntu下)我如果我们在使用MTK的Smart Phone Flash Tool过程中无法载入Sc ...

  5. 【转】Duff's Device

    在看strcpy.memcpy等的实现发现用了内存对齐,每一个word拷贝一次的办法大大提高了实现效率,参加该blog(http://totoxian.iteye.com/blog/1220273). ...

  6. UVA 1151二进制枚举子集 + 最小生成树

    题意:平面上有n个点(1<=N<=1000),你的任务是让所有n个点连通,为此, 你可以新建一些边,费用等于两个端点的欧几里得距离的平方.另外还有q(0<=q<=8)个套餐(数 ...

  7. C# 生成条形码图片,效果不错

    //首先引用 条码库BarcodeLib.dll using System; using System.Collections.Generic; using System.Linq; using Sy ...

  8. Unity3D教程:茄子童萌會

    http://s.epb.idv.tw/han-shi-ku/unity Unity 0000 Unity3D學習之路 - C#學習筆記(一) 0001 Unity3D學習之路 - C#學習筆記(二) ...

  9. LINQ To SQL

    议程 1.LINQ To SQL概述 2.LINQ To SQL对象模型 3.LINQ To SQL查询 用到的数据库 SQL Server 2005,数据库名为Test. 两张表,分别为Studen ...

  10. redis DB操作

    数据库操作 1)  REDIS是全部由KEY和VALUE值构成,对数据库的增删改查操作都是基于在通过key 映射到哈希槽 然后通过哈希槽进行单向链式遍历 查找到value和具体的key. 同样 在查看 ...