#
以下內容是經過自己整理資料、官方文檔所得:
web.xml 配置:
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <description>加載/WEB-INF/spring-mvc/目錄下的所有XML作為Spring MVC的配置文件</description> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc/*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping>
這樣,所有的.htm的請求,都會被DispatcherServlet處理;
初始化 DispatcherServlet 時,該框架在 web 應用程序WEB-INF 目錄中尋找一個名為[servlet-名稱]-servlet.xml的文件,并在那里定義相關的Beans,重寫在全局中定義的任何Beans,像上面的web.xml中的代碼,對應的是dispatcher-servlet.xml;當然也可以使用<init-param>元素,手動指定配置文件的路徑;
dispatcher-servlet.xml 配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 使Spring支持自動檢測組件,如注解的Controller --> <context:component-scan base-package="com.minx.crm.web.controller"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> </beans>
第一個Controller:
package com.minx.crm.web.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class IndexController { @RequestMapping("/index") public String index() { return "index"; } }
@Controller注解標識一個控制器,@RequestMapping注解標記一個訪問的路徑(/index.htm),return "index"標記返回視圖(index.jsp);
注:如果@RequestMapping注解在類級別上,則表示一相對路徑,在方法級別上,則標記訪問的路徑;
從@RequestMapping注解標記的訪問路徑中獲取參數:
Spring MVC 支持RESTful風格的URL參數,如:
@Controller public class IndexController { @RequestMapping("/index/{username}") public String index(@PathVariable("username") String username) { System.out.print(username); return "index"; } }
在@RequestMapping中定義訪問頁面的URL模版,使用{}傳入頁面參數,使用@PathVariable 獲取傳入參數,即可通過地址:http://localhost:8080/crm/index/tanqimin.htm 訪問;
根據不同的Web請求方法,映射到不同的處理方法:
使用登陸頁面作示例,定義兩個方法分辨對使用GET請求和使用POST請求訪問login.htm時的響應。可以使用處理GET請求的方法顯示視圖,使用POST請求的方法處理業務邏輯;
@Controller public class LoginController { @RequestMapping(value = "/login", method = RequestMethod.GET) public String login() { return "login"; } @RequestMapping(value = "/login", method = RequestMethod.POST) public String login2(HttpServletRequest request) { String username = request.getParameter("username").trim(); System.out.println(username); return "login2"; } }
在視圖頁面,通過地址欄訪問login.htm,是通過GET請求訪問頁面,因此,返回登陸表單視圖login.jsp;當在登陸表單中使用POST請求提交數據時,則訪問login2方法,處理登陸業務邏輯;
防止重復提交數據,可以使用重定向視圖:
return "redirect:/login2"
可以傳入方法的參數類型:
@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(HttpServletRequest request, HttpServletResponse response, HttpSession session) { String username = request.getParameter("username"); System.out.println(username); return null; }
可以傳入HttpServletRequest、HttpServletResponse、HttpSession,值得注意的是,如果第一次訪問頁面,HttpSession沒被創建,可能會出錯;
其中,String username = request.getParameter("username");可以轉換為傳入的參數:
@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(HttpServletRequest request, HttpServletResponse response, HttpSession session,@RequestParam("username") String username) { String username = request.getParameter("username"); System.out.println(username); return null; }
使用@RequestParam 注解獲取GET請求或POST請求提交的參數;
獲取Cookie的值:使用@CookieValue :
獲取PrintWriter:
可以直接在Controller的方法中傳入PrintWriter對象,就可以在方法中使用:
@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(PrintWriter out, @RequestParam("username") String username) { out.println(username); return null; }
獲取表單中提交的值,并封裝到POJO中,傳入Controller的方法里:
POJO如下(User.java):
public class User{ private long id; private String username; private String password; …此處省略getter,setter... }
通過表單提交,直接可以把表單值封裝到User對象中:
@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(PrintWriter out, User user) { out.println(user.getUsername()); return null; }
可以把對象,put 入獲取的Map對象中,傳到對應的視圖:
@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(User user, Map model) { model.put("user",user); return "view"; }
在返回的view.jsp中,就可以根據key來獲取user的值(通過EL表達式,${user }即可);
Controller中方法的返回值:
void:多數用于使用PrintWriter輸出響應數據;
String 類型:返回該String對應的View Name;
任意類型對象:
返回ModelAndView:
自定義視圖(JstlView,ExcelView):
攔截器(Inteceptors):
public class MyInteceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { return false; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView mav) throws Exception { } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception excptn) throws Exception { } }
攔截器需要實現HandleInterceptor接口,并實現其三個方法:
preHandle:攔截器的前端,執行控制器之前所要處理的方法,通常用于權限控制、日志,其中,Object o表示下一個攔截器;
postHandle:控制器的方法已經執行完畢,轉換成視圖之前的處理;
afterCompletion:視圖已處理完后執行的方法,通常用于釋放資源;
在MVC的配置文件中,配置攔截器與需要攔截的URL:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/index.htm" /> <bean class="com.minx.crm.web.interceptor.MyInterceptor" /> </mvc:interceptor> </mvc:interceptors>
國際化:
在MVC配置文件中,配置國際化屬性文件:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="message"> </bean>
那么,Spring就會在項目中搜索相關的國際化屬性文件,如:message.properties、message_zh_CN.properties
在VIEW中,引入Spring標簽:<%@taglib uri="http://www.springframework.org/tags" prefix="spring" %>,使用<spring:message code="key" />調用,即可;
如果一種語言,有多個語言文件,可以更改MVC配置文件為:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>message01</value> <value>message02</value> <value>message03</value> </list> </property> </bean>
sql server中如何連接表更新數據
假設a,b兩表有外鍵關聯,想要從b表中取出相應字段的值更新a表字段,可以有如下幾種寫法:
update a set a.name=b.name from a,b where a.id=b.id
update a inner join b on a.id=b.id set a.name=b.name where ...
update table1 set a.name = b.name from table1 a inner join table2 b on a.id =b
二:
表hotel中有id,hotel_city。
表hotel_room中有id,hotel_id,其中hotel_id與表hotel中的id對應。
表hotel_room_price中有room_id,price,price_year_month,其中room_id與hotel_room中的id對應。其余各項數據之間沒有關聯。
現在要求更新表hotel_room_price中的price字段,符合的條件是room_id對應的hotel_city是744,且price_year_month是'20114'。
SQL語句:
update hotel_room_price set price = 0 from hotel_room_price a,hotel_room b,hotel c where a.room_id = b.id and b.hotel_id = c.id and c.hotel_city = 744 and a.price_year_month = '20114'
重點看紅色的部分。from后跟的是需要聯立的三個表。用where a.room_id = b.id and b.hotel_id = c.id來將三個表當中需要對應的字段聯立起來。and c.hotel_city = 744 and a.price_year_month = '20114'則是最后指定的兩個條件。
運行無錯誤。
在調試zencart網店時,有時修改了某些文件,網店前臺顯示不完整了,或者出現了空白頁面,可以通過以下方法打開錯誤提示:
版本 v1.3.9 的排錯方法
錯誤記錄在 /cache/ 目錄下,前臺的錯誤記錄文件名為 "myDebug-xxxxxx.log" ,后臺的錯誤記錄文件名為 "myDebug-adm-xxxxxxx.log"
如果需要在瀏覽器中顯示出錯誤信息(注意,客戶也會看到錯誤信息),執行下面的操作:
如果是前臺錯誤,打開文件 \includes\extra_configures\enable_error_logging.php
如果是后臺錯誤,打開文件 \admin\includes\extra_configures\enable_error_logging.php
查找 @ini_set('display_errors', 0);
修改為 @ini_set('display_errors', 1);
版本 v1.3.8 的排錯方法
前臺界面排錯適用
打開文件 \includes\application_top.php ,找到
if (defined('STRICT_ERROR_REPORTING') && STRICT_ERROR_REPORTING == true) {
在前面增加一行
define('STRICT_ERROR_REPORTING', true);
保存后重新刷新網頁,就會有錯誤提示了。
把上面的語句修改為
define('STRICT_ERROR_REPORTING', false);
就能關閉錯誤提示了。
后臺界面排錯適用
打開文件 \admin\includes\application_top.php,找到
error_reporting(E_ALL & ~E_NOTICE);
修改為
@ini_set('display_errors', '1');
error_reporting(E_ALL);
找到錯誤后,再修改回去關閉錯誤提示
前兩天在本地搭建一個網站,準備做下數據,安裝好以后,發現登陸后臺很慢,等了好久出現后臺空白,開啟錯誤提示也沒用,根本就沒錯誤,當時想,難道我這個站搭建的有問題。所以我又訪問了以前搭建的站點,出現同樣的錯誤。
難道是我本地環境出現問題了?或許是吧,所以一氣之下就把本地環境重新搭建了一下,發現還是不行;難道是集成環境版本太低了,我又從官網下載一個新的,最后發現還是不行,不是這個問題。無語了……
然后我就再網上找啊找,最后根據一個的提示,我找到了一個解決辦法,原來是線路的問題。前段時間我一直用的電信線路,最近換成了聯通線路,就遇到這 樣的問題,可能是最近聯通線路有點問題。MD。折騰老子一下午才找到原因,為了避免和我一樣的“程序猿”浪費時間,所以我就寫下來,希望對你們有用。
解決辦法:
把admin(網站后臺目錄)\includes\local\skip_version_check.ini文件里面的version_check=no修改成version_check=off 就可以了。
因為安裝zen-cart的時候,默認會選擇那個版本更新選項,當進入后臺的時候,一直更新不了,所以會出現那個問題了。
自從上一篇
zen-cart采集規則和數據庫發布模塊下載以后。很多人問我為什么他的不能采集,原來發現他們用的幾乎都是免費版的,不能直接導入數據庫中,可以做成CVS格式的,但是遺憾的是不能下載圖片,所以這次我就做個簡單的教程,大致說一下。
quill.com 測試網站我用的是這個
第一種方式不能直接下載圖片,但是可以通過迅雷下載。
第二種方式可以直接下載圖片,但是批量中的那個圖片字段有點亂,可以批量替換。
這兩種方式下載圖片的區別在于如圖對比
第一種方式圖1

第二種方式圖2

今天答應兩位朋友的要求,說說如何采集細節圖!首先說說我是如何學會采集的吧,當時接觸火車頭采集器的時候,發現這方面的資料很少(針對 zencart的),什么采集規則,數據庫發布模塊,第一次用這玩意,有太多不明白的地方。我每天就不斷查資料,不斷測試,還好我是計算機專業的,學過一 些編程知識,將近花了一個星期才學會采集,當你看到你這篇文章時,希望你們也好好不斷測試,不斷分析問題,只有這樣,以后遇到跟復雜的問題,才能會解決, 或許有些問題,只有少量的人遇到,只能靠自己了。好像很多人認為這個簡單,也沒有這方面的教程,可是對于我們這樣的菜鳥來說,入門是必要的。也有一些收費 的,給別人采集一個站,做個批量表收多少錢等等。互聯網提倡的就是資源共享,授人之魚不如授人之漁。其實我對火車頭采集器更多的功能沒有深入了解,我只是 把我工作中學會的東西分享出來,再某些人看來,可能沒有什么意義。我不會給別人采集一個網站收多少錢,說實話我現在還沒那個能力,也沒有太多的時間。廢話 不多說了,開始今天的教程。
前面我的就不再介紹了,首先我找了一個有細節圖的網站,例如www.jerseyscool.com。我們只看第二步:采集內容規則。我們添加一個標簽名,就叫商品細節圖,我的規則如下圖(其實與商品圖像差不多了)

然后要注意左下角的標簽循環匹配,選擇“添加為新記錄”。看我采集的效果,只是我的網速慢,還沒下載完 ,看到那個第幾條記錄沒,就說明我們規則寫對了,可以進行采集了。

最后一步要注意,搞zencart應該都知道,細節圖是不寫入數據庫的,是根據圖片名稱匹配的,第三步設置如下圖,不再在寫入數據了,放到一個文件夾就行了。

最后需要說明的,我們做這一步是純粹為了得到細節圖。所以我要首先按照上一次的教程,采集完數據,然后再采集細節圖。采集細節圖我們可以一下子采集完,具體怎么采集明天到公司再補充(家里的網絡實在太慢了,沒法搞了)。這一次我就不把采集規則發上來了,其實很簡單。
最近有人問我采集完了才做成批量表,其實很簡單了,你在你的網站上安裝一個批量表不就行了,可以把采集的數據放到另一個網站上,這一步我就操作了,不明白的可以給我留言或者加我q,最好是留言,我會認真回答你們的!
你們的鼓勵是我最大的動力,我也是菜鳥,我們一起共同進步,最近一直在學習magento,下一步可能要針對magento進行采集了,呵呵,歡迎朋友們批評和指正!
首先安裝zen-cart,我用的是zen-cart1.9中文版的,安裝步驟我就不寫了,這個很簡單了。安裝以后根據你要采集的網站建立對應的目錄就OK了。例如我要測試采集的網站www.yankeesjerseystore.com這 是我隨便找的網站,我首先建立大分類Shop By Players 然后建立相應的小分類Alex Rodriguez Jersey(多頁面,等會解釋這個)和Folder Alfonso Soriano Jersey(單頁面)。我只是測試采集就先建一個大分類兩個小分類。如下圖
大分類
小分類
然后開始寫采集規則了,每個網站的采集規則是不一樣的,針對每個網站寫不同的規則,不過zen-cart網站的規則差不多了,寫多了就會發現很簡單。
第一步寫采集網址規則,首先添加采集地址(我添加的是http://www.yankeesjerseystore.com/new-york- yankees-jersey-alex-rodriguez-jersey-c-6_16.html?page=(*)&sort=20a)如 下圖
然后為了采集自己想要的頁面,就必須過濾一些網址了,就要寫一些限制性的標志了,必須包含,不得包含,頁面內選定區域采集網址從xx到xx等請看下圖我是如何寫的,這個不是唯一性的,每個人寫的可能不一樣。
這一步算是完成了。
第二步寫采集內容規則,我把每個標簽名對應規則放出來,如下圖
商品名稱
商品型號
商品價格
商品特價
商品圖像,注意哪個文件保存格式,我選擇了[原文件名],根據自己的需要也可以改
商品描述,注意用哪個html標簽排除,我用了去首尾空白符
OK,規則寫完了,可以找個內容頁測試一下,如下圖
看,已經測試成功了,注意圖片一定要顯示完整。
第三步發布內容設置,有幾種發布方式,我選擇方式三,導入到自定義數據庫,如下圖
然后點擊數據庫發布全局配置,選擇編輯你要編輯數據庫發布配置,如下圖
點擊編輯以后,出現下圖
然后編輯數據庫發布模塊,如下圖
看到你剛才寫的標簽名沒,注意這個地方的標簽與剛才寫的標簽名要對應著,,不然就會失敗的,看到最后那個“2”沒,就是剛才我們建立欄目時的分 類ID,每采集一個欄目的時候變換不同的ID,上面我已經寫了,不需要改動了,最后我會把發布模塊分享給朋友們。修改完以后,要點擊那個“修改配置”這樣 才能保存著。
第四步文件保存及部分高級設置,如下圖,基本上不用改變。
最后一步,點擊更新,然后就可以點擊開始采集了,采集效果如下圖
OK,采集成功了,可以發布到數據庫了,然后我到網站后臺看一下,是不是已經導入到數據庫了,呵呵!如下圖,成功了
后臺效果
前臺效果
最后要說明一點,采集單網址也是一樣,注意選擇如下圖
好了,教程寫完了,挺累的,寫了兩個小時,不知道你們看明白沒,反正我是很明白(呵呵),根據不同的網站靈活運用就OK了,稍后我把采集規則放出來,供朋友下載,有不明白的地方可以給我留言或者加我qq
zen-cart.rar(點擊下載哦)
PreparedStatement 使用like
在使用PreparedStatement進行模糊查詢的時候廢了一番周折,以前一直都沒有注意這個問題。一般情況下我們進行精確查詢,sql語句類似:select * from table where name =?,然后調用 PreparedStatement的setString等方法給?指定值。那么模糊查詢的時候應該怎么寫呢?我首先嘗試了:select * from customer where name like ‘%?%’。
此時程序報錯,因為?被包含在了單引號中,PreparedStatement并不視它為一個參數。后來上網查了相關的一些資料,發現可以這樣寫select * from table where name like ?;但是在指定參數的時候把?指定為”%”+name+”%”,name是指定的查詢條件。這樣就OK了。
一般情況下,我總是潛意識的認定了?就是取代所指定的參數,但是實際上我們可以對指定的參數進行了一定的包裝之后再傳給?,比如這里我們在參數的前后都加了一個%,然后再傳給?
String expr = "select * from table where url like ?";
pstmt = con.prepareStatement(expr);
String a="a";
pstmt.setString(1, "%"+a+"%");//自動添加單引號 (包裝后的參數)
pstmt.execute();
System.out.println(pstmt.toString());//打印sql
//會默認生成sql: select * from table where url like '%http%'
PHP $_GET
$_GET 變量是一個數組,內容是由 HTTP GET 方法發送的變量名稱和值。
PHP $_POST
$_POST 變量用于收集來自 method="post" 的表單中的值。
$_POST 變量
$_POST 變量是一個數組,內容是由 HTTP POST 方法發送的變量名稱和值。
$_POST 變量用于收集來自 method="post" 的表單中的值。從帶有 POST 方法的表單發送的信息,對任何人都是不可見的(會顯示在瀏覽器的地址欄),并且對發送信息的量也沒有限制。
例子
<form action="welcome.php" method="post"
> Enter your name: <input type="text" name="name" /> Enter your age: <input type="text" name="age" /> <input type="submit" /> </form>
當用戶點擊提交按鈕,URL 不會含有任何表單數據,看上去類似這樣:
http://www.w3school.com.cn/welcome.php
"welcome.php" 文件現在可以通過 $_POST 變量來獲取表單數據了(請注意,表單域的名稱會自動成為 $_POST 數組中的 ID 鍵):
Welcome <?php echo $_POST["name"]
; ?>.<br /> You are <?php echo $_POST["age"]
; ?> years old!
為什么使用 $_POST?
- 通過 HTTP POST 發送的變量不會顯示在 URL 中。
- 變量沒有長度限制。
不過,由于變量不顯示在 URL 中,所有無法把頁面加入書簽。
$_REQUEST 變量
PHP 的 $_REQUEST 變量包含了 $_GET, $_POST 以及 $_COOKIE 的內容。
PHP 的 $_REQUEST 變量可用來取得通過 GET 和 POST 方法發送的表單數據的結果。
例子
Welcome <?php echo $_REQUEST["name"]; ?>.<br /> You are <?php echo $_REQUEST["age"]; ?> years old!
ATTENTION:慎用$_REQUEST
如果get的一個變令名稱和post的一個變量名稱相同,則POST的值會覆蓋GET的變量值
以為REQYEST先獲取了get的值,然后獲取了post的值,post的值會覆蓋get值
我們可以來看php.ini中的配置
; This directive describes the order in which PHP registers GET, POST, Cookie,
; Environment and Built-in variables (G, P, C, E & S respectively, often
; referred to as EGPCS or GPC). Registration is done from left to right, newer
; values override older values.
variables_order = "EGPCS"
這個EGPCS就是說明用$_REQUEST數組獲取內容的優先級,其字母的含義分別代表為:E代表$_ENV,G代表$_GET,P代表$_POST,C代表$_COOKIE,S代表$_SESSION。后面出現的數據會覆蓋前面寫入的數據,其默認的數據寫入方式就是EGPCS,所以POST包含的數據將覆蓋GET中使用相同關鍵字的數據。
通過這個我們也可以看出PHP獲取參數的步驟
環境變量=》GET=》POST=》COOKIE=>SESSION
PHP中有$_REQUEST與$_POST、$_GET用于接受表單數據。
一、$_REQUEST與$_POST、$_GET的區別和特點
$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比較慢。通過POST和GET方法提交的所有數據都可以通過$_REQUEST數組獲得。
二、$_POST、$_GET的區別和特點
1. GET是從服務器上獲取數據,POST是向服務器傳送數據。
2. GET是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。POST是通過HTTP POST機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
3. 對于GET方式提交表單數據,服務器端用$_GET[‘name’]獲取變量的值,對于POST方式提交表單數據,服務器端用$_POST[‘name’]獲取提交的數據,當然,兩者都可以通過$_REQUEST[‘name’]獲得表單數據。對于REQUEST方式提交表單數據,服務器端用$_REQUEST[‘name’]獲取變量的值,但這種方式很少用。
4. GET傳送的數據量較小,不能大于2KB。POST傳送的數據量較大,一般被默認為不受限制。但理論上,一般認為不能超過100KB。
5. GET安全性非常低,POST安全性較高。
6. GET表單值可以通過_GET獲取;但通過action的url設置的參數總是獲取不到的,<form method="get" action="a.asp?b=b">跟<form method="get"action="a.asp">是一樣的,也就是說,在這種情況下,GET方式會忽略action頁面后邊帶的參數列表。POST表單值可以通過_POST獲取;但通過action的url參數設置的參數則可以不能通過_POST獲取到。action=test.php?id=1這種就是GET方式傳值,可以用$_REQUEST和$_GET接受傳值,但不能用POST方式獲取到值,即使表單是POST方式提交。所在,在提交表單時,如果action中同時有參數,最好只能通過POST表單方式,對于表單內數據,直接通過POST獲取,對于action中參數,童工GET獲取。
在做數據查詢時,建議用GET方式,而在做數據添加、修改或刪除時,建議用POST方式。
request是先讀取 get再讀post 的, 同時存在, 即覆蓋掉前面的變量。
經典實例:
<?php
echo "get\n";
print_r($_GET);
echo "post\n";
print_r($_POST);
echo "request\n";
print_r($_REQUEST);
?>
<form method=post action='?a=1&b=2'>
<input type=text name=a value='a'>
<input type=text name=b value='b'>
<input type=submit value=test>
</form>
輸出結果:
get:
Array
(
[a] => 1
[b] => 2
)
post:
Array
(
[a] => a
[b] => b
)
request:
Array
(
[a] => a
[b] => b
)
其實,在php配置文件php.ini中有一個設置項:variables_order = "GPCS" ,GPCS分別是GET,POST,Cookie,Server的首字母縮寫,variables_order = "GPCS"含義是php文件中變量的解析順序是GET,POST,Cookie和Server。