1. 修改php.ini,查找 register_globals,將其值修改為 On。這樣就可以像原來一樣,例如,提交的表單中包括一個名為"username"的變量,那么在php中就可以直接使用$username來訪問該變量。但是,除非你要使用一段舊的代碼而考慮到兼容性問題,否則不建議使用該方法。
成都創(chuàng)新互聯(lián)公司主要從事做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)鷹潭,十載網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
2. 使用 $HTTP_GET_VARS、$HTTP_POST_VARS數(shù)組來訪問,例如寫成$HTTP_POST_VARS["username"]的形式。不過該方法也不建議采用。
3. (推薦)使用 $_POST、$_GET等數(shù)組來訪問,例如寫成 $_POST["username"]的形式。建議采用這種方法。
(推薦)使用 import_request_variables 函數(shù)。該函數(shù)將提交內(nèi)容導(dǎo)入到變量中。
例如 import_request_variables("gp", "rvar_");第一個參數(shù)可以選擇g,p,c,分別表示導(dǎo)入 GET,POST,COOKIE 變量;第二個參數(shù)為導(dǎo)入后的變量前綴。執(zhí)行上面的語句后即可使用 $rvar_username 來訪問提交的 username 變量。使用import_request_variables("gp", "");可以兼容以前的PHP程序。
PHP $_GET 和 $_POST變量是用來獲取表單中的信息的,比如用戶輸入的信息。
PHP表單操作
在我們處理HTML表單和PHP表單時,我們要記住的重要一點是:HTML頁面中的任何一個表單元素都可以自動的用于PHP腳本:
本文所講的 POST 請求是 HTTP/1.1 協(xié)議中規(guī)定的眾多 HTTP 請求方法的其中最常用的一個。一般使用 POST 請求方法向服務(wù)器發(fā)送數(shù)據(jù)(主要是一些創(chuàng)建更新操作),本文討論的是 POST 請求方法常用的四種數(shù)據(jù)提交格式。
由于 HTTP/1.1 協(xié)議中并沒有對請求使用什么編碼方式進行規(guī)定,所以理論上開發(fā)者完全可以自己決定請求的 Body 體使用什么格式,當(dāng)然實際上大家都還是用通用的那么幾種編碼方式來提交數(shù)據(jù)(生態(tài)很關(guān)鍵)。
注:以下排名不分先后。。。
對于瀏覽器原生的 form 表單,enctype 的值不指定的話,默認(rèn)就是這個家伙。實際上大部分情況都使用它即可,編碼方式足夠簡單高效,各方面支持也都很完備,如各大瀏覽器調(diào)試工具、各大抓包軟件等。
基本的請求類似上面這樣,數(shù)據(jù)的編碼方式采用 key1=val1key2=val2 的形式,對其中的鍵值對都需要使用 URL Encode 編碼一下。其實就是和 GET 請求的數(shù)據(jù)提交格式是一樣的,只不過位置從 Request URL 上換到了 Request Body 里。
這種格式結(jié)構(gòu)簡單,但對于數(shù)據(jù)層級較深的情況,比如一些有復(fù)雜層級關(guān)系的接口數(shù)據(jù),這種方式就顯得有點力不從心了。另一方面,對于需要上傳二進制數(shù)據(jù)(比如圖像、音頻等文件),這種方式就不那么高效了,而且對于非 ASCII 碼的數(shù)據(jù)就丟失了,所以傳文件的情況就不能使用這種方式。
適用場景:數(shù)據(jù)量不大、數(shù)據(jù)層級不深的情況下強烈建議這種數(shù)據(jù)提交格式。
multipart/form-data
當(dāng)你需要提交文件、非 ASCII 碼的數(shù)據(jù)或者是二進制流數(shù)據(jù),則使用這種提交方式。類似下面這個請求示例:
第二行指定編碼方式 Content-Type 為 multipart/form-data,緊接著生成一個分界線 boundary 即 ----WebKitFormBoundaryPAlLG7hJKNYc4ft3,又臭又長的目的是為了避免和 Body 正文內(nèi)容有沖突,它的作用是用來分隔不同的字段。
Body 體分為多個結(jié)構(gòu)類似的部分,每一部分以 --boundary 開頭,因為本次請求生成的 boundary 為 ----WebKitFormBoundaryPAlLG7hJKNYc4ft3,所以最終是 ------WebKitFormBoundaryPAlLG7hJKNYc4ft3。接著是描述內(nèi)容的元信息,包括字段名稱,如果是文件則還有文件名稱和文件類型。接著留一空行,然后才是字段值。什么時候結(jié)束呢,以 --boundary-- 標(biāo)志結(jié)束。
這種方式本就是專為上傳文件的場景設(shè)計的,雖然你也可以使用這種方式傳遞普通數(shù)據(jù),但無疑會增加不少數(shù)據(jù)包的大?。ㄟ@么多 boundary 還是有不少空間占用的)。
適用場景:文件上傳。
application/json
很明顯在 JSON 格式火之前,肯定沒有它的,前面說到使用什么提交數(shù)據(jù)方式是沒有硬性規(guī)定的,所以在 JSON 格式火了以后,尤其以其優(yōu)秀的數(shù)據(jù)結(jié)構(gòu)表達能力,逐漸流行開來,現(xiàn)在我們對它完全不會陌生。
適用場景:數(shù)據(jù)結(jié)構(gòu)較復(fù)雜,層級較深的情況。
更多 web前端 知識,請查閱 HTML中文網(wǎng) ??!
參考如下
多個提交和一個提交的道理是相同的,只是一些細(xì)節(jié)上要注意。
提交一個,表單是:
form
input type=text name=name
input type=text name=sex
input type=text name=age
input type=text name=address
/form
PHP存數(shù)據(jù)庫的語句是:
$sql="insert into tab(...) values ($_POST[...])";//省略字段和值
那么多個提交的方法一,表單是:
form
input type=text name=name1input type=text name=sex1input type=text name=age1input type=text name=address1
input type=text name=name2input type=text name=sex2input type=text name=age2input type=text name=address2
/form
PHP存數(shù)據(jù)庫語句是:
$sql="insert into tab(...) values ($_POST[...1])";//省略字段和值
mysql_query($sql);
$sql="insert into tab(...) values ($_POST[...2])";//省略字段和值
mysql_query($sql);
上面方法一寫的例子是兩條,多條的方法相同,技巧就是輸出表單使用JS的循環(huán),存盤的PHP代碼也可以循環(huán),并且能夠判斷為空的就不提交,比如表單20條,只填了5條,就只存5條到數(shù)據(jù)庫。
方法二是使用數(shù)組,表單:
form
input type=text name=nameinput type=text name=sexinput type=text name=ageinput type=text name=address
input type=text name=nameinput type=text name=sexinput type=text name=ageinput type=text name=address
input type=text name=nameinput type=text name=sexinput type=text name=ageinput type=text name=address
/form
PHP代碼是:
for ($i=0;$icount($_POST["name"]);$i++)
if ($_POST["name"][$i]!='')
{
$sql="insert into tab(...) values ($_POST[...][$i])";//省略字段和值
mysql_query($sql);
}
這樣表單可以寫任意多行,PHP里面是數(shù)組,能夠自動獲取有多少數(shù)據(jù)。
一、指代不同
1、GET:從指定的資源請求數(shù)據(jù)。
2、POST:向指定的資源提交要被處理的數(shù)據(jù)
二、規(guī)則不同
1、GET: 請求可被緩存; 請求保留在瀏覽器歷史記錄中; 請求可被收藏為書簽;請求不應(yīng)在處理敏感數(shù)據(jù)時使用; 請求有長度限制; 請求只應(yīng)當(dāng)用于取回數(shù)據(jù)。
2、POST:請求不會被緩存; 請求不會保留在瀏覽器歷史記錄中; 不能被收藏為書簽; 請求對數(shù)據(jù)長度沒有要求。
三、數(shù)據(jù)要求不同
1、GET:當(dāng)發(fā)送數(shù)據(jù)時,GET 方法向 URL 添加數(shù)據(jù);URL 的長度是受限制的(URL 的最大長度是 2048 個字符)。與 POST 相比,GET 的安全性較差,因為所發(fā)送的數(shù)據(jù)是 URL 的一部分。
2、POST:發(fā)送數(shù)據(jù)無限制。POST 比 GET 更安全,因為參數(shù)不會被保存在瀏覽器歷史或 web 服務(wù)器日志中。
參考資料來源:百度百科-HTTP請求
參考資料來源:百度百科-post
在php中要模擬post請求數(shù)據(jù)提交我們會使用到curl函數(shù),下面我來給大家舉幾個curl模擬post請求提交數(shù)據(jù)例子有需要的朋友可參考參考。
注意:curl函數(shù)在php中默認(rèn)是不被支持的,如果需要使用curl函數(shù)我們需在改一改你的php.ini文件的設(shè)置,找到php_curl.dll去掉前面的";"就行了
例1
?php
$uri = "";
// 參數(shù)數(shù)組
$data = array (
'name' = 'tanteng'
// 'password' = 'password'
);
$ch = curl_init ();
// print_r($ch);
curl_setopt ( $ch, CURLOPT_URL, $uri );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
$return = curl_exec ( $ch );
curl_close ( $ch );
print_r($return);
接受php頁面遠(yuǎn)程服務(wù)器:
?php
if(isset($_POST['name'])){
if(!empty($_POST['name'])){
echo '您好,',$_POST['name'].'!';
}
}
?
例2
用CURL模擬POST請求抓取郵編與地址
完整代碼: 代碼如下
#!/usr/local/php/bin/php
?php
$runtime = new runtime ();
$runtime-start ();
$cookie_jar = tempnam('/tmp','cookie');
$filename = $argv[1];
$start_num= $argv[2];
$end_num = $argv[3];
for($i=$start_num; $i$end_num; $i++){
$zip = sprintf('6s',$i);
$fields_post = array(
'postcode' = $zip,
'queryKind' = 2,
'reqCode' = 'gotoSearch',
'search_button.x'=37,
'search_button.y'=12
);
$fields_string = http_build_query ( $fields_post, '' );
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "URL?reqCode=gotoSearchqueryKind=2postcode=".$zip);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120 );
curl_setopt($ch, CURLOPT_REFERER, $refer );
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_login );
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar );
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar );
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_POST, 1); // 發(fā)送一個常規(guī)的Post請求
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string );
$data = curl_exec($ch);
preg_match_all('/id="table1"[s]*?tr[s]*?td class="maintext"[sS]*?/td[s]*?/tr/', $data, $matches);
if (!$handle = fopen($filename, 'a+')) {
echo "不能打開文件 $filename";
echo "n";
exit;
}
if (fwrite($handle, $matches[0][1]) === FALSE) {
echo "不能寫入到文件 $filename";
echo "n";
exit;
}
echo "成功地將 $somecontent 寫入到文件$filename";
echo "n";
fclose($handle);
curl_close($ch);
}
class runtime
{
var $StartTime = 0;
var $StopTime = 0;
function get_microtime()
{
list($usec,$sec)=explode(' ',microtime());return((float)$usec+(float)$sec);
}
function start()
{
$this-StartTime=$this-get_microtime();
}
function stop(){
$this-StopTime=$this-get_microtime();
}
function spent()
{
return ($this-StopTime-$this-StartTime);
}
}
$runtime-stop ();
$con = 'Processed in'.$runtime-spent().'seconds';
echo 'Processed in'. $runtime-spent().'seconds';
模擬POST請求 提交數(shù)據(jù)或上傳文件 .
.
代碼如下 復(fù)制代碼
發(fā)送POST請求
function execUpload(){
$file = '/doucment/Readme.txt';
$ch = curl_init();
$post_data = array(
'loginfield' = 'username',
'username' = 'ybb',
'password' = '123456',
'file' = '@d:usrwwwtranslatedocumentReadme.txt'
);
curl_setopt($ch, CURLOPT_HEADER, false);
//啟用時會發(fā)送一個常規(guī)的POST請求,類型為:application/x-www-form-urlencoded,就像表單提交的一樣。
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);
curl_setopt($ch, CURLOPT_URL, '');
$info= curl_exec($ch);
curl_close($ch);
print_r($info);
}
2.
function handleUpload(){
print_r($_POST);
echo '===file upload info:';
print_r($_FILES);
}
■cURL 函數(shù)
■curl_close — 關(guān)閉一個cURL會話
■curl_copy_handle — 復(fù)制一個cURL句柄和它的所有選項
■curl_errno — 返回最后一次的錯誤號
■curl_error — 返回一個保護當(dāng)前會話最近一次錯誤的字符串
■curl_exec — 執(zhí)行一個cURL會話
■curl_getinfo — 獲取一個cURL連接資源句柄的信息
■curl_init — 初始化一個cURL會話
■curl_multi_add_handle — 向curl批處理會話中添加單獨的curl句柄
■curl_multi_close — 關(guān)閉一組cURL句柄
■curl_multi_exec — 運行當(dāng)前 cURL 句柄的子連接
■curl_multi_getcontent — 如果設(shè)置了CURLOPT_RETURNTRANSFER,則返回獲取的輸出的文本流
■curl_multi_info_read — 獲取當(dāng)前解析的cURL的相關(guān)傳輸信息
■curl_multi_init — 返回一個新cURL批處理句柄
■curl_multi_remove_handle — 移除curl批處理句柄資源中的某個句柄資源
■curl_multi_select — 等待所有cURL批處理中的活動連接
■curl_setopt_array — 為cURL傳輸會話批量設(shè)置選項
■curl_setopt — 設(shè)置一個cURL傳輸選項
■curl_version — 獲取cURL版本信息
朋友,我來告訴你答案!方式一:用GET方式直接把數(shù)據(jù)寫在地址欄里
方式二:action里寫上遠(yuǎn)程服務(wù)器地址,把表單數(shù)據(jù)寫在hidden里POST給對方