| 導購 | 订阅 | 在线投稿
分享
 
 
 

用CGI編寫WEB查詢系統

來源:互聯網  2008-06-01 01:10:30  評論

摘要:本文分析討論了將WEB與後以數據源相連的方法之一——公共網關界面CGI的概念與特點,並以成績查詢系統作爲實例具體分析了用C語言進行CGI程序設計的方法與過程。

一CGI簡述

公共網關界面(CGI)是一種編程標准,它規定了Web服務器調用其它可執行程序(CGI程序)的接口協議標准。CGI程序通過Web服務器與運行Web服務器調用其它可執行程序交互,它接受Web浏覽器發送給Web服務器的信息,並進行處理,然後將結果再送回給Web服務器及Web浏覽器。CGI程序可以用任何程序設計語言編寫,如Shell、perl、C、Java等,用C語言編寫的CGI程序具有速度快、安全性高等特點。CGI程序通常用于加入查詢機制、搜索機制、交互式應用及其它一些應用。CGI接口標准包括輸入、環境變量、標准輸出三部分,CGI程序可以通過標准輸入(stdin)從Web服務器得到輸入信息,例如從FORM中得到數據,這就是常用的POST方法。由于不同的操作系統采用了不同的信息交換機制,其參數傳遞的處理過程也有差別,在Unix與DOS中,環境信息反映著本級程序運行時的某些系統狀況,可用于父程序與子程序間的信息傳遞,CGI正是通過設量環境變量在服務器與客戶機間傳遞數據的,各操作系統都提供了許多環境變量,它們定義了程序的執行環境,應用程序可以存取它們。Web服務器和CGI接口也設置了一些環境變量用以傳遞一些重要的參數。CGI程序通過標准輸出(stdout)將輸出信息傳送給Web服務器,傳送給服務器的信息可以是Html文本也可以是純文本。本文將利用C語言編寫一個CGI應用程序——學生成績查詢系統,並分析了CGI程序設計的方法、過程、技巧。

二、成績查詢系統介紹

一個在WWW環境下的學生成績公布欄必將成爲日後各類成績發布的主要手段,每位學生交將有自己的密碼,所以不必擔心成績上網之後的保密性。任何學生以任何形式上網進入本站點的成績查詢系統之後,只要輸入自己的系列、班別、學號及密碼,便可以利用這個學生績查詢系統查詢自己的成績,該設計思路與系統不僅適合各類高校內部的成績發布,也適合于全國高考、統考等大規模考試的成績發布。本文介紹的只是一個功能單一的查詢系統,若需完善還需加入成績維護部分,由成績治理者進行內容維護,包括成績輸入、修改、刪除等功能。

三、HTML FORM格式部分

3.1 FORM輸放的分解

在UNIX系統上,CGI信息是利用STDIN/STDOUT方式傳輸的,所以若要編寫一個C語言的CGI程序,就必須要了解如何解剖與截取STDIN的CGI信息。當用戶提交一個HTMLFORM時,WEB浏覽器首先對FORM中的數據以名字/值對的形式進行編碼,並發送給WEB服務器,然後再由WEB服務器傳遞給CGI程序,其格式如下:

NAME1=VALUEL&NAME2=VALUE2&NAME3····

名字是FORM中定義的INPUT,SELECT等標置名字,值是用戶輸入或選擇的標值,在程序中將對其進行分析與解碼,將其分解成一組組的名字/值對,這個過程是通過在輸入流中查找字符「=」與「&」來完成的,每當找到字符「=」,標志著一個FORM變量名字的結束,當找到字符「&」,標志著一個FORM變量值的結束。當名字/值對分解完之後,還須將輸入中的一些非凡字符轉換成相應的ASCII字符,如需將「+」轉換成空格符,將一些非凡字符轉換成ASCII字符,對以上分所分析的分解與轉換過程,在下面的程序中有具體注明。3.2HTML FORM文件

成績查詢系統的HTML文件P.htrnl

學生成績查詢系統

學生成績查詢系統

系列:

計算機系

英語系

無線電系

學號:

密碼:

四、學生成績查詢CGI程序

該CGI程序分解、接收HTML FORM中提供的查詢條件,然後查詢出該學生的成績並返回。學生成績有兩個數據文件,一個是***SUB DAT,其中含有學生的各個科目,***表示系別,如計算機系的科目文件是COMPSUB DAT,英語系的科目文件是ENGSUB.DAT,無線電系科目文件是ELECSUB.DAT;另一個數據文件是***SCOER.DAT,該文件中包含有每個學生的學號、密碼與成績,***表示系別,如計算機系的學生成績文件是COMPSCORE.DAT,同理,其他系的學生成績文件按此原則以此類推。當學生輸入的學號及密碼符合數據文件的內容時,就會顯示該學生的成績。main(int argc,char*argv[])

{

register int I,m=0;

int len;

FILE*fp,*fpl,*fopen();

char filename1[100],filename2[100],title[100];/*設定資料變量*/

char subject[10][10];

char id[100][10],password[100][10];

int score[100][20],sum[100],allsum;

float avg[100],alltotalavg;

int rank,number,index,find,j,kind;

printf("content-type:text/html%c%c",10,10);

len=atoi(getenv("CONTENT_LENGITH"));

for(I=0;len && (!feof(stdin));I++){

m=I

inputs[I].val=readdstdin(stdin,&,&len);/*讀STDiN信息*/

AddToSpace(inputs[I].val);

Convert(inputs[I].val);

inputs[I].name=ReadData(inputs[I].val,=);

}

strcpy(filename1,"/score/setup/");

stUCpy(filename2,"/xcore/data/");

if(strcmp(inputs[o].val,"計算機系/)==0

strcat(filename1,"compusb.dat");

strcat(filename2,"compscore.dat");

}

if(strcmp(inputs[o].val,"英語系")==0

strcat(filenamel,"engsub.dat");

strcat(filename2,"engscore.dat");

}

if(strcmp(inputs[o].val,"無線電系")==0

}

strcat(filename1,"elecsub.dat");

strcat(filename2,"elecscore.dat");

}

fp=fopen(filename1,"r");/*打開文件*/

kind=0;

while(fscanf(fp,"%s",subject[kind]!=EOF

kind=kind+1;

fclose(fp);

fp1=fopen(filename2,"r");/*打開文件*/

allsum=0;

for(I=0;I輸入有誤,請再輸一次!\n");

}

else

{

rank=1

for(I=o;I學生成績查詢系統");

pritf("\n查詢學生學號:%s

",

inputs[2].val);

printf("\n成績如下:");

for(I=0;I

\n");

for(I=0;I

\n",sum[index]);

}

}五、結束語

本文以學竽成績查詢系統作爲實例,具體分析了用C語言進行CGI程序設計的方法與過程,隨著INTERET/INTRANET應用的深入,將WEB與多台數據庫聯接的需求也日益迫切,CGI可以使得WEB能夠能最低程序的複雜性與其後台信息集成,成爲一種支持多種類型的通用環境,但是由于在CGI方式中每執行一次交互都需啓動一個外部程序,因此其在實時應用方面受到了限制,因,WEB SENER API及JOCBC等應用方式也正在成熟。

 摘要:本文分析討論了將WEB與後以數據源相連的方法之一——公共網關界面CGI的概念與特點,並以成績查詢系統作爲實例具體分析了用C語言進行CGI程序設計的方法與過程。 一CGI簡述 公共網關界面(CGI)是一種編程標准,它規定了Web服務器調用其它可執行程序(CGI程序)的接口協議標准。CGI程序通過Web服務器與運行Web服務器調用其它可執行程序交互,它接受Web浏覽器發送給Web服務器的信息,並進行處理,然後將結果再送回給Web服務器及Web浏覽器。CGI程序可以用任何程序設計語言編寫,如Shell、perl、C、Java等,用C語言編寫的CGI程序具有速度快、安全性高等特點。CGI程序通常用于加入查詢機制、搜索機制、交互式應用及其它一些應用。CGI接口標准包括輸入、環境變量、標准輸出三部分,CGI程序可以通過標准輸入(stdin)從Web服務器得到輸入信息,例如從FORM中得到數據,這就是常用的POST方法。由于不同的操作系統采用了不同的信息交換機制,其參數傳遞的處理過程也有差別,在Unix與DOS中,環境信息反映著本級程序運行時的某些系統狀況,可用于父程序與子程序間的信息傳遞,CGI正是通過設量環境變量在服務器與客戶機間傳遞數據的,各操作系統都提供了許多環境變量,它們定義了程序的執行環境,應用程序可以存取它們。Web服務器和CGI接口也設置了一些環境變量用以傳遞一些重要的參數。CGI程序通過標准輸出(stdout)將輸出信息傳送給Web服務器,傳送給服務器的信息可以是Html文本也可以是純文本。本文將利用C語言編寫一個CGI應用程序——學生成績查詢系統,並分析了CGI程序設計的方法、過程、技巧。 二、成績查詢系統介紹 一個在WWW環境下的學生成績公布欄必將成爲日後各類成績發布的主要手段,每位學生交將有自己的密碼,所以不必擔心成績上網之後的保密性。任何學生以任何形式上網進入本站點的成績查詢系統之後,只要輸入自己的系列、班別、學號及密碼,便可以利用這個學生績查詢系統查詢自己的成績,該設計思路與系統不僅適合各類高校內部的成績發布,也適合于全國高考、統考等大規模考試的成績發布。本文介紹的只是一個功能單一的查詢系統,若需完善還需加入成績維護部分,由成績治理者進行內容維護,包括成績輸入、修改、刪除等功能。 三、HTML FORM格式部分 3.1 FORM輸放的分解 在UNIX系統上,CGI信息是利用STDIN/STDOUT方式傳輸的,所以若要編寫一個C語言的CGI程序,就必須要了解如何解剖與截取STDIN的CGI信息。當用戶提交一個HTMLFORM時,WEB浏覽器首先對FORM中的數據以名字/值對的形式進行編碼,並發送給WEB服務器,然後再由WEB服務器傳遞給CGI程序,其格式如下: NAME1=VALUEL&NAME2=VALUE2&NAME3···· 名字是FORM中定義的INPUT,SELECT等標置名字,值是用戶輸入或選擇的標值,在程序中將對其進行分析與解碼,將其分解成一組組的名字/值對,這個過程是通過在輸入流中查找字符「=」與「&」來完成的,每當找到字符「=」,標志著一個FORM變量名字的結束,當找到字符「&」,標志著一個FORM變量值的結束。當名字/值對分解完之後,還須將輸入中的一些非凡字符轉換成相應的ASCII字符,如需將「+」轉換成空格符,將一些非凡字符轉換成ASCII字符,對以上分所分析的分解與轉換過程,在下面的程序中有具體注明。3.2HTML FORM文件 成績查詢系統的HTML文件P.htrnl 學生成績查詢系統 學生成績查詢系統 系列: 計算機系 英語系 無線電系  學號: 密碼:  四、學生成績查詢CGI程序 該CGI程序分解、接收HTML FORM中提供的查詢條件,然後查詢出該學生的成績並返回。學生成績有兩個數據文件,一個是***SUB DAT,其中含有學生的各個科目,***表示系別,如計算機系的科目文件是COMPSUB DAT,英語系的科目文件是ENGSUB.DAT,無線電系科目文件是ELECSUB.DAT;另一個數據文件是***SCOER.DAT,該文件中包含有每個學生的學號、密碼與成績,***表示系別,如計算機系的學生成績文件是COMPSCORE.DAT,同理,其他系的學生成績文件按此原則以此類推。當學生輸入的學號及密碼符合數據文件的內容時,就會顯示該學生的成績。main(int argc,char*argv[]) { register int I,m=0; int len; FILE*fp,*fpl,*fopen(); char filename1[100],filename2[100],title[100];/*設定資料變量*/ char subject[10][10]; char id[100][10],password[100][10]; int score[100][20],sum[100],allsum; float avg[100],alltotalavg; int rank,number,index,find,j,kind; printf("content-type:text/html%c%c",10,10); len=atoi(getenv("CONTENT_LENGITH")); for(I=0;len && (!feof(stdin));I++){ m=I inputs[I].val=readdstdin(stdin,&,&len);/*讀STDiN信息*/ AddToSpace(inputs[I].val); Convert(inputs[I].val); inputs[I].name=ReadData(inputs[I].val,=); } strcpy(filename1,"/score/setup/"); stUCpy(filename2,"/xcore/data/"); if(strcmp(inputs[o].val,"計算機系/)==0 strcat(filename1,"compusb.dat"); strcat(filename2,"compscore.dat"); } if(strcmp(inputs[o].val,"英語系")==0 strcat(filenamel,"engsub.dat"); strcat(filename2,"engscore.dat"); } if(strcmp(inputs[o].val,"無線電系")==0 } strcat(filename1,"elecsub.dat"); strcat(filename2,"elecscore.dat"); } fp=fopen(filename1,"r");/*打開文件*/ kind=0; while(fscanf(fp,"%s",subject[kind]!=EOF kind=kind+1; fclose(fp); fp1=fopen(filename2,"r");/*打開文件*/ allsum=0; for(I=0;I輸入有誤,請再輸一次!\n"); } else { rank=1 for(I=o;I學生成績查詢系統"); pritf("\n查詢學生學號:%s ", inputs[2].val); printf("\n成績如下:"); for(I=0;I \n"); for(I=0;I \n",sum[index]); } }五、結束語 本文以學竽成績查詢系統作爲實例,具體分析了用C語言進行CGI程序設計的方法與過程,隨著INTERET/INTRANET應用的深入,將WEB與多台數據庫聯接的需求也日益迫切,CGI可以使得WEB能夠能最低程序的複雜性與其後台信息集成,成爲一種支持多種類型的通用環境,但是由于在CGI方式中每執行一次交互都需啓動一個外部程序,因此其在實時應用方面受到了限制,因,WEB SENER API及JOCBC等應用方式也正在成熟。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有