為什麼這篇PHP 判斷是否登入鄉民發文收入到精華區:因為在PHP 判斷是否登入這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者tao2tw (smile_ting)看板PHP標題[討論] 登入驗證 on Codeignit...
趁著我的網站還沒大到難以控制的階段,
這禮拜下定決心要跳到CI
只是很多傳統觀念 還是轉不太過來。
現在要把首頁搬到新的架構 頭就有點亂了。
下面網址是簡單圖文解說我在ci上的新設計
雖然都是寫英文,但是有盡量用簡單流程圖 解釋架構概念
(如果有建議的地方 煩請指正)
http://tinyurl.com/8cuzykg
另外請問一下,我的原本網站有需要很多處理訂單的task
通常我可能就是 order.php ==(中間穿插 js 驗證) ==> order_process.php
order.php
會去抓User info(從mysql) , 自動帶入一些訊息
order_process.php
會去抓User Info
並且把訂單資料 insert into database
順便利用 zend framwork library 把資料丟到google docs
這部份如果要轉到CI的話目前頭有點痛
大致想到架構就是, create new controller "Order"
在Order裡面有兩個function : submit() , process()
就在這兩個function 裡面 把之前做的工作都丟進來
process() 這邊沒有什麼view 需要display 出來。
但像是原本 php 我有寫很多 自定的 function 比如說 (common.php)
所以在我的process()裡面可能也會充斥著
require_once "common.php"
require XXX
這類型的code
整理出來的pseudo code 大致如下
submit()
{
//在FORM_VIEW裡面有些input 欄位,要帶入User data (從DB撈出來的)
DATA = model->getUserData();
load->view(FORM_VIEW,DATA);
//在FORM_VIEW, action=order/process/
//還沒試過 但是我猜應該會自動把 $_POST 變數傳到
//process() function?
}
process()
{
//就是會有一堆requre (是否會不符CI精神?有更好作法?)
require(PHPMAILER);
require(ZEND_FRAMWORK);
require(XXXX);
$get_data = $_POST;
model->setUserData();
mail->send();
}
目前還沒開始 implement,
只是想起來 這個 Order controller 可能也會長的很肥大。
不知道有沒有誤用了 CI , 或者有比較好的設計方法呢?
================================================
[更新如下]
我的網站架構如下
ci_www/
├── application
├── assets
├── css
├── files
├── images
├── inc
└── javascripts
├── sys
└── system
請問一下如何設計驗證表單
現在我的架構下有兩個 controller
(1) index
(2) order
一旦進入首頁,就會trigger index->entry();
這個function , 主要會先 "驗證登入狀態" , 再決定要不要 載入view
傳統的架構我想就是一般在 index.php
裡面的header require很多有關 validation php files
如果驗證正確,顯示頁面。
驗證失敗,可能redirect,或者exit
但是這是傳統的架構。
轉換到CI上面目前我的設計如下,
進入entry()
先呼叫 $this->getUserFromDb() ; 回傳值到 $data
在把 $data 傳入 index_view
在index_view裡面判斷是否要 display view ,
遇到問題如下,$this->getUserFromDb() ;
其實還沒有把功能寫完,但是寫完感覺,
在index 這個controller 看起來又是一堆if else 肥肥大大的判斷式。
public function entry() //這個function 用來顯示頁面內容
{
$data = $this->getUserFromDb() ;
$this->load->view('index_view',$data);
}
function getUserFromDb()
{
if(isset($_POST) AND !empty($_POST) AND $_POST['username'] ) //代表有登入
{
if( !$_POST['username'] || !$_POST['password'] )
{
return "fail";
}
elseif( $_POST['username'] AND $_POST['password'] )
{
$id = $_POST['username'];
$mobile = $_POST['password'];
$this->db->where('id' , $id);
$this->db->where('mobile' , $mobile);
$query = $this->db->get('test_member');
foreach ($query->result() as $row)
{
echo $row->id."\n";
}
return "ok";
}
else{
$err[] = '請務必填寫完整帳號或者密碼!!';
return "fail";
}
}else
{
return "";
}
}
在這邊是否適合寫一個function 在 assets/inc/check_login.php
然後我在require assets/inc/check_login.php
因為像是這種判斷function,
我可能在controller:order 這邊也需要去 require進來做判斷。
在CI的慣例,一個controller , 會去呼叫另外一個controller 寫好的function嗎?
如果不太好,怎麼樣的寫法會比較好呢?
謝謝
http://tinyurl.com/8cuzykg
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 119.77.136.156
※ 編輯: tao2tw 來自: 119.77.136.156 (08/26 00:40)