![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 dfgrhth ![]()
![]() |
蘋果.香蕉.魚翅 如果我選了蘋果和香蕉之後可以用 prin""; 顯示出你所選的項目名稱 我現在就差checkbox的複選搞不出來,我該怎麼弄這個checkbox複選的語法呢? 現在我選兩個例如香蕉和蘋果,在prin"";中只有出現其中一個那怎麼變出現兩個呢? 感謝
本篇文章發表於2012-01-25 18:25
|
16樓
作者回應
dfgrhth ![]() |
我把複選的加入到我要弄得程式內
它一開始是出現1.[您都沒有選取] 後來我又改改看 之後按 確定紐2.沒有跳到sub bb{}那頁網站 (按了之後就像重新整理)。 如果我用http://127.0.0.1/01.cgi它會出現500的錯誤伺服器 怎麼辦...
本篇文章回覆於2012-01-29 01:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
17樓 |
您有下載我的http://ap.a168a.com/test/00.zip下載跑看看嗎?
不必再改您的ㄚ,不然您下載01.zip 有含時鐘的,那就不會蓋掉您的00.cgi
本篇文章回覆於2012-01-29 02:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
18樓 |
您的情形好像是流覽器還記億舊的,我也試過,當您軟體改過後,您的名稱還是00.cgi,就有可能產生您說的
它一開始是出現1.[您都沒有選取] 後來我又改改看 之後按 確定紐2.沒有跳到sub bb{}那頁網站 尤其是用代理主機,您試著將檔名改一下為0a.cgi,內容action="0a.cgi"這樣再試試. 或者直街下載我的01.zip解壓縮,去試試
本篇文章回覆於2012-01-29 02:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
19樓 |
還有您說
它一開始是出現1.[您都沒有選取] 後來我又改改看 之後按 確定紐2.沒有跳到sub bb 這是不對的 因為 出現 您都沒有選取 這段話是在 sub bb 之內執行的喔 因此它確實是記億您舊有的 隱藏欄位 bb 才會判斷去執行 sub bb 也因此都還沒選取,才會執行 sub bb 內的那句 您都沒有選取
本篇文章回覆於2012-01-29 02:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
20樓
作者回應
dfgrhth ![]() |
可能是因為我的程式碼中有跑&htm;所以選項會中斷吧,
有辦法讓我所選擇的名稱在 print <<"EOM"; <FONT SIZE=3> <B>您所選取的有$item[$b]</B><BR> <hr size=0></font> EOM 中顯示嗎? 以下是我將複選的程式碼附加在我要使用的程式碼上面,無論選什麼或不選會發現案確定後它只有出現 〔您所選取的有蘋果〕。 我是用AppServ讓電腦跑CGI的,現在只要將我的12356.zip解壓縮後放在www資料夾 即可用http://127.0.0.1/00.cgi來瀏覽網站,而現在的問題就是我上面所說的問題 http://cgi.educities.edu.tw/tre841l3/12356.zip 我的程式碼
本篇文章回覆於2012-01-29 12:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
21樓 |
我跟您分析一下您的程式是錯在那:
$j=0; foreach (@checkboxvalue) { $j++; if ($j<2) { print "您所選取的有:"; } ($a,$b)=split(/=/); print $item[$b]."*"; } if ($j < 1 ) { print "您都沒有選取"; } &htm; print <<"EOM"; <FONT SIZE=3> <B>您所選取的有$item[$b]</B><BR> <hr size=0></font> EOM exit; } 您所選取的有重復兩次,第一次是我寫的程式如下,有迴圈,當然沒有問題 $j=0; foreach (@checkboxvalue) { $j++; if ($j<2) { print "您所選取的有:"; } ($a,$b)=split(/=/); print $item[$b]."*"; } 會出現多選當然沒問題 可是您可能沒注意多加一個 &htm; print <<"EOM"; <FONT SIZE=3> <B>您所選取的有$item[$b]</B><BR> <hr size=0></font> EOM 是不在迴圈裡,當然會蓋掉之前的畫面只顯示一個選項 您將&htm以下程式加到回圈內就可以了,但回圈內只能有一個 print $item[$b]."*"; 或用您的 print <<"EOM"; <FONT SIZE=3> <B>您所選取的有$item[$b]</B><BR> <hr size=0></font> EOM 這樣才不會又重復
本篇文章回覆於2012-01-29 17:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
22樓 |
補充還有您不選的時後
if ($j < 1 ) { print "您都沒有選取"; } &htm; print <<"EOM"; <FONT SIZE=3> <B>您所選取的有$item[$b]</B><BR> <hr size=0></font> EOM 後面的這錯誤增加還是會蓋掉前面的 "您都沒有選取"; 趕快將後面這段改到回圈內吧
本篇文章回覆於2012-01-29 17:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
23樓 |
還有我的版本是perl 5.14.xxx
大都相符 只在EOM的時後,不能出現兩個,若出現兩個就要用 { } 那是我後來跟您加的 不過您還沒回答有沒先照我的00.cgi去測 因我後來看您原先版本與後來增加的1.pl是用sub vv自己再抓變數 是放到@pair,不是 @checkboxvalue 喔 因此請一併改過去. 也請告訴我一下00.cgi全部不改放到您那可以執行嗎(因為我的都ok,不知您的版本可以嗎)
本篇文章回覆於2012-01-29 18:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
24樓
作者回應
dfgrhth ![]() |
我是用AppServ v2.5.9版本
如果將你的直接解壓縮放到我的www 會出現500的錯誤畫面。 那我現在的要怎麼改 http://cgi.educities.edu.tw/tre841l3/12356.zip ← 這之
本篇文章回覆於2012-01-29 21:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
25樓 |
因為您的 &htm 那好像也不完全對稱,
還有很多bug,不一定是server問題 等我安裝appserv 及 perl 到我另一台電腦再幫您試 我的檔案及您的檔案
本篇文章回覆於2012-01-29 22:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
26樓 |
我已經幫您試了,我已下載appserv來試
請在我的00.cgi第一行 #!/usr/bin/perl 加上以下這一行 print "Content-type:text/html\n\n"; 這樣就不會產生500 server錯誤 因我的server不是appserv所以若多那一行,流覽器就會多Content-type:text/html這些字,因此我拿掉 但另一台電腦我灌了appserv後發現appserv一定要加上,不然會出問題誠如您所說500的Internal Server Error 錯誤訊息 因此請加入那一行後,執行我的00.cgi一下,再告訴我結果好嗎,謝謝
本篇文章回覆於2012-01-29 23:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
27樓 |
您的12356.zip也幫您改好了,用您那種抓參數方法,不能說不對,但最重要是您後來我的參數您沒跟著改
且要多一個判斷,若不加此判段,當都沒有選項時或有選項時,都會多一個蘋果,因為mode=bb那bb被當成陣列所引來使用會當成是0,因此不論有沒有選都會多一個蘋果喔,原來我的是@checkboxvalue已處裡掉mode這字串,現為配合您,用您改用您的@pairs部份程式碼如下 foreach (@pairs) { ($a,$b)=split(/=/); if ($a=~/mode/){ } else { ... ... ... } 整個專案您的12356.zip已改正確並在appserv測試ok,專案下載在http://ap.a168a.com/test/00ok.zip
本篇文章回覆於2012-01-30 01:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
28樓 |
還有我發現結束的EOM只能靠最左邊,不能為了漂亮程式碼,移到 IF 或其他有縮排地方,那會產生錯誤
為了好抓您的bug,我有移動縮排,讓{}比較容易對稱容易讀,結果因此錯誤抓得更久,在此特別提醒您.
本篇文章回覆於2012-01-30 01:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
29樓
作者回應
dfgrhth ![]() |
已經可以順利跑了^^感謝
對了 我能問一下 ($item[$j],$itemsay[$j]) = split(/<>/); 這段代表什麼意思嗎,它有[$j]如果沒有的話會怎麼樣呢?$item[$j]一定要用$開頭嗎如果用@呢? 還有這段 foreach (@pairs) { ($a,$b)=split(/=/); if ($a=~/mode/){ } @pairs是開啟哪邊的資料來迴圈呢,為什麼@pairs要迴圈呢?它的$a,$b在那位子那$a代表什麼值? $a=~/mode/ 為什麼要判斷這段呢? 還有 <B>$item[$b]</B> 為什麼要用[$b]而不用$[a] 和為什麼$item[$b]的$item要用($item[$j],$itemsay[$j]) = split(/<>/); 的$item而不是用$itemsay,變成<B>$itemsay[$b]</B> 呢 感謝你^^
本篇文章回覆於2012-01-30 02:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
30樓 |
($item[$j],$itemsay[$j]) = split(/<>/);
這段代表什麼意思嗎,它有[$j]如果沒有的話會怎麼樣呢?$item[$j]一定要用$開頭嗎如果用@呢? ans:這是您的123.cgi內檔案 蘋果<>補充C維生素.... 是對稱的因此$item[$j]代表蘋果...,$itemsay[$j]) 代表是它的說明補充C維生素... 您也可以用@陣列,那是一開始就要用的,只不過是偶數索引是蘋果,奇數索引是說明 因為您是成對,用這種方式是配合您寫的檔案. 還有這段 foreach (@pairs) { ($a,$b)=split(/=/); if ($a=~/mode/){ } @pairs是開啟哪邊的資料來迴圈呢,為什麼@pairs要迴圈呢?它的$a,$b在那位子那$a代表什麼值? $a=~/mode/ 為什麼要判斷這段呢? ans:這是您的sub vv內讀取client端送來的 是您自己寫的如下: sub vv { if ($ENV{'REQUEST_METHOD'} eq "POST") { if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("負重"); } read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach (@pairs) { ($name,$value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/\"/"/g; $value =~ s/\r//g; $value =~ s/\n//g; $in{$name} = $value; } $mode = $in{'mode'}; } 我原先給您的可沒這麼寫,可能是您抄來的15行,我只是配合您,我只有四行就ok如下: $length = $ENV{'CONTENT_LENGTH'}; read(STDIN,$checkbox,$length); ($checkdata,$mode) =split(/mode=/,$checkbox); @checkboxvalue=split(/&/,$checkdata); 您明知道您程式那是post,為何還要寫判斷是get或post,我都弄不懂 且傳來的值一定是類似下列這樣(您名子取名是item,值是0-4,mode是故定bb) item=0&item=1&mode=bb 都弄不懂您在那邊替換$value =~ s/</</g;倒斜線換程<指令不知要做甚麼(因為跟本不會傳回那種值,我也懶得跟您改回來,因不影響程式執行 配合您的@pairs 因為$buffer值是item=0&item=1&mode=bb 程式@pairs = split(/&/, $buffer); 因此pairs陣列會變成{"item=0","item=1","mode=bb"} 因此 foreach (@pairs) { ($a,$b)=split(/=/); if ($a=~/mode/){ } 就是說會有三次,第1次取的是a$="item",$b="0" 第2次取的是a$="item",$b="1" 第3次取的是a$="mode",$b="bb" 因此還要再判段a$是否mode若是的話,那是隱藏欄位要跳過(因不是選項) 還有 <B>$item[$b]</B> 為什麼要用[$b]而不用$[a] 和為什麼$item[$b]的$item要用($item[$j],$itemsay[$j]) = split(/<>/); 的$item而不是用$itemsay,變成<B>$itemsay[$b]</B> 呢 ans:如上面a$="item"當然不能當索引,b$="0"到"3"當然要用$item[$b} 要用$item不用$itemsay,是因為讀取的有選項(例蘋果)及說明,當然要用選項呀.
本篇文章回覆於2012-01-30 12:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |