掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ウェブブラウザコントロールから、Submitボタンとかでフォームないようを受け取るには? (ID:75078)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
参考までに・・・ VBを使ったCGIの例です。 根性がないので、今回は環境変数経由で取得してます。 ついでにBCC(Borland C++)の例もあげてます。 適当に作ってますから、エラー処理してません。(^_^; テストにあたっては、HTTPサーバ(Apache,IISなど)を立てて、 CGIの設定をしてください。そして、CGI用フォルダに コンパイル済みのEXEファイルを置き、 WebフォルダにHTMLファイルを置いて、 CGIMenu.htmlをダブルクリックして実行してください。 コンパイル時の注意 エラー処理してませんので、コンパイル前のソースを エディトモードで実行したり、 EXEファイルを直接実行したりしないでください。 メモリアクセス違反で落ちます。 VBコンパイル時の注意 起動時にデフォルトで用意されるFormモジュールを開放し、 かわりに標準モジュールを用意して、その中に コードを書いて、コンパイルしてください。 BCCコンパイル時の注意。 とくになし。 ふだんWinアプリばかり作っている人は -Wオプションはずすの忘れずに・・・。 ========================================================= 呼出元HTMLの呼出元ソースの例(CGIMenu.html) --------------------------------------------------------- <html> <head> <title>CGIてすと</title> </head> <body> <center><h1>CGIてすとめにゅー<br></h1></center> <a href="http://localhost/~say_home/VBCGITest.html">VBCGITest</a><br> <a href="http://localhost/~say_home/BCCCGITest.html">BCCCGITest</a><br> </body> </html> ========================================================= VB呼出元HTMLソース(VBCGITest.html) --------------------------------------------------------- <HTML> <HEAD> <TYTLE>VB CGI TEST<BR><BR></TYTLE> </HEAD> <BODY> <center><h1>VB CGI TEST</h1></center><br><br> 入力: <FORM method="get" enctype="text/plain" action="cgi-bin/VBCGI01.exe"> Text1:<INPUT type="text" name="Text1" value="aaa" size="14" maxlength="14"><BR><BR> Text2:<INPUT type="text" name="Text2" value="bbb" size="14" maxlength="14"><BR><BR> <INPUT type="submit" value="VBCGIGET"><BR> <INPUT type="reset" value="キャンセル"> </FORM> <BR> </BODY> </HTML> ========================================================= BCC呼出元HTMLソース(BCCCGITest.html) --------------------------------------------------------- <HTML> <HEAD> <TYTLE>BCC CGI TEST<BR><BR></TYTLE> </HEAD> <BODY> <center><h1>BCC CGI TEST</h1></center><br><br> 入力: <FORM method="get" enctype="text/plain" action="cgi-bin/BCCCGI01.exe"> Text3:<INPUT type="text" name="Text3" value="ccc" size="14" maxlength="14"><BR><BR> Text4:<INPUT type="text" name="Text4" value="ddd" size="14" maxlength="14"><BR><BR> <INPUT type="submit" value="BCCCGIGET"><BR> <INPUT type="reset" value="キャンセル"> </FORM> <BR> </BODY> </HTML> ========================================================= VB CGI ソース(コンパイル後は VBCGI01.exe) --------------------------------------------------------- Option Explicit '標準入出力用の宣言部 Private Declare Function GetStdHandle Lib "kernel32" _ (ByVal nStdHandle As Long) As Long Private Declare Function ReadFile Lib "kernel32" _ (ByVal hFile As Long, lpBuffer As Any, _ ByVal nNumberOfBytesToRead As Long, _ lpNumberOfBytesRead As Long, _ lpOverlapped As Any) As Long Private Declare Function WriteFile Lib "kernel32" _ (ByVal hFile As Long, ByVal lpBuffer As String, _ ByVal nNumberOfBytesToWrite As Long, _ pNumberOfBytesWritten As Long, _ lpOverlapped As Any) As Long Public Const STD_INPUT_HANDLE = -10& Public Const STD_OUTPUT_HANDLE = -11& Public Const INVALID_HANDLE_VALUE = -1& Dim mlngStdInHandle As Long Dim mlngStdOutHandle As Long Private Function stdinit() As Long '標準入出力ハンドル取得 Dim lngStdInHandle As Long Dim lngStdOutHandle As Long mlngStdInHandle = GetStdHandle(STD_INPUT_HANDLE) If mlngStdInHandle = INVALID_HANDLE_VALUE Then MsgBox "Error STD_INPUT_HANDLE" End If mlngStdOutHandle = GetStdHandle(STD_OUTPUT_HANDLE) If mlngStdOutHandle = INVALID_HANDLE_VALUE Then MsgBox "Error STD_OUTPUT_HANDLE" End If End Function Private Function puts(strOutString As String) As Long '標準出力 Dim lngStringLength As Long Dim lngResultBytes As Long Dim Buffer As String strOutString = strOutString & vbCrLf lngStringLength = LenB(StrConv(strOutString, vbFromUnicode)) + 2 puts = WriteFile(mlngStdOutHandle, strOutString, lngStringLength, lngResultBytes, ByVal 0&) End Function Private Function gets(strInString As String) As Long '標準入力 Dim lngStringLength As Long Dim lngResultBytes As Long Dim dummy0 Dim faleMsg As String faleMsg = "Sorry&" dummy0 = Environ("CONTENT_LENGTH") If IsNumeric(dummy0) = False Then strInString = faleMsg & "NotNumeric" gets = 0 Else lngStringLength = CLng(dummy0) If lngStringLength > 0 Then strInString = Space(lngStringLength) gets = ReadFile(mlngStdInHandle, strInString, lngStringLength, lngResultBytes, ByVal 0&) Else strInString = faleMsg & "NullString" gets = 0 End If End If End Function Private Function ReadHTML(array0) Dim strInString As String If Environ("REQUEST_METHOD") = "GET" Then '環境変数で取得 array0 = Split(Environ("QUERY_STRING"), "&") ElseIf Environ("REQUEST_METHOD") = "POST" Then '標準入力で取得 '標準入力で取得 Call gets(strInString) array0 = Split(strInString, "&") Else 'GET POST 以外 array0 = Split("Sorry&Cant Get", "&") End If End Function Private Function WriteHTML(array0) ' MsgBox "put now" ' puts "HTTP/1.1 200 OK" & vbCrLf puts "content-type: text/html" puts "" puts "<html>" puts " <head>" puts " <title>" puts " たいとる" puts " </title>" puts " </head>" puts " <body>" puts " <center><h1>VBCGIなかみ</h1></center><br>" puts " <hr>" puts array0(0) & "<br>" puts array0(1) & "<br>" puts " </body>" puts "</html>" End Function Sub Main() Dim array0 Call stdinit Call ReadHTML(array0) Call WriteHTML(array0) End Sub ========================================================= BCC CGI ソース(コンパイル後は BCCCGI01.exe) --------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> void ReadHTML(char *array0,int *array1) { //HTML Formからのデータリード //今回はGETのみ対応 int i ; strcpy(array0, getenv("QUERY_STRING")); for(i = 0;i<256;i++) { if(*(array0 + i) == '&') { *(array0 + i) = '\0'; *array1 = (int)array0 + i + 1; break ; }; }; }; void WriteHTML(char *array0,char *array1) { puts("content-type: text/html\n"); puts("<html>"); puts(" <head>"); puts(" <title>"); puts(" たいとる"); puts(" </title>"); puts(" </head>"); puts(" <body>"); puts(" <center><h1>BCCCGIなかみ</h1></center><br>"); puts(" <hr>"); puts(array0);puts("<br>"); puts(array1);puts("<br>"); puts(" </body>"); puts("</html>"); } void main(void) { char array0[256]; int array1; ReadHTML(array0,&array1); WriteHTML(array0,(char *)array1); } ========================================================= 感想:こーゆー処理はCのほうがらくだ。(^_^)
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.