嵌入式CGI開發之旅——3
處理表單(GET)
現在大多數的CGI指令碼用來處理表單輸入,處理表單的過程和上面直接在URL中呼叫CGI指令碼的情況有些不同。一個表單通常分為兩個部分:HTML表單格式和處理資料的指令碼,處理程式由
表單從瀏覽器發給伺服器有兩種方法(METHOD屬性):GET和POST。GET方法將資料打包放在環境變數QUERY_STRING中作為URL整體的一部分傳遞給伺服器。POST做很多型別GET的事情,但是它分離地傳遞資料給指令碼的,程式要透過標準輸入或得資料,POST方式不會改變資料,也就是說同樣的資料可以多次提交而不必重新輸入。當資料量超過1024時只能使用POST來傳遞,由於GET將資料直接放到URL中,資料的傳輸也就變得很不安全了。
表單輸入的資料透過URL編碼後傳輸到伺服器端,我們有必要了解一下URL的編碼規則:
1、 每個name/value以name=valu的形式配對出現,每對name/valu之間用&分隔
2、 若使用者沒有對某個name賦值,則以“name=”的形式出現
3、 任何特殊字元以百分號%用十六進位制編碼。
4、 輸入區的空格將以“+”顯示
要想得到使用者輸入的資料就必須對傳遞進來的URL編碼進行解碼,解碼有很多工具可用,比如CGIC庫中就已經對解碼進行了包裝,常用的工具還有uncgi
我們以簡單的乘法為例說明表單的提交
先建立一個乘法表單,有兩個輸入區,分別是乘數和被乘數,一個提交按鈕,當點選提交按鈕時,顯示結果
multiple.html
然後在/var/www/cgi-bin目錄下建立mult.c檔案並編譯成mult.cgi
mult.c
#include
#include
int main(){
char *data;
long m,n;
printf("%s%c%cn","Content-Type:text/html;charset=iso-8859-1",13,10);
//列印HTML頭
printf("n");
printf("
data=getenv("QUERY_STRING");
//取得環境變數
if(data==NULL)
printf("
else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2)
printf("
Error! Invalid data. Data must be numeric.");
else
printf("
The product of %ld and %ld is %ld.",m,n,m*n);
return 0;
}
Error!Error in passing data to script
");Multiplication results
n");[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24790158/viewspace-1041682/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 嵌入式CGI開發之旅——2
- 嵌入式開發基礎(3)
- 嵌入式開發
- 開始Go開發之旅Go
- 嵌入式Linux之我行——C+CGI+Ajax在S3C2440中的應用LinuxS3
- Linux嵌入式系統開發,嵌入式Linux開發教程Linux
- jni開發探索之旅
- NDK開發趟坑之旅
- web開發學習之旅Web
- 安卓之旅-時鐘開發安卓
- Web 開發的安全之旅Web
- Cocos2d-x 3.x遊戲開發之旅遊戲開發
- 嵌入式開發累不累?
- 小程式開發入坑之旅
- 做嵌入式開發辛苦嗎?
- 我看嵌入式開發薦
- Windows Embedded Standard 7-讓你體驗一次不同凡響的嵌入式開發之旅 薦Windows
- 開源專案之---cgi ( cgicc )
- Cocos2d-x 3.x遊戲開發之旅 筆記遊戲開發筆記
- Android NDK開發之旅3 C語言基礎 記憶體分配AndroidC語言記憶體
- 淺談KVO, iOS的開發之旅iOS
- Tessel:用JavaScript做嵌入式開發JavaScript
- uClinux 在 S3C4510B 嵌入式開發板上的移植和開發詳解LinuxS3
- flask之旅: 開發前環境準備Flask
- 移動端 Web 開發踩坑之旅Web
- 我們的移動混合開發之旅
- Qt 嵌入式圖形開發大全和QT開發手冊QT
- 嵌入式硬體開發最新技術
- 嵌入式開發要學哪些課程?
- 從零搭建嵌入式開發環境開發環境
- 嵌入式開發 ARM入門經典
- 嵌入式C++開發詳解(三)C++
- LEDE - Linux嵌入式開發環境Linux開發環境
- 嵌入式開發的基礎知識
- 搭建嵌入式Linux開發環境Linux開發環境
- Android NDK開發之旅15 NDK Eclipse下NDK開發流程AndroidEclipse
- WireShark駭客發現之旅(3)—Bodisparking惡意程式碼Spark
- Android NDK開發之旅26 C++ STLAndroidC++