09-php架構編寫的項目–投票系統

來源:互聯網
上載者:User

需求:

1.使用者訪問votesys.com可以顯示投票的項目的列表資訊,可以進行投票,可以限制投票的次數。

2.後台可以對投票的項目進行增加,增加的時候有驗證(伺服器的驗證)

3.後台可以添加禁用的IP,被禁用的Ip不可以進行投票。

建立資料庫:votedb

資料庫表的建立:

--選項表,MyISAM和InnoDB區別是InnoDB有外鍵,MyISAM運行快。create table item(--選項編號id bigint unsigned primary key auto_increment,--選項名稱name varchar(64) not null,--選項描述description varchar(128) not null,--投票次數vote_count bigint unsigned)engine MyISAM;--投票日誌表create table vote_log(--投票日誌IDid bigint unsigned primary key auto_increment,--投票者IP地址ip varchar(20) not null,--投票者日期vote_date bigint not null,--對哪個投的item_id bigint not null)engine MyISAM;--過濾IP表create table filter(id bigint unsigned primary key auto_increment,ip varchar(20))engine MyISAM;

在DOS建立項目:
zf.bat create project d:/myvotesys
在zs中建立空項目votesys並copy已經建立好的專案檔。

然後在hosts檔案中加入:

127.0.0.1  votesys.com   

然後配置虛擬機器主機:

在httpd-vhosts.conf檔案中加入

#投票系統
<VirtualHost *:80>
    DocumentRoot "C:/myenv/apache/htdocs/votesys/public"
    ServerName votesys.com
    DirectoryIndex index.php
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    </Directory>
</VirtualHost>

application.ini

[production]phpSettings.display_startup_errors = 0phpSettings.display_errors = 0includePaths.library = APPLICATION_PATH "/../library"bootstrap.path = APPLICATION_PATH "/Bootstrap.php"bootstrap.class = "Bootstrap"appnamespace = "Application"resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"resources.frontController.params.displayExceptions = 0[mysql]db.adapter=PDO_MYSQLdb.params.host=localhostdb.params.username=rootdb.params.password=rootdb.params.dbname=votedb

AdminController.php

<?php//如果檔案在同一級目錄下,直接寫入檔案名稱引入即可//如果檔案不再同一級的目錄下面,需要用絕對路徑進行引入require_once 'BaseController.php';require_once APPLICATION_PATH . '/models/Item.php';require_once APPLICATION_PATH . '/models/Filter.php';/** *  * @author Administrator *這個控制器專門用來管理後台 */class AdminController extends BaseController {/** * 跳轉到index.php頁面的Action * index.php是首頁顯示頭片項目列表 * 以及投票的投票次數,投票操作的首頁面 */public function indexAction() {// action body}/** * 進入到後台增加投票選項的頁面 *用於添加需要投票的項目 *如蘋果,鴨梨......  */public function additemuiAction() {//如果action中什麼都沒有寫,相當於$this->render ( 'additemui' );}/** * 處理投票項目添加的請求 * 通過這個方法可以向資料庫中的item表中插入 *新的投票項目 */public function additemAction() {//擷取使用者輸入的內容$name = $this->getRequest ()->getParam ( 'name' );if ($name == "") {$this->view->info = '您輸入的名字為空白';//顯示資訊$this->_forward ( 'error', 'global' );return;}$description = $this->getRequest ()->getParam ( 'description' );//$vote_count = $this->getRequest ()->getParam ( 'vote_count' );//使用$vote_count = empty ( $_REQUEST ['vote_count'] ) ? 0 : $_REQUEST ['vote_count'];//在伺服器對輸入的資料進行驗證//echo $name.'--'.$description.'--'.$vote_count;//exit();//數組$data = array ('name' => $name, 'description' => $description, 'vote_count' => $vote_count );//建立一個表模型對象$itemModel = new Item ();$itemModel->insert ( $data );//插入資料記錄成功,跳轉到$this->render ( 'ok' );}/** * 用於處理增加過濾ip超連結請求的action * 通過render跳轉到添加過濾ip頁面 */public function addfilteripuiAction() {$this->render ( 'addfilterip' );}/** * 響應增加ip的請求 * 用於向資料庫中添加一個封殺的ip地址 */public function addfilteripAction() {//擷取使用者輸入的ip是多少$ip = $this->getRequest ()->getParam ( 'ip' );$filterModel = new Filter ();//添加到資料庫中一個記錄$data = array ('ip' => $ip );if ($filterModel->insert ( $data ) > 0) {//說明在資料庫中添加資料成功,跳轉到全域視圖//跳轉到globalController下的okAction方法對應的視圖ok.phtml//添加返回的資訊$this->view->info = '增加過濾IP成功!';$this->_forward ( 'ok', 'global' );} else {$this->view->info = '增加過濾IP失敗!';$this->_forward ( 'error', 'global' );}}}

BaseController.php

<?php//做一個父類,專門供其它的controller來繼承class BaseController extends Zend_Controller_Action {public function init() {//初始化我們的資料庫適配器$url = constant ( "APPLICATION_PATH" ) . DIRECTORY_SEPARATOR . 'configs' . DIRECTORY_SEPARATOR . 'application.ini';$dbconfig = new Zend_Config_Ini ( $url, "mysql" );$db = Zend_Db::factory ( $dbconfig->db );$db->query ( 'SET NAMES UTF8' );Zend_Db_Table::setDefaultAdapter ( $db );}}?>

GlobalController.php

<?phprequire_once 'BaseController.php';/** *  * @author Administrator */class GlobalController extends BaseController {//跳轉到ok介面public function okAction() {}//跳轉到error介面public function errorAction() {}}

IndexController.php

<?phprequire_once 'BaseController.php';require_once APPLICATION_PATH . '/models/Item.php';class IndexController extends BaseController {public function indexAction() {//建立一個item表模型$itemModel = new Item ();$items = $itemModel->fetchAll ()->toArray ();//echo "<pre>";//print_r($items);//echo "</pre>";//exit();$this->view->items = $items;}}

VoteController.php

<?phprequire_once 'BaseController.php';require_once APPLICATION_PATH . '/models/Item.php';require_once APPLICATION_PATH . '/models/VoteLog.php';require_once APPLICATION_PATH . '/models/Filter.php';/** *  * @author Administrator *這個控制器專門用來處理投票請求 */class VoteController extends BaseController {/** * 跳轉到index.php頁面的Action */public function voteAction() {//echo "oooook";//exit();//擷取使用者投票的Id$item_id = $this->getRequest ()->getParam ( 'itemid', 'no' );//擷取ip地址//$_SERVER ['REMOTE_ADDR'];$ip = $this->getRequest ()->getServer ( 'REMOTE_ADDR' );//看看該使用者的ip是否被禁用$filterModel=new Filter();$filters=$filterModel->fetchAll("ip='$ip'")->toArray();if(count($filters)>=1){$this->view->info='您的IP被禁用了!您不能投票了!';   $this->_forward('error','global');   return ;}//echo $item_id . "--" . $ip;//exit();//擷取當前日期$today = date ( 'Ymd' );//先看看vote_log表中是否投過一次//建立votelog執行個體$voteLogModel = new VoteLog ();//條件陳述式$where = "ip='$ip' AND vote_date=$today";$res = $voteLogModel->fetchAll ( $where )->toArray ();if (count ( $res ) > 5) {//提示一句話$this->render ( 'error' );return;} else {//更新vote_count,添加投票日誌$data = array ('ip' => $ip, 'vote_date' => $today, 'item_id' => $item_id );if ($voteLogModel->insert ( $data ) > 0) {//如果返回的數值大於0,添加成功//更新$itemModel = new Item ();//通過主鍵擷取對應的記錄$item = $itemModel->find ( $item_id )->toArray ();$newvote = $item [0] ['vote_count'] + 1;$set = array ('vote_count' => $newvote );$where = "id=$item_id";$itemModel->update ( $set, $where );}$this->render ( 'ok' );}}}

Filter.php

<?php/** * 這裡必須繼承zend_db_table 否則就不是表模型 */class Filter extends Zend_Db_Table {//預設的主鍵為IDprotected $_name = 'filter';}?>

Item.php

<?php/** * 這裡必須繼承zend_db_table 否則就不是表模型 */class Item extends Zend_Db_Table {//預設的主鍵為IDprotected $_name = 'item';}?>

VoteLog.php

<?php/** * 這裡必須繼承zend_db_table 否則就不是表模型 */class VoteLog extends Zend_Db_Table {//預設的主鍵為ID,設定和對應的表關聯protected $_name = 'vote_log';}?>

addfilterip.phtml

<h1>增加過濾ip</h1><form action='/admin/addfilterip' method='post'><table><tr><td>ip地址</td><td><input type='text' name='ip' /></td></tr><tr><td><input type='submit' value='增加' /></td><td><input type='reset' value='重填' /></td></tr></table></form>

additemui.phtml

<h1>增加投票選項</h1><form action='/admin/additem' method='post'><table><tr><td>名稱</td><td><input type='text' name='name' /></td></tr><tr><td>描述</td><td><textarea rows="5" cols="30" name="description"></textarea></td></tr><tr><td>初始化投票數</td><td><input type='text' name='vote_count' /></td></tr><tr><td><input type='submit' value='增加' /></td><td><input type='reset' value='重填' /></td></tr></table></form>

index.phtml

<h1>投票的後台管理程式</h1><ul><li><a href='/admin/additemui'>增加投票選項</a></li><li><a href="/admin/addfilteripui">增加過濾IP</a></li></ul>

ok.phtml

<script type="text/javascript">alert('投票操作成功!');history.back();</script>

error.phtml

<script type="text/javascript">alert('<?phpecho $this->info?>');history.back();</script>

ok.phtml

<script type="text/javascript">alert('<?phpecho $this->info?>');history.back();</script>

index.phtml

<link href="/css/mycss.css" type="text/css" rel="stylesheet" /><script type="text/javascript" src="/js/myjs.js"></script><h1>請你投票</h1><div id="img"><img src="/images/logo.gif" width="640px" height="480px" /></div><table border="1" cellspacing="0" bordercolor="green" width="500px"height="200px"><tr bgcolor="yellow"><td>name</td><td>description</td><td>vote_count</td><td>vote</td></tr><?phpforeach ( $this->items as $item ) {?><tr><td><?phpecho $item ["name"]?></td><td><?phpecho $item ['description']?></td><td><?phpecho $item ['vote_count']?></td><td><a href="/vote/vote?itemid=<?phpecho $item ['id']?>">投票</a></td></tr><?php}?></table>

error.phtml

<script type="text/javascript">alert('您今天投票的次數已經木有了,不能再進行投票了^v^~');history.back();</script>

ok.phtml

<script type="text/javascript">alert('投票操作成功!');history.back();</script>

目錄:

檔案按照目錄的順序書寫。

訪問後台:

超級個性的首頁面:

項目資源檔:http://download.csdn.net/detail/u010653050/5977835

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.