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: 騎馬的少年 <phpwechat@126.com> <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 模塊首頁鏈接,則剛才投稿的文章已經顯示出來:

 

至此,一個帶有前端投稿功能的小模塊順利完成。我們離畢業已經越來越近了!:)

 

《10天學會phpWeChat》系列教程傳送門:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM