在獲取表單數(shù)據(jù)中,最常用的自動(dòng)全局變量是$_GET和$_POST,它們分別獲取通過(guò)GET方法提交的數(shù)據(jù)和通過(guò)POST方法提交的數(shù)據(jù)。
創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司,專注網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站營(yíng)銷推廣,主機(jī)域名,網(wǎng)站空間,網(wǎng)站托管、服務(wù)器租用有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問(wèn)題,請(qǐng)聯(lián)系創(chuàng)新互聯(lián)。
比如一個(gè)名稱為"user"的文本框表單控件,如果用GET方法提交,可以用 $_GET["user"]或者$_GET['user']
獲取它提交的值。
在生成的表單元素以及之前的元素的名字加上中括號(hào)即可實(shí)現(xiàn)
比如: name="contents" = name="contents[]",最后提交獲取到的數(shù)據(jù)是一個(gè)數(shù)組形式的。
代碼如下:
form name="form1" method="post" action="index.php?action=ok"
1.input type="text" name="contents[]" value=""
2.input type="text" name="contents[]" value=""
3.input type="text" name="contents[]" value=""
input type="submit" value="提交"
/form
?php
if($_GET['action'] == 'ok'){
$contents = $_POST['contents'];
print_r($contents);
}
?
得到的數(shù)據(jù)是數(shù)組形式的,遍歷即可。
PHP 可以通過(guò)POST、GET方法獲取到表單提交的數(shù)據(jù)
獲取到的POST、GET是數(shù)組形式的值,需要通過(guò)鍵值來(lái)詳細(xì)獲取相應(yīng)的值
比如: index.php 頁(yè)面
下面是POST方法
form name="form1" method="post" action="index.php"
input type="text" name="contents" value=""
input type="submit" value="提交"
/form
?php
//獲取表單提交的數(shù)據(jù)
$contents = $_POST['contents'];
echo $contents;
?
也可以是下面是GET方法
form name="form1" method="get" action="index.php"
input type="text" name="contents" value=""
input type="submit" value="提交"
/form
?php
//獲取表單提交的數(shù)據(jù)
$contents = $_GET['contents'];
echo $contents;
?
POST相對(duì)于GET方法,更好一些,可以提交大量數(shù)據(jù),以及更安全些。
一、用file_get_contents以get方式獲取內(nèi)容,需要輸入內(nèi)容為:
1、?php
2、$url='';
3、$html = file_get_contents($url);
4、echo $html;
5、?
二、用file_get_contents函數(shù),以post方式獲取url,需要輸入內(nèi)容為
1、?php
2、$url = '';
3、$data = array ('foo' = 'bar');
4、$data = http_build_query($data);
5、$opts = array (
6、'http' = array (
7、 ? 'method' = 'POST',
8、? 'header'= "Content-type: application/x-www-form-urlencoded\r\n" .
9、 ? ? ? ? ? ? ? ? ? ? "Content-Length: " . strlen($data) . "\r\n",
10、 ? 'content' = $data
11、)
12、);
13、$ctx = stream_context_create($opts);
14、$html = @file_get_contents($url,'',$ctx);
15、?
三、用fopen打開(kāi)url,以get方式獲取內(nèi)容,需要輸入內(nèi)容為
1、?php
2、$fp = fopen($url, 'r');
3、$header = stream_get_meta_data($fp);//獲取信息
4、while(!feof($fp)) {
5、$result .= fgets($fp, 1024);
6、}
7、echo "url header: {$header} br":
8、echo "url body: $result";
9、fclose($fp);
10、?
四、用fopen打開(kāi)url,以post方式獲取內(nèi)容,需要輸入內(nèi)容為
1、?php
2、$data = array ('foo2' = 'bar2','foo3'='bar3');
3、$data = http_build_query($data);
4、$opts = array (
5、'http' = array (
6、'method' = 'POST',
7、'header'= "Content-type: application/x-www-form-urlencoded\r\nCookie:cook1=c3;cook2=c4\r\n" .
8、"Content-Length: " . strlen($data) . "\r\n",
9、'content' = $data
10、)
11、);
12、$context = stream_context_create($opts);
13、$html = fopen(';id2=i4','rb' ,false, $context);
14、$w=fread($html,1024);
15、echo $w;
16、?
五、用fsockopen函數(shù)打開(kāi)url,以get方式獲取完整的數(shù)據(jù),包括header和body,需要輸入內(nèi)容為
1、?php
2、function get_url ($url,$cookie=false)
3、{
4、$url = parse_url($url);
5、$query = $url[path]."?".$url[query];
6、echo "Query:".$query;
7、$fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);
8、if (!$fp) {
9、return false;
10、} else {
11、$request = "GET $query HTTP/1.1\r\n";
12、$request .= "Host: $url[host]\r\n";
13、$request .= "Connection: Close\r\n";
14、if($cookie) $request.="Cookie:?? $cookie\n";
15、$request.="\r\n";
16、fwrite($fp,$request);
17、while(!@feof($fp)) {
18、$result .= @fgets($fp, 1024);
19、}
20、fclose($fp);
21、return $result;
22、}
23、}
24、//獲取url的html部分,去掉header
25、function GetUrlHTML($url,$cookie=false)
26、{
27、$rowdata = get_url($url,$cookie);
28、if($rowdata)
29、{
30、$body= stristr($rowdata,"\r\n\r\n");
31、$body=substr($body,4,strlen($body));
32、return $body;
33、}
34、 ? return false;
35、}
36、?
參考資料:
php-file_get_contents
?php
$servername?=?"localhost";
$username?=?"root";
$password?=?"password";//mysql密碼
$dbname?=?"myDB";//選擇數(shù)據(jù)庫(kù)
//?創(chuàng)建連接
$conn?=?new?mysqli($servername,?$username,?$password,?$dbname);
//?檢測(cè)連接
if?($conn-connect_error)?{
die("Connection?failed:?"?.?$conn-connect_error);
}?
$sql?=?"SELECT?id,?firstname,?lastname?FROM?MyGuests";//sql查詢語(yǔ)句
$result?=?$conn-query($sql);//獲得查詢結(jié)果
if?($result-num_rows??0)?{
//?輸出每行數(shù)據(jù)
while($row?=?$result-fetch_assoc())?{
echo?"br?id:?".?$row["id"].?"?-?Name:?".?$row["firstname"].?"?"?.?$row["lastname"];
}
}?else?{
echo?"0?results";
}
$conn-close();
?
總結(jié)一下
PHP完全可以做到只在當(dāng)前頁(yè)顯示提交后的結(jié)果。
在action="當(dāng)前腳本的文件名" 或用action=?php echo $_SERVER["PHP_SELF"] ?
不過(guò)也許這不是你想要的結(jié)果,為什么呢。
因?yàn)檫@樣還是會(huì)使頁(yè)面刷新。如果運(yùn)行速度快的話,沒(méi)有什么大的影響。
如果你想的是無(wú)刷新提交,那就要用到AJAX了這是一種 js的技術(shù)。不是只用PHP能辦到的了。
AJAX也不能學(xué),現(xiàn)在網(wǎng)上有一些封裝好了的類,你自己學(xué)學(xué)看吧。
Ajax是使用客戶端腳本與Web服務(wù)器交換數(shù)據(jù)的Web應(yīng)用開(kāi)發(fā)方法。Web頁(yè)面不用打斷交互流程進(jìn)行重新加裁,就可以動(dòng)態(tài)地更新。使用Ajax,用戶可以創(chuàng)建接近本地桌面應(yīng)用的直接、高可用、更豐富、更動(dòng)態(tài)的Web用戶界面。
一個(gè)Ajax交互從一個(gè)稱為XMLHttpRequest的java script對(duì)象開(kāi)始。如同名字所暗示的,它允許一個(gè)客戶端腳本來(lái)執(zhí)行HTTP請(qǐng)求,并且將會(huì)解析一個(gè)XML格式的服務(wù)器響應(yīng)。Ajax處理過(guò)程中的第一步是創(chuàng)建一個(gè)XMLHttpRequest實(shí)例。使用HTTP方法(GET或POST)來(lái)處理請(qǐng)求,并將目標(biāo)URL設(shè)置到XMLHttpRequest對(duì)象上。
當(dāng)你發(fā)送HTTP請(qǐng)求,你不希望瀏覽器掛起并等待服務(wù)器的響應(yīng),取而代之的是,你希望通過(guò)頁(yè)面繼續(xù)響應(yīng)用戶的界面交互,并在服務(wù)器響應(yīng)真正到達(dá)后處理它們。要完成它,你可以向XMLHttpRequest注冊(cè)一個(gè)回調(diào)函數(shù),并異步地派發(fā)XMLHttpRequest請(qǐng)求。控制權(quán)馬上就被返回到瀏覽器,當(dāng)服務(wù)器響應(yīng)到達(dá)時(shí),回調(diào)函數(shù)將會(huì)被調(diào)用。
1. 初始化Ajax
Ajax實(shí)際上就是調(diào)用了XMLHttpRequest對(duì)象,那么首先我們的就必須調(diào)用這個(gè)對(duì)象,我們構(gòu)建一個(gè)初始化Ajax的函數(shù):
/**
* 初始化一個(gè)xmlhttp對(duì)象
*/
function InitAjax()
{
var ajax=false;
try {
ajax = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
ajax = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
ajax = false;
}
}
if (!ajax typeof XMLHttpRequest!='undefined') {
ajax = new XMLHttpRequest();
}
return ajax;
}
你也許會(huì)說(shuō),這個(gè)代碼因?yàn)橐{(diào)用XMLHTTP組件,是不是只有IE瀏覽器能使,不是的經(jīng)我試驗(yàn),F(xiàn)irefox也是能使用的。
那么我們?cè)趫?zhí)行任何Ajax操作之前,都必須先調(diào)用我們的InitAjax()函數(shù)來(lái)實(shí)例化一個(gè)Ajax對(duì)象。
2. 使用Get方式
現(xiàn)在我們第一步來(lái)執(zhí)行一個(gè)Get請(qǐng)求,加入我們需要獲取 /show.php?id=1的數(shù)據(jù),那么我們應(yīng)該怎么做呢?
假設(shè)有一個(gè)鏈接:<a href="/show.php?id=1">新聞1</a>,我點(diǎn)該鏈接的時(shí)候,不想任何刷新就能夠看到鏈接的內(nèi)容,那么我們?cè)撛趺醋瞿兀?/p>
//將鏈接改為:
<a href="#" onClick="getNews(1)">新聞1</a>
//并且設(shè)置一個(gè)接收新聞的層,并且設(shè)置為不顯示:
<div id="show_news"></div>
同時(shí)構(gòu)造相應(yīng)的java script函數(shù):
function getNews(newsID)
{
//如果沒(méi)有把參數(shù)newsID傳進(jìn)來(lái)
if (typeof(newsID) == 'undefined')
{
return false;
}
//需要進(jìn)行Ajax的URL地址
var url = "/show.php?id="+ newsID;
//獲取新聞顯示層的位置
var show = document.getElementById("show_news");
//實(shí)例化Ajax對(duì)象
var ajax = InitAjax();
//使用Get方式進(jìn)行請(qǐng)求
ajax.open("GET", url, true);
//獲取執(zhí)行狀態(tài)
ajax.onreadystatechange = function() {
//如果執(zhí)行是狀態(tài)正常,那么就把返回的內(nèi)容賦值給上面指定的層
if (ajax.readyState == 4 ajax.status == 200) {
show.innerHTML = ajax.responseText;
}
}
//發(fā)送空
ajax.send(null);
}
那么當(dāng),當(dāng)用戶點(diǎn)擊“新聞1”這個(gè)鏈接的時(shí)候,在下面對(duì)應(yīng)的層將顯示獲取的內(nèi)容,而且頁(yè)面沒(méi)有任何刷新。當(dāng)然,我們上面省略了show.php這個(gè)文件,我們只是假設(shè)show.php文件存在,并且能夠正常工作的從數(shù)據(jù)庫(kù)中把id為1的新聞提取出來(lái)。
這種方式適應(yīng)于頁(yè)面中任何元素,包括表單等等,其實(shí)在應(yīng)用中,對(duì)表單的操作是比較多的,針對(duì)表單,更多使用的是POST方式,這個(gè)下面將講述。
3. 使用POST方式
其實(shí)POST方式跟Get方式是比較類似的,只是在執(zhí)行Ajax的時(shí)候稍有不同,我們簡(jiǎn)單講述一下。
假設(shè)有一個(gè)用戶輸入資料的表單,我們?cè)跓o(wú)刷新的情況下把用戶資料保存到數(shù)據(jù)庫(kù)中,同時(shí)給用戶一個(gè)成功的提示。
//構(gòu)建一個(gè)表單,表單中不需要action、method之類的屬性,全部由ajax來(lái)搞定了。
<form name="user_info">
姓名:<input type="text" name="user_name" /><br />
年齡:<input type="text" name="user_age" /><br />
性別:<input type="text" name="user_sex" /><br />
<input type="button" value="提交表單" onClick="saveUserInfo()">
</form>
//構(gòu)建一個(gè)接受返回信息的層:
<div id="msg"></div>
我們看到上面的form表單里沒(méi)有需要提交目標(biāo)等信息,并且提交按鈕的類型也只是button,那么所有操作都是靠onClick事件中的saveUserInfo()函數(shù)來(lái)執(zhí)行了。我們描述一下這個(gè)函數(shù):
function saveUserInfo()
{
//獲取接受返回信息層
var msg = document.getElementById("msg");
//獲取表單對(duì)象和用戶信息值
var f = document.user_info;
var userName = f.user_name.value;
var userAge = f.user_age.value;
var userSex = f.user_sex.value;
//接收表單的URL地址
var url = "/save_info.php";
//需要POST的值,把每個(gè)變量都通過(guò)來(lái)聯(lián)接
var postStr = "user_name="+ userName +"user_age="+ userAge +"user_sex="+ userSex;
//實(shí)例化Ajax
var ajax = InitAjax();
//通過(guò)Post方式打開(kāi)連接
ajax.open("POST", url, true);
//定義傳輸?shù)奈募﨟TTP頭信息
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//發(fā)送POST數(shù)據(jù)
ajax.send(postStr);
//獲取執(zhí)行狀態(tài)
ajax.onreadystatechange = function() {
//如果執(zhí)行狀態(tài)成功,那么就把返回信息寫(xiě)到指定的層里
if (ajax.readyState == 4 ajax.status == 200) {
msg.innerHTML = ajax.responseText;
}
}
}
大致使用POST方式的過(guò)程就是這樣,當(dāng)然,實(shí)際開(kāi)發(fā)情況可能會(huì)更復(fù)雜,這就需要開(kāi)發(fā)者去慢慢琢磨。