多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > codeigniter > [PHP]框架CodeIgniter中的表單教程

[PHP]框架CodeIgniter中的表單教程

來源:程序員人生   發布時間:2014-04-24 09:40:16 閱讀次數:3815次

CodeIgniter的表單輔助函數:輸入數據讓我們把目光轉向你如何使用你的HTML頁。

任何動態的網站最重要部份之一是和用戶互動,而且這通常意味著使用HTML表單。

CodeIgniter的表單輔助函數是非常有用的代碼片斷。

它有一個稍稍不同的定義,使表單創建起來比較容易。我們建立一個表單,這個表單允許我們在瀏覽器中錄入數據。在websites數據庫的sites表中,我們想要錄入網站的名字、類型和網址,和更新的日期。

你能用簡單的HTML代碼建立表單,

或者你能在一個控制器內建立它,把它賦給一個變量,然后調用視圖,而且傳送該變量到視圖。

下面是按照第二種方式做。

第一,我們必須裝載表單輔助函數到我們需要使用它的控制器內。然后,我們把下列的代碼放入控制器的構造函數:

$this->load->helper('form');

然后,我們必須開始編寫表單。現在,為了生成表單的輸入項,我們不用這樣寫:

$variable.='<inputtype="text"name="name"value="">';

CI允許你這樣做:
$variable.=form_input('name',''');
(記得'name'是輸入項的名稱,'value'是你想輸入的內容。在這里可以設定value的初始值,或你能動態地從表單中獲取。)

嗯,你可能會說,48個字符變成33個字符,沒少幾個字符,特別是我必須先裝載這個輔助函數(另外的28個字符)。何必呢?理由如下

1使用表單輔助函數的好處之一:清楚使用CI表單輔助函數的第一個好處是你的代碼絕對的清

楚。如果你想要一個比較精細的輸入框,如果用HTML是這樣的:

$variable='<input type="text" name="url" id="url" value="www.mysite.com" maxlength="100" size="50" style="yellow"/>';

(type是輸入框的類型:text、hidden等等。name是將在$_POST數組中取得的變量名稱。id是在網頁上定
位這個輸入框的標識符,如果你使用JavaScript的話。value是輸入框里顯示的值,它一開始是一個默認值,用戶也
可以在輸入一個新的值。maxlength和size是明顯的;style一組HTML格式或者在css style sheet中定義。)
CI用一個數組代替上述的HTML代碼:

$data=array('name' => 'url','id' => 'url','value' => 'www.mysite.com','maxlength' => '100','size' => '50','style' => 'yellow');$variable=form_input($data);

它看上去蠻長的,實際上并不比HTML代碼長,而且,它非常清楚,容易理解和維護。而且是動態的。
隱藏的表單輸入框非常簡單。如果我們想要自動地記錄我們的數據庫被更新的日期。我們把日期放入一個$date變量,然后:

form_hidden('updated',$date);

如果你想要一個'文本'輸入框,給你的使用者提供一個可以輸入超過一行的地方,可以使用CI的form_textarea()函數,下面的代碼使用默認的長度,在網頁上顯示一個文件輸入框:

$data=array('name' =>'url','id' =>'url','value' =>'www.mysite.com');$variable=form_textarea($data);

CI的表單輔助函數在你編寫下拉框,多選框和單選框時特別有用,如果我們要改變我們的URL輸入框為一個下拉框,允許用戶從下拉列表中選取一個URL。首先,把下拉列表的選項存入一個數組,然后調用form_dropdown()函數:

$urlarray=array('1' =>'www.this.com','2' =>'www.that.com','3' =>'www.theother.com');$variable=form_dropdown('url',$urlarray,'1');

被傳給表單中url下拉框的第一個參數是輸入框的名字;第二個是包含下拉列表的數組,第三個默認選項。換句話說,如果使用者接受默認值,你的$_POST數組將會包含值'url=>1',但是你的用戶將會見到選項'www.this.com'。
如果使用HTML代碼編寫:

<select name="type"><option value="1" selected="selected">www.this.com</option><option value="2">www.that.com</option><option value="3">www.theother.com</option></select>

CI實現的代碼實際上比較短,很容易學會。
如果你在一個數據庫表('urls')中儲存你的可能選擇的網址的目錄,那么生成一個動態下拉框很容易。首先把數據從表中讀出放到一個數組中:


$urlarray = array();$this->db->select('id,url');$query=$this->db->get('urls');if($query->num_rows()>0){	foreach($query->result() as $row)	{		$urlarray[$row->id]=$row->url;	}}

然后重復我們以前用過的CIform_dropdown()功能:

echoform_dropdown('type',$urlarray,'1');

只有$urlarray的內容會發生變化;代碼總是一樣的。
如果你正在更新一個表中的記錄而不是插入,你不想為你的用戶顯示默認值。你想要為那一個記錄顯示已經存在的值。你應該已經知道你想要的修改的記錄的id值,因此,你需要先讀取數據庫中'site'表中相關記錄。確定把查詢結果賦給一個變量,使用第二個變量取出第一個變量的中的相關記錄,再調用CI的form_dropdown函數,把第二個變量和對應的列名作為參數傳入:

$this->db->select('id,url,name');$this->db->where('id','$id')$sitequery=$this->db->get('sites');$siterow=$sitequery->row();

然后你的CI下拉框函數會從中讀取相關信息:

echoform_dropdown('url',$urlarray,$siterow->url);

沒有太多的篇幅討論所有的表單輔助函數。它還能編寫單選框,隱藏文件框,多選框和一些其它的輸入框,完整的資料請參考CI用戶手冊。

2、使用表單輔助函數的好處之二:自動化
使用表單輔助函數的第二個好處是可以自動化實現一些功能,不然的話,你只能自己編寫相關的腳本了。首先,它攔截HTML的一些字符,比如用戶輸入的引號,并且
轉義它們以免破壞表單。其次,它自動鏈接。當你打開一個表單時,你必須聲明目標頁,它將會接受表單的數據并且處理它。(在CI中,這是一個控制器里面的一個功能而不是一個靜態頁。比如它指向控制器的更新函數。)因此,如果你用純HTML代碼,你將會這樣寫:

<form method="post"	action="http:/www.mysite.com/index.php/websites/update"/>

如果你用CI打開你的表單,你只需要這樣做:
form_open('websites/update');

CI自動地在你的config文件中取出基本URL并定位到對應的控制器函數。再次強調,如果你遷移你的網站,你只需要修改config文件,而不是去一個一個地修改代碼文件。順便提一下,CI假定你的表單將會總是以POST的方式提交數據而不是GET方式。CI普遍使用URL本身,因此,不要搞錯。


下面來簡單的分析一個“Display”模型,也就是MVC中的Model。
作為示范(稍微簡化了一下),這里是Display模型:

<?phpclass Display extends CI_Model{	/*create the array to pass to the views*/	var $data=array();	/*two other class variables*/	var $base;	var $status='';	/*the constructor function: this calls the 'model' parent class	 *loads other CI libraries and helper sit requires,and dynamically sets	variables	 */	function Display()	{		parent::CI_Model();		$this->load->helper('form');		$this->load->library('user_agent');		$this->load->library('errors');		$this->load->library('menu');		$this->load->library('session');		/*now set the standard parts of the array*/		$this->data['css']=$this->config->item('css');		$this->data['base']=$this->config->item('base_url');		$this->base =$this->config->item('base_url');		$this->data['myrobots']='<metaname="robots"	content="noindex,nofollow"/>';		/*note that CI's session stuff doesn't automatically recall the extra variables you have added, so you have to look up the user's status in	the ci_session stable*/		$sessionid=$this->session->userdata('session_id');		$this->db->select('status');		$this->db->where('session_id',$sessionid);		$query=$this->db->get('ci_sessions');		if($query->num_rows()>0)		{			$row=$query->row();			$this->status=$row->status;		}	}	/*function to assemble a standard page.	 *Any controller can call this.	 *Just supply as $mydata an array,of key/value pairs for the contents you want the view	*to display. 	 *Available variables in this view are:mytitle.menu,mytext,diagnostic	 */	function mainpage($mydata)	{		$this->data['mytitle']='Monitoringwebsite';		$this->data['diagnostic']=$diagnostic;		foreach($mydataas$key=>$variable)		{			$this->data[$key]=$variable;		}		/*here's the menu class*/		$fred=newmenu;		$this->load->library('session');		$mysess=$this->session->userdata('session_id');		if(isset($this->status)&&$this->status>0)		{			$this->data['menu']=$fred->show_menu($this->status);		}		$this->load->view('basic_view',$this->data);	}}?>

用下面的代碼在任何的控制器中調用這個主頁:

$this->load->model('display');$this->display->mainpage($data);
視圖正在被動態地裝配,完全符合需要。


下面來看一看CI的驗證類。

 在你編寫HTML表單時一個重要的工作是檢查輸入。我們都知道我們應該這樣做,但是…直到現在為止,我們已經編寫過一種簡單的表單,將會信任地接受任何用戶輸入的任何數據。你應該意識到可能有一些用戶是不懷好意的,而且所有的其余都是不負責任的。(別直接告訴他們。)如果他們有可能犯一個簡單的錯誤,他們就會犯。確保你始終檢查用戶輸入的數據,并使它們符合你的要求。你能在客戶端用javascript做到這一點,但是這樣做作用有限,使用者能容易地繞過它。而在服務器端的校驗需要一個額外的信息來回,這點額外的開銷是值得的。編寫校驗代碼也相當復雜,但是,你一定猜到了。CI提供了一個驗證類可以使這項工作變得非常容易。讓我們改變我們自己的表單處理過程來實現校驗。你需要在表單里作一些調整,還要在它指向的函數里作一些調整。如果你的表單由form_open('sites/update')開始,你需要修改的函數是'sites'控制器里的'update'函數。如果你沒有使用CI的表單輔助函數,HTML等價代碼是:

<form method="post" action="http:/www.mysite.com/index.php/sites/update"/>

接下來需要做三件事情:1.設置校驗。2.設置控制器。3.設置表單。

1 設置驗證規則

在你的表單指定的那個函數中裝載驗證類并聲明你的校驗規則:

$this->load->library('validation');$rules['url'] ="required";$rules['name'] ="required";$this->validation->set_rules($rules);

'url'和'name'輸入框一定要有輸入內容。CI提供了各種操作,確保一些操作一定要進行,用戶手冊全面地解釋了這些內容。
他們的含義非常明了:min_length[6]顯然意味著輸入的信息長度一定要大于等于六個字符。numeric意味著只能輸入數字,等等。
你還能組合規則,用“|”把它們連接起來:

$rules['name']="required|alpha|max_length[12]";

意味著不能為空,字母,長度至少12個字符。你甚至能編寫你自己的規則。


2 設置控制器
仍然在相同的函數中,創建一個'if/else'語句:
if($this->validation->run()==FALSE){	$this->load->view('myform');}else{	$this->load->view('success');}

你進行確認測試,而且如果輸入內容不能通過測試的話,就再返回到輸入頁面。(如果你在一個控制器內的一個函數中生成你的視圖,則使用$this->myfunction代替$this->load->view('myform')。

如果校驗成功,就生成view("success"),告訴用戶輸入的信息已被接受,然后給出一個鏈接讓他進到下一步。


3 設置表單

錄入信息的表單也要做相應的調整。每次校驗沒有通過的話,你不但要讓系統返回到錄入界面,而且必須說明哪一項出錯,以及為什么出錯。因此你必須在表單的某處給出一個附加信息:
$this->validation->error_string;

這行代碼顯示適當的信息,避免用戶在那里犯嘀咕。你也需要自動地填寫用戶已正確輸入的那些內容,否則,用戶必須再次錄入上一次他們已經正確錄入的信息。
首先,你需要在控制器里增加更多的代碼。而且是立刻加在校驗規則之后,加入一個數組來存放給用戶的提示信息。數組的鍵名是你表單中的輸入框名,值是給出的錯誤提示信息:
-22-$fields['url']='TheURLofyoursite';
然后,增加一行代碼:

$this->validation->set_fields($fields);

現在你已經在控制器里聲明了一個存有信息的數組,你只需要在表單內加入顯示它們的代碼。對于HTML代碼,這會是:
<input type="text" name="url" value="<?php echo $this->validation->url; ?>"/>

或者,如果你正在使用CI的表單輔助函數:
$variable.=form_input('url',$this->validation->url);

如果使用這個表單插入一個新的記錄到數據庫的表中,上面的代碼已經夠用了。如果你正在使用表單更新一個已經輸入過的記錄,當表單第一次顯示時,應該在輸入框中顯示數據庫表中的實際信息,這個時候,它的值應該是從數據庫里讀回來的(記得前面調用$siterow->url的例子嗎?)如果你在更新一個現有的記錄時,上一次的錄入內容由于一個輸入框內容沒有錄入而無法通過校驗,在重新回到表單之前,你需要在通過校驗的輸入框中填寫用戶剛錄入的信息,而在校驗出錯的輸入框里再次放入從數據庫表中讀入的信息,否則,你就需要再次錄入已經校驗通過的信息了。
還好,這可以通過一個簡單的“if/else”語句來實現:

if(isset($_POST['url'])){	$myvalue=$this->validation->url;}else{	$myvalue=$siterow->url;}

第一次表單顯示的時候,在$_POST數組中將會沒有內容;因此你從數據庫的相關表中讀取信息。但當你提交一次以后,$_POST數組中有數據存在,所以你選擇validation函數中返回的值。查閱CI用戶手冊,了解表單校驗的其它內容,你還可以做到:自動地準備你的數據,舉例來說,通過它消除可能產生的跨站腳本攻擊
編寫你自己的復雜校驗標準,舉例來說,用戶錄入的值不能已經存在于數據庫中編寫你自己的錯誤信息CI的驗證類非常有用而又功能強大,值得花時間好好研讀并
掌握。


總結:
我們已經學習了CI中生成視圖的方法,以及它如何讓你創建“迷你-視圖”,你能把視圖嵌套到其它視圖中去。這意謂著你能建立共用的HTML頭部和HTML尾部,實現視圖的重用。我們也已經見到CI如何幫助你編寫HTML錄入表單,通過表單輔助函數簡化HTM
L表單的編寫工作最后,我們學習了CI的驗證類,這是檢查用戶錄入信息的
有用工具。沒有什么是完美的,但是這個工具的確能阻擊你的用戶錄入垃圾,或企圖進行攻擊。它也使你的網站看起來更加專業,能夠有效地捕捉用戶造成的各種輸入錯誤,而不是一味地接受無意義的輸入。
在整個學習過程中,我們也再次玩味了MVC的原則,而且有時稍稍地做一些變通會讓生活變得更容易。CI有一種非常有柔性的哲學:如果要有效率地解決問題,就要學會靈活地使用工具。



下面來對比一下CI中的代碼與最后生成的效果。

/*下面是關于表單提交的幾個簡單元素*/echo form_input('name','name_value');//插入文本框。等價于://<input type="text" name="name" value="name_value"  />$data=array(	'name' => 'url',	'id' => 'url',	'value' => 'www.mysite.com',	'maxlength' => '100',	'size' => '50',	'style' => 'yellow');echo form_input($data);//使用數組的方式部署表單的信息。等價于://<input type="text" name="url" value="www.mysite.com" id="url" maxlength="100" size="50" style="yellow"  />echo form_hidden('updated','date is 2013/02/08');//隱藏的數據。等價于://<input type="hidden" name="updated" value="date is 2013/02/08" />$data=array(	'name' =>'url',	'id' =>'url',	'value' =>'www.mysite.com');echo form_textarea($data);//設置文本區域。等價于//<textarea name="url" cols="40" rows="10" id="url" >www.mysite.com</textarea>$urlarray=array(	'1' =>'www.this.com',	'2' =>'www.that.com',	'3' =>'www.theother.com');echo form_dropdown('url',$urlarray,'1');//設置下拉菜單。等價于//<select name="url">//<option value="1" selected="selected">www.this.com</option>//<option value="2">www.that.com</option>//<option value="3">www.theother.com</option>//</select>


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 秋霞一级| 国产精品网站 夜色 | 亚洲图片校园另激情类小说 | 尤物yw午夜国产精品视频 | 亚洲国产精品乱码在线观看97 | 岛国片在线播放 | 亚洲精品一二三四区 | 久久影视一区 | 国产一区亚洲 | 亚洲精品视频免费 | 名优写真一区二区在线 | 噜噜嘿在线视频免费观看 | 国产日韩欧美一区二区 | 国产高清视频在线观看不卡v | 与黑人女人做爰的真实感受 | 亚洲午夜久久久久中文字幕久 | 中文字幕在线视频网 | 亚洲爱爱网站 | 国产毛片毛片精品天天看 | 中文字幕第5页 | 欧美精品亚洲精品日韩专 | 正在播放国产露脸做 | 欧美精品播放 | 人阁色第四影院在线观看 | 精品推荐国产麻豆剧传媒 | 免费亚洲视频 | 国产人成精品免费视频 | 国产美女福利视频福利 | 国内精品免费视频精选在线观看 | 五月天婷婷一区二区三区久久 | 成人sq视频在线观看网站 | 曰本一区 | 综合亚洲一区二区三区 | 亚洲一区二区三区精品影院 | 视频在线观看网站免费 | 亚洲成人国产精品 | 日本一区二区视频 | 一区二区三区精品国产 | 欧美视频一区 | 一级毛片免费视频观看 | 最近中文字幕大全2019 |