請問有人寫過這樣的CGI嗎 |
答題得分者是:yckuo
|
ryoryo20062006
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我 |
|||||||||||||||||||||||||||||||||||||||||
yckuo
高階會員 發表:55 回覆:389 積分:238 註冊:2003-03-07 發送簡訊給我 |
------
yckuo |
||||||||||||||||||||||||||||||||||||||||
ryoryo20062006
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我 |
已經有傳簡訊給副版主了,
但還是把我的問題傳上來好了, 其實我要做的是一個具有表格的網頁, 而這些表格裡面分別是我linux底下所擁有的檔案名稱, 比如說,表格裡有"07-04-17", 代表某個資料夾裏有這些東西, 而"07-04-17"也是超聯結,當我按下表格裡頭"07-04-17"時, 便會傳給另一個CGI程式這個字串"07-04-17", 另一個CGI再根據這個字串來處理我之後的工作, 現在問題就是,按下超連結並傳送字串這個動作, 我有點摸不著頭緒 不知道有沒有辦法可以這麼做 還請大家不吝惜指教 謝謝 |
||||||||||||||||||||||||||||||||||||||||
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|||||||||||||||||||||||||||||||||||||||||
yckuo
高階會員 發表:55 回覆:389 積分:238 註冊:2003-03-07 發送簡訊給我 |
A.cgi
<textarea class="cpp" rows="10" cols="60" name="code">printf("Content-type: text/html\n"); printf("
b.cgi 就套用我提供的那連結 , 利用它幫你解析使用者送來的資訊. 使用者傳來的資訊它會存在一連結串列上,如上例 A.cgi 是 name = req,value = 07-04-17 B.cgi <textarea class="cpp" rows="10" cols="60" name="code">unsigned char val[255]; while (cgihtml != NULL) { if (strcmp(cgihtml->entry.name, "req") == 0) { strcpy(val,cgihtml->entry.value); dosomething(val); } cgihtml = cgihtml->next; } </textarea>
------
yckuo |
||||||||||||||||||||||||||||||||||||||||
ryoryo20062006
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我 |
|||||||||||||||||||||||||||||||||||||||||
ryoryo20062006
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我 |
不好意思,副版主我還是無法弄出來,我po我部分的source code好了 <textarea class="c#" rows="10" cols="100" name="code">static void html_table(const char *buf_text)
{
printf(" <textarea class="c#" rows="10" cols="100" name="code">struct entry { char name[4]; char value[9]; }ent={"",""}; int main(void) { unsigned char val[9]; struct entry *cgihtml; cgihtml=&ent; while(cgihtml != NULL) { if(strcmp(cgihtml->name,"req")==0) { strcpy(val,cgihtml->value); html_content(); html_start("TEST"); html_header(3,"TEST"); html_text(val); html_end(); } static void html_text(const char *text) { printf("%s\r\n",text); } </textarea><br /> 這是我的B.cgi 不知道我這樣宣告結構體對不對,參考副版主所提供的方法下去改的,一些html_XXX函式都是包HTML的函式,不用理會它,卻無法顯示由A.cgi傳給B.cgi的字串,不知道是否有哪邊寫錯,還請副版主指點一二,感謝
yckuo
|
高階會員 發表:55 回覆:389 積分:238 註冊:2003-03-07 發送簡訊給我
|
<textarea class="cpp" rows="10" cols="60" name="code">include "cgi-llist.h"
llist entries;
unsigned char val[255];
void get_input(llist *l)
{
node* cgihtml;
cgihtml = l->head;
while (cgihtml != NULL)
{
if (strcmp(cgihtml->entry.name, "req") == 0)
{
strcpy(val,cgihtml->entry.value);
dosomething(val);
}
cgihtml = cgihtml->next;
}
}
void main()
{
get_input(&entries);
}
</textarea><br />
為何你要自訂 struct entry ??? 我寫給你參考的是用那套件的,不是自定個連結串列就 ok 的. 那套件裡面有說明檔,有範例,多試試吧,很簡單的.
------
yckuo
ryoryo20062006
|
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我
|
ryoryo20062006
|
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我
|
不好意思,副站長,我已經更改過我的source code了,但還是無法顯示出來,還是把我的source code放上來<textarea class="cpp" rows="15" cols="100" name="code">typedef struct {
char *name;
char *value;
} entrytype;
typedef struct _node {
entrytype entry;
struct _node* next;
} node;
typedef struct {
node* head;
} llist;
void list_create(llist *l);
node* list_next(node* w);
short on_list(llist *l, node* w);
short on_list_debug(llist *l, node* w);
void list_traverse(llist *l, void (*visit)(entrytype item));
node* list_insafter(llist* l, node* w, entrytype item);
void list_clear(llist* l);
</textarea><br />
這是我在您提供的參考網站所看到的,也終於明白為什麼要這樣宣告了,並也在我的B.CGI加入這個函式庫 <textarea class="cpp" rows="10" cols="100" name="code">#include "cgi-llist.h
void get_input(llist *l);
int main(void)
{
get_input(&entries);
html_content();
html_start("TEST");
html_header(3,"TEST");
html_text(val);
html_end();
}
void get_input(llist *l)
{
node* cgihtml;
cgihtml = l->head;
while (cgihtml != NULL)
{
if(strcmp(cgihtml->entry.name,"req")==0)
{
strcpy(val,cgihtml->entry.value);
}
cgihtml = cgihtml->next; }
}
</textarea>這是我的B.CGI,動作是顯示傳給B.CGI的字串,但還是沒看到網頁有字串出現,本身有個疑問就是,我們傳的那個字串,是存在哪個地方去讀取的?看了副站長的source code發覺自己還有很多要學。
還請副站長給我點提示,寫這種關於網路的程式還是個大外行,也還在K你提供的網站,感謝
yckuo
|
高階會員 發表:55 回覆:389 積分:238 註冊:2003-03-07 發送簡訊給我
|
首先請安裝 http://www.eekim.com/software/cgihtml/
a.c => 編譯成 a.cgi <textarea class="cpp" rows="10" cols="60" name="code">#include
b.c => 編譯成 b.cgi <textarea class="cpp" rows="10" cols="60" name="code">#include gcc -o a.cgi -L/usr/local/lib -lcgihtml a.c gcc -o b.cgi -L/usr/local/lib -lcgihtml b.c 就這樣,我有測試過,沒有問題.
------
yckuo
ryoryo20062006
|
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我
|
感謝副站長詳細的source code,
但是裡面的套件連結好像都失效了, 無法下載cgihtml.tar.gz 能否提供這個檔案給我呢? 能的話可以寄給我嗎? 我的E-mail :XXXXXXXXXXXXXXXXX 不好意思還有一個問題就是我的這個CGI程式是要在嵌入式系統上面執行 使用的webserver是thttpd2.20c 不知道是否有什麼限制沒有 感謝
編輯記錄
yckuo 重新編輯於 2007-04-22 18:02:08, 註解 更改 Email 為 XX 避免被搜集轟炸‧
yckuo
|
高階會員 發表:55 回覆:389 積分:238 註冊:2003-03-07 發送簡訊給我
|
下載連結在此 http://www.eekim.com/software/cgihtml/cgihtml-1.69.tar.gz
限制?? 你說的限制是啥?? cgihtml 的版權?? cgihtml 沒啥明確的版權宣告,程式內的 copyright 別拿掉就好好,他有提到的地方只有 This library is e-mail ware. Please send me e-mail if you use this library; I'd really like to hear your comments. Although I do not require it, I would appreciate attribution if you use my code. 所以儘管用吧. webserver 的限制?? 只要能跑 cgi 就行了.
------
yckuo
ryoryo20062006
|
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我
|
ryoryo20062006
|
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我
|
yckuo
|
高階會員 發表:55 回覆:389 積分:238 註冊:2003-03-07 發送簡訊給我
|
ryoryo20062006
|
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我
|
ryoryo20062006
|
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我
|
經過我昨天一直實驗,
發現我寫的Makefile一直無法編譯成功 我把Makefile的環境變數改成對應uClinux的方式 先把cgihtml.a編譯出來 但是卻出現make cgihtml.a : command not found 但是看了資料夾卻有cgihtml.a這個資料庫 不知道是不是我的makefile有寫錯 可能還要再參考些資料
編輯記錄
ryoryo20062006 重新編輯於 2007-04-22 13:00:06, 註解 無‧
ryoryo20062006
|
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我
|
不好意思,副站長
想請教您, 一定要連結這個資料庫嗎, 如果把cgihtml.a裡面的C語法寫進我的source code不行嗎? 對這方面有點疑問, 想請教副站長, 謝謝!
編輯記錄
ryoryo20062006 重新編輯於 2007-04-22 12:59:38, 註解 無‧
暗黑破壞神
|
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我
|
寫 CGI 幾個動作。
一個是先把你要表現的 html 先寫出來。 有變動的部份是屬於動態顯示。 不過至少要先做出靜態的 html 這樣你才會比較好分析。才不會像你問的這樣 A, B....etc 搞不清,分不清楚怎麼表示。 一個是你要用在 embed system 上面。 到底它支援的 httpd 有支援到什麼程度? 你要先做一下測試。 寫一下小程式。看看 http://host/cgi-bin/a.cgi?text=hello 然後把 hello 顯示出來。看看能不能做到。 如果可以你的程式才再寫下去。 如果不行,你該去看看你的 httpd 到底支援了那些。 另一個情況。當你的第二個解決了。 你其實可以自己寫程式來 parser 那些個環境變數。 有必要一定用別人寫好的 lib 或 function 嗎? 搞到 make 不起來這麼久,自己寫一下。只把你要的部份做出來。 我想應該不是那麼難的事。我寫那樣的 class 當初也用不到三天就寫好了。 有時候有人造好輪子,你不用重造是沒錯。 但是當別人造好的輪子,你無法直接使用時,還不如自己重造一個比你去修改別人的輪子還要快。 畢竟,造那個輪子的人,只跟你保證它在推土機能用。他沒說在你的遙控車上是可以用的。 看這麼久,完全沒看到你想要自己去了解 httpd 跟 cgi 之間做了什麼事。 而只堅持使用現有的 lib, 造成你 lib 也無法編譯等等的問題。 該放下就放下,讓回頭就回頭。 有時候寫程式,在晚上八點時會說。嗯。差一點就改好了。 十點要你睡覺時,你也覺得差一點就好了。 我想,搞到隔天你爸媽或你同學起床看到你整夜沒睡。都為了那差一點。 早知道這樣還不如昨晚八點就重新改寫。那還不用整夜抓虫。 我想我形容的,應該是很多人的經驗。^^ 加油吧
ryoryo20062006
|
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我
|
感謝副站長的source code,以及他給我參考的網站和方法,
敝人已經測試出來副站長所提供的a.cgi和b.cgi, 已經解決了這個問題, 在這邊先po出我的Makefile讓以後需要的人參考 當然並非每個系統都能用, 在此先把我的spec列出來 硬體: 1.晶慧出品的IXP420嵌入式系統實驗板,CPU:Intel Xscale IXP420 2.個人電腦PC CPU:P4 2.66G 512Mb 軟體: IXP420:OS---uClinux webserver---thttpd 2.20c Kernel---ARM Linux kernel 2.6.10 Library(glibc 2.3.3) PC:OS---Linux RH9.0 <textarea class="cpp" rows="10" cols="100" name="code">CC = armeb-linux-gcc #嵌入式系統編譯的指令,與PC 的Linux 編譯指令 "gcc"對應 RANLIB = $(WIS_RANLIB) OBJS = string-lib.o cgi-llist.o cgi-lib.o html-lib.o LIB = cgihtml.a # 這就是連結資料庫 $(LIB) : $(OBJS) $(WIS_AR) cr $@ $(OBJS) $(RANLIB) $@ #在po這篇時,發現自己寫在linux裡的makefile知所以會出現編譯錯誤,就是自己把$(RANLIB)寫成(RABLIB),所以才會出現錯誤訊息,該打!!! clean : @rm -f *.o $(LIB) include App.mk </textarea> 其中App.mk是包含一些編譯的指令 <textarea class="cpp" rows="10" cols="100" name="code">CROSS_COMPILE = armeb-linux- WIS_CC = $(CROSS_COMPILE)gcc WIS_AS = $(CROSS_COMPILE)as WIS_LD = $(CROSS_COMPILE)ld WIS_DUMP = $(CROSS_COMPILE)objdump WIS_COPY = $(CROSS_COMPILE)objcopy WIS_AR = $(CROSS_COMPILE)ar WIS_RANLIB = $(CROSS_COMPILE)ranlib </textarea> 執行make後,會產生cgihtml.a這個函式庫。 而編譯a.cgi以及b.cgi我自己再撰寫一個makefile, 當然也可以在第一個makefile加入編譯a.cgi與b.cgi的內容, <textarea class="cpp" rows="10" cols="100" name="code">CC = armeb-linux-gcc LIB = (寫出cgihtml.a的存在路徑)/cgihtml.a EXEC = a.cgi a.cgi : a.o $(WIS_CC) $(LDFLAGS) -o $@ $^ $(LIB) $(LDLIBS$(LDLIBS_$@)) clean : @rm -f *.o $(EXEC) include App.mk </textarea><br /> b.cgi就是把上面a的部份改成b 之後再把a.cgi與b.cgi傳到實驗板並執行webserver指令, 利用瀏覽器登入實驗板的IP並進入到a.cgi, 就會看到2007-04-19的超連結, 點進去後會看到"I GOT 2007-04-19"的字串, 到這邊這個動作已經可以秀出來了, 感謝副站長提供的source code, 副站長人真的太好了, 也減少我開發這個程式的時間, 在此感謝。 謝謝
編輯記錄
ryoryo20062006 重新編輯於 2007-04-22 15:04:45, 註解 無‧
yckuo
|
高階會員 發表:55 回覆:389 積分:238 註冊:2003-03-07 發送簡訊給我
|
ryoryo20062006
|
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我
|
今天在這邊解決問題,
要感謝的除了副站長, 再來就是版主暗黑破壞神, 我非常認同版主所說的, 一開始我問題的態度就是不對了, 我並沒有詳盡敘述我問題的細節, 只是把問題丟給貴站, 請人幫我解決問題, 這也就是版主所認為不好的地方, 在這邊把我的情況回應給版主知道一下, 畢竟, 交流就是互動, 說來慚愧, 我是碩士班的學生, 但我對寫程式的概念, 是從碩一開始接觸, 可以說是沒有任何程式基礎, 應該是說大學很混, 也沒認真在學, 當我考上碩士班時, 因為老闆本身研究方向, 就是開發嵌入式系統的應用程式, 所以才開始寫C, 也因為這樣, 開始我對C的接觸, 也發現其實我對程式並不是那麼排斥, 漸漸從完全不懂到現在略懂一二, 不敢說自己懂多少, 但自己也嘗試去寫些程式, 也累積了些經驗。 在我PO這個問題前, 對CGI已經大概知道它的功能是什麼, 也稍微了解與webserver的關係, 我的觀念就是, 只要寫的出來html, 就能把一些想要的功能, 利用C寫進去, 其互動的方式, 藉由method方式, 來傳遞webserver環境變數給CGI程式,(我目前所知) 所以, 也去了解過html的語法, 後來發現, CGIC其實功能很強大, 也參考過不少有關CGI的書, 或許因為要趕著畢業論文, 且要寫到網頁只是實作的一個小部份, 所以並非很仔細在尋找與思考問題, 這是比較現實考量的地方, 因為卡在這邊很久了, 也爬了不少文, 這方面好像很少人有提到, 只好提問了。 會被暗黑板主這麼說, 其實我不意外, 但因為事情畢竟還要解決, 且時間有點緊迫, 還是硬著頭皮提問, 剛好副站長提供了很好的參考資料以及原碼, 讓我很快進入狀況, 也讓我知道, 對CGI懂得還很少, 我只知道皮毛而已, 看到"連結串列(Link list)"這個名詞, 根本不知道也這種東西, 翻了html的書或CGI的書, 也沒看過, 來這邊也真的上了一課, 暗黑版主教了我很重要的一課, 路本來就很多條, 該怎麼走, 需要靠自己決定, 遇到問題時, 是應該自己思考解決? 還是了解問題先? 或是直接問人呢? 時間如果不夠呢? .....等等, 我非常認同暗黑版主的話, 這是做學問的態度, 也謝謝暗黑版主對我的提醒, 這是我第一次在貴站提問, 也是第一次在貴版發問, 希望日後可以在跟前輩們請教, 在此謝謝各位了!!!!!
yckuo
|
高階會員 發表:55 回覆:389 積分:238 註冊:2003-03-07 發送簡訊給我
|
TO ryoryo20062006 :
能有這樣的體會值得佳獎 暗黑破壞神 前輩的提示也是大家學習提問應有的精神, 這也是 提問的智慧 要新手看及謹記的. 本串主題有 暗黑破壞神 及 ryoryo20062006 良好的互動也值得大家互勉學習之.
------
yckuo
暗黑破壞神
|
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我
|
其實。女兒去年出生之後有很多事情的看法我在改變。
以前你要 source code 我有空也許會去幫忙寫一寫。 你要線路也許我會去幫你試看看。 不過,一方面是現在時間不夠。(開玩笑,打電動的時間都沒了。那有時間幫你回問題) 我真的意會到我老了。技術要怎麼傳下去。讓更多人能到達一個水準。 直接給你答案,你交了之後。你能得到什麼?出了社會變成業界的負擔。非我本意。 教你怎麼去思考問題。解決問題的方法。 這是我這幾年跟許多人接觸後的感想。 很多人看到問題,不知道怎麼解決。不知道怎麼走到終點。 這兩年來,我玩了木工。木工真的很有趣。它跟電腦程式不同。 它的精密度是以10條為單位來計算的。而不是機械以條為單位。 它的誤差大到原本我程式寫慣了的人看到會很在意。 但是,它真的可以動作。可以組合成我要的產品。 為什麼我會說木工呢?因為在之前我為了求得”精準”花掉很多的心力。 做過木工,我開始會欣賞誤差。 一個新人,一定會有程度上的不足。或理解能力不夠。 在往年,我會很在意怎麼教不會。怎麼不會怎樣怎樣。 然後自己氣得半死。來問我的人也搞不懂我在氣什麼。 反而忘了。 我之所以會寫這麼多程式。是因為我學電腦快30年了。寫程式都滿20年了。 我要新人在短短一年、半年內跟我相同,有同樣的視野,真的很難。 我玩過木工,我開始了解誤差、時間。。。。。等等。 我不再那麼心急了。 回想起大學時的體育老師,他真的很利害。他是某些大企業的球隊的教練。 當我問他說:老師你這麼利害。那天跟我們打一場。 那個老師說,我是教練。我只要教他球怎麼打。球棒、球拍怎麼拿。 使用時機要怎麼抓。我不用自己會做這些事。 我會做,就是選手,不會做就是教練。 當時他說得很清楚,我聽得很模糊。 現在,我才能深深的體會他的想法。 教人,下指導棋,跟自己下去下棋是不一樣的。 能指導別人怎麼分析,比自己做好還要難。 在回答問題上,我正朝著這個方向前進。 也許,我回答的技巧還不夠熟練,大家多包涵。 期待我女兒長大了,要我指導的時候,我的技巧能更成熟。^_^
ryoryo20062006
|
一般會員 發表:1 回覆:15 積分:3 註冊:2006-07-13 發送簡訊給我
|
暗黑版主你客氣了,
看到你寫的文章, 雖然, 我還沒到你這個年紀, 但是有些感覺, 我也跟你有同樣的feel, 很多事情不管是作學問還是任何事, 我相信一定都有起頭的時候, 累積經驗也是很重要的事, 事情遇多了, 如果自己能夠思考如何解決, 那麼, 不論是被罵或是責罰, 都是有價值的, 我是七年級生, 也就是所謂的草莓族, 雖然我還沒正式步入社會, 但是已經有接受被罵的心理準備, 為什麼, 因為我真的發現, 很多事情你不懂, 但是, 你只要踏進工作領域, 你就是要會, 老闆不管你工作的過程, 只在乎你東西出來了沒, 不管做什麼行業, 都是這樣, 如何讓自己可以更進步, 能夠更快進入狀況, 能夠不會被罵, 就是自己去思考問題所在, 我很認同暗黑版主的那些話, 不是奉承, 而是深深體會到前輩們所付出與經驗, 是目前自己所沒有的, 實驗室裡有些學弟, 看到不會就問問題, 從來不曾自己去找答案, 有時候讓我覺得, 根本就是叫我幫你做, 所以, 我了解暗黑版主所說的, 也明白版主想要表達的意思, 也很高興可以跟這麼多前輩討論這些問題, 暗黑板主喜歡木工阿, 呵呵呵, 我對機車方面有興趣, 喜歡自己調教些設定, 讓騎乘的感覺不一樣, 也藉由慢慢累積經驗, 加上些許理論, 讓自己的車更好騎, 更安全, 對任何事, 我是菜鳥, 但如果有興趣一直做下去, 慢慢也會變成老手, 沒有人天生就會, 但是做事的態度, 決定你會不會, 這是我的座右銘。 也謝謝暗黑版主提供寶貴的經驗。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |