三流君ASPで遊ぶ、失敗する

[三流君] Top ken3.orgへ
[ASP解説] ASPの解説TOP
[ASP記事 バックナンバー] 番号順のバックナンバー
[SOHO/在宅プログラマー/派遣] 派遣のお話ほか
[...サイトマップ(総合案内へ)]




分類別ガイド
ADOで[ADO Mdb接続] ,[ADO Excel接続] ,[ADO CSV接続]

[ASP Form データのやりとりPOSTとGET]
[ASPでTextFile操作]
[ASPでVBScriptを使う]
[その他サンプル]

バックナンバー No.5 〜 No.9


No.5 2002/11/24
IsEmptyでデータチェック
[ページTOPへ戻る]
<IsEmptyでデータチェック>

こんにちは、Ken3です。

前回、
ファームから値を受けとって処理を行いました。
今回は、
IsEmptyでデータの入力をチェックして、
未入力なら(初回の呼び出しなら)、
入力用のフォーム
入力済みなら(2回目の呼び出しなら)
結果の判断
と1つのASPで処理してみたいと思います。

/*
 * 1.仕様
*/
asp側の処理

始めての呼び出しだったら、
フォームを作成して、自分自身を呼び出すボタンを作成。
入力項目は
テキストボックスで
名前、
チェックボックスで、やりたいことをチェックさせ、
□HTMLから詳しく丁寧に
□VBScriptをもっと詳しく
□ゲーム作ろうよ
RADIOボタンで、満足度を選択。

フォーム入力後の2回目だったら、
単純にパラメーターの値を表示する
if文でチェックされた値を確認しメッセージ表示する

/*
 * 2.IsEmptyでデータチェック
*/

サンプルのソースを下記に載せます
http://www.ken3.org/cgi-bin/test/test005-1.asp
でテストできるので、確認してください。

<%@LANGUAGE=VBScript%>
<html>
<head>
<title>test IsEmptyでデータチェック</title>
</head>
<body>
<h2>IsEmptyでデータチェック  入力と処理を1つのASPで行う</h2>
test005-1.asp<br>
<%  '*1 頭で、入力パラメーターがあるかチェックする
    if IsEmpty(Request.Form("USER-NAME")) = True Then
        'そのまま下のHTMLを実行
%>
<br>
好きに入力して、送信ボタンを押してください。<br>
<FORM ACTION="test005-1.asp" METHOD="POST">

お名前:
<INPUT TYPE="text" SIZE="20" NAME="USER-NAME" VALUE="匿名希望">
<br>
<br>
このメルマガでやってほしいことにチェックを入れてください<br>
<INPUT TYPE="CHECKBOX" NAME="c_1" VALUE="on">HTMLから詳しく丁寧に<BR>
<INPUT TYPE="CHECKBOX" NAME="c_2" VALUE="on">VBScriptをもっと詳しく<BR>
<INPUT TYPE="CHECKBOX" NAME="c_3" VALUE="on">ゲーム作ろうよ<BR>
<br>
このメルマガの満足度を5段階で<br>
不満 ------ 満足<br>
1<INPUT TYPE="RADIO" NAME="q_5" VALUE="1">
2<INPUT TYPE="RADIO" NAME="q_5" VALUE="2">
3<INPUT TYPE="RADIO" NAME="q_5" VALUE="3">
4<INPUT TYPE="RADIO" NAME="q_5" VALUE="4">
5<INPUT TYPE="RADIO" NAME="q_5" VALUE="5">
<br>
<br>
<br>
<INPUT TYPE="submit" VALUE="送 信">
<INPUT TYPE="reset"  VALUE="入力し直す">

</FORM>

<% 'データが入力されていたら、
    else
		'そのまま、テキストを表示する
		Response.Write Request.Form("USER-NAME")
		Response.Write "さん、入力どうもです。<br>"

		'チェックボックスonの時メッセージを表示する
		if Request.Form("c_1") = "on" then
			Response.Write "HTMLかぁ、ニガテなんだよね<br>"
		end if
		if Request.Form("c_2") = "on" then
			Response.Write "VBScript、まぁ一歩一歩やりましょうよ<br>"
		end if
		if Request.Form("c_3") = "on" then
			Response.Write "えっ、ゲーム作成?ムリムリ<br>"
		end if

		'RADIOボタン、中身表示と値を判断してメッセージ表示
		Response.Write "満足度は"
		Response.Write Request.Form("q_5")
		Response.Write "かぁ、、、"
		if Request.Form("q_5") <= 2 then  '2以下は不満にする
			Response.Write "不満かぁ、がんばらないと"
		end if
		if Request.Form("q_5") >= 4 then  '4以上満足なら
			Response.Write "よかったぁ〜一安心"
		end if
		Response.Write "<br>"
    end if   '長いIf文もここで終わり
%>

<HR>
終了です。なんか変だけど<br>

</body>
</html>

ポイントは、
if IsEmpty(Request.Form("USER-NAME")) = True Then
の部分です。

IsEmptyで変数が初期化されているかをチェックします。
Trueの時は、変数が生成されていないので、
1回目の呼び出しと判断して、
そのまま下のFORMタグの表示を行います。

さらに下の部分(次の<%)で、
<% 'データが入力されていたら、
    else
・
・
・
%>
で結果の判断処理を行ってます。

/*
 * 3.長いIf文は私はキライかなぁ、、、
*/

1つのASPで入力と結果の判断を行ってますが、
なんかIf文が長い。

前回のHTMLとASPにわかれているほうがスッキリしてるかも。
あと、自分でも半信半疑で行ったのですが、

<%  '*1 頭で、入力パラメーターがあるかチェックする
    if IsEmpty(Request.Form("USER-NAME")) = True Then
        'そのまま下のHTMLを実行
%>
・
・
・
・
<%
    else
・
・
・
    end if
%>

と、If文のブロックが分断されていても動作するのはチト、ビックリ。
だからわかりにくいって説も有るけど。

書き方としては、どうなんだろうねぇ。。。

/*
 * 4.終わりの挨拶
*/

で、今日は何が言いたかったの?
・IsEmptyでデータをチェックすることができます
・If文のブロックが分断されていても動作するのはチト、ビックリした。
こんな感じかな。

またね(笑)

何か質問があったら、気軽に、
メール、掲示板に書き込んでくださいね。

三流プログラマーのKen3でした。


No.6 2002/11/26
データをテキストファイルに書き込む
[ページTOPへ戻る]
<データをテキストファイルに書き込む>

こんにちは、Ken3です。

今回は、
データをテキストファイルに書き込んでみたいと思います。

/*
 * 1.仕様
*/
aspの処理

呼び出だされたら、
test006.txtを追加モードで開き、
現在の時刻を書き込む。
結果を見るためにtest006.txtへのリンクを書く。

/*
 * 2.データをテキストファイルに書き込む
*/

http://www.ken3.org/cgi-bin/test/test006-1.asp
でテストできるので、確認してください。

サンプルのソースを下記に載せます

<%@LANGUAGE=VBScript%>
<html>
<head>
<title>test テキストファイルに書き込み</title>
</head>
<body>
<h2>データをテキストファイルに書き込む</h2>
test006-1.asp<br>
<hr>

<%
'*1 FileSystemObjectを生成します、、って英文、そのままジャン。
Set objFS = Server.CreateObject("Scripting.FileSystemObject")

'*2 test006.txt を追加モードで開く
Set ts = objFS.OpenTextFile(Server.MapPath("test006.txt"), 8, True)

'*3ファイルにデータを書き込む
ts.write "test006-1.asp アクセス時刻は、" & Now
ts.write chr(13) & chr(10)

'*4使ったファイルは閉じようよ
ts.close

%>
<hr>
書き込み終了です。<br>
<A HREF="test006.txt">test006.txtを見る</A><br>
</body>
</html>

ポイントは、
'*1 FileSystemObjectを生成します、、って英文、そのままジャン。
Set objFS = Server.CreateObject("Scripting.FileSystemObject")
ここで、まず、ファイルシステムのオブジェクトを作成します。

次に、ファイルを開くために、
.OpenTextFileを使用します。

'*2 test006.txt を追加モードで開く
Set ts = objFS.OpenTextFile(Server.MapPath("test006.txt"), 8, True)

パラメーターは、
.OpenTextFile(ファイルの絶対パス, モード, ファイルの新規作成)
なので、
ファイルのサーバー上での絶対パスを知りたいので、
Server.MapPath("test006.txt")
で、ファイル名を渡すと、
フォルダー+ファイル名のサーバー上の絶対パスを返してくれます。

モードは、お決まりで、
1 読み取り専用
2 書き込み専用
8 追記(ファイルの末尾から追加書き込み)

'*3ファイルにデータを書き込む
ts.write "test006-1.asp アクセス時刻は、" & Now
ts.write chr(13) & chr(10)

ここも見たままで、
.writeで文字を書きこんでます。
変化が見たいので、& Nowで現在時刻を書き出してます。

'*4使ったファイルは閉じようよ
ts.close
これもお約束で、開けたら閉めるの
.close
です。

<A HREF="test006.txt">test006.txtを見る</A><br>
で
http://www.ken3.org/cgi-bin/test/test006.txt
にリンクを貼ってます。(テスト結果が見やすいように)

/*
 * 3.Server.MapPath("test006.txt")のテスト
*/
実際にサーバーに格納されている絶対パスを表示させるために、
Server.MapPath("test006.txt")
を使いました。

http://www.ken3.org/cgi-bin/test/test006-2.asp
で
下記のテストプログラムを実行できます。

<%@LANGUAGE=VBScript%>
<html>
<head>
<title>Server.MapPath("test006.txt")のテスト</title>
</head>
<body>
<h2>Server.MapPath("test006.txt")のテスト</h2>
test006-2.asp<br>
<hr>
Server.MapPath("test006.txt")とやると<br>
<%=Server.MapPath("test006.txt")%>
<br>
を返します。<br>
<hr>
<br>
以上、簡単なテストでした。

</body>
</html>


簡単に、
<%=
でリターン値を表示してみました。

/*
 * 4.終わりの挨拶
*/

今日やっと、サーバー上のファイルに書き込みを行いました。
まだまだ、道のりは遠いなぁ〜

またね(笑)

何か質問があったら、気軽に、
メール、掲示板に書き込んでくださいね。

三流プログラマーのKen3でした。


No.7 2002/12/02
ブラウザ(端末情報)をGetする
[ページTOPへ戻る]
<ブラウザ(端末情報)をGetする>

こんにちは、Ken3です。

今回は、
訪問したユーザーのブラウザ(端末情報)を表示
して、遊びたいと思います。

/*
 * 1.訪問したユーザーのブラウザ(端末情報)を表示する
*/

自分のHPへどんな人が来てくれたのか知りたくないですか?
えっ、気にならないって?
それだと、話しが終わってしまうので、付き合ってくださいよ(笑)

単純に書くと、
Request.ServerVariables(項目名)
とやると、いろいろな値が取れます。

今、私がほしい、訪問者の情報としては、
IPアドレス、アクセスした端末の情報なんかがほしいなぁ、、、
と心の中で願っても誰も助けてくれないので、
本やネットなどで調べてみると、
Request.ServerVariables("REMOTE_ADDR")で、IPアドレス
Request.ServerVariables("HTTP_USER_AGENT")で、端末の情報
がGetできるみたいです。

簡単なテストプログラムを書いてみました。

<%@LANGUAGE=VBScript%>
<html>
<head>
<title>訪問したユーザーのブラウザ(端末情報)を表示する</title>
</head>
<body>
<h2>訪問したユーザーのブラウザ(端末情報)を表示する</h2>
test007-1.asp<br>
<hr>
簡単にテストすると、<br>
Request.ServerVariables("HTTP_USER_AGENT")は、
<%=Request.ServerVariables("HTTP_USER_AGENT")%>
<br>
Request.ServerVariables("REMOTE_ADDR")は、
<%=Request.ServerVariables("REMOTE_ADDR")%>
<hr>
終了です。<br>
どんな感じでした?
</body>
</html>

http://www.ken3.org/cgi-bin/test/test007-1.asp
でテストできます。

自分のマシーンでテストすると、

訪問したユーザーのブラウザ(端末情報)を表示する
test007-1.asp

--------------------------------------------------------------------------
簡単にテストすると、
Request.ServerVariables("HTTP_USER_AGENT")は、 Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) 
Request.ServerVariables("REMOTE_ADDR")は、 202.217.96.222 
--------------------------------------------------------------------------
終了です。
どんな感じでした? 

と画面に表示されます。
まぁ、テストとしては、OKかなぁ。

Request.ServerVariables("HTTP_USER_AGENT")
Request.ServerVariables("REMOTE_ADDR")

使ってみようかな。

-- 蛇足な解説 --

IPドメインSEARCH  
http://www.mse.co.jp/ip_domain/
で
202.217.96.222
を検索すると、

あなたが検索されたアドレス[ 202.217.96.222 ]のJPNICからの応答は以下の通りです。 

Network Information: [ネットワーク情報] 
a. [IPネットワークアドレス] 202.217.96.0-202.217.127.0 
b. [ネットワーク名] MBN 
f. [組織名] ドリームネット株式会社 
g. [Organization] DreamNet Corporation 
m. [運用責任者] SM1912JP 
n. [技術連絡担当者] KK1341JP 
p. [ネームサーバ] ns.mbn.or.jp 
p. [ネームサーバ] ns2.mbn.or.jp 
[割当年月日] 1996/03/08 
[最終更新] 2001/04/23 11:47:26 (JST) 

と、IPアドレスから登録データを検索することができます。
ファイルなどに保存しておけば
常連さんはどんな人?
使用しているブラウザの種類
などを少し探ることが出来るかなぁ。
まぁ、そんなにヒマじゃないんだろうけどね。

*実際は掲示板の荒らし行為や何かあった時しか調べないと思うけど。

/*
 * 2.他に取得可能な値を見てみたい。
*/

Request.ServerVariables("HTTP_USER_AGENT")
Request.ServerVariables("REMOTE_ADDR")
で値の取得は、なんとなくわかったけど、
そのほかにどんなの?あるの?

う〜ん、私もよくわからないので、
For Each でServerVariables の名前を 表示してみました。

<%@LANGUAGE=VBScript%>
<html>
<head>
<title>For Each でServerVariablesを表示してみる</title>
</head>
<body>
<h2>For Each でServerVariablesの項目を表示してみる</h2>
test007-2.asp<br>
<hr>
どんな項目が存在するのかチェックするために、<br>
For Each でServerVariablesの項目を表示してみました。<br>
<%  'ここからスクリプト
    For Each objSV In Request.ServerVariables            'For Each でループ
        Response.Write "<P>" & objSV & "↓<br>"          '名前を表示
        Response.Write Request.ServerVariables(objSV)    '中身を表示
    Next
%>
<hr>
終了です。<br>
どんな感じでした?
</body>
</html>

For Each objSV In Request.ServerVariables 
で
オブジェクトの中をサーチして、
そのまま、
Response.Write "<P>" & objSV & "↓<br>"          '名前を表示
Response.Write Request.ServerVariables(objSV)    '中身を表示
で、項目名と中身を表示してます。

http://www.ken3.org/cgi-bin/test/test007-2.asp
をテストすると下記のようになります。テスト結果は、(長いです)

For Each でServerVariablesの項目を表示してみる
test007-2.asp

----------------------------------------------------------------------------
どんな項目が存在するのかチェックするために、
For Each でServerVariablesの項目を表示してみました。

ALL_HTTP↓
HTTP_ACCEPT:*/* HTTP_ACCEPT_LANGUAGE:ja HTTP_CONNECTION:Keep-Alive
 HTTP_HOST:www.ken3.org HTTP_USER_AGENT:Mozilla/4.0 (compatible; M
SIE 6.0; Windows 98) HTTP_COOKIE:ASPSESSIONIDSSQSSDAT=NJMAKNPAEBAP
MCGKHBMOOIMG HTTP_ACCEPT_ENCODING:gzip, deflate 

ALL_RAW↓
Accept: */* Accept-Language: ja Connection: Keep-Alive Host: www.k
en3.org User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
 Cookie: ASPSESSIONIDSSQSSDAT=NJMAKNPAEBAPMCGKHBMOOIMG Accept-Enco
ding: gzip, deflate 

APPL_MD_PATH↓
/LM/W3SVC/173/Root

APPL_PHYSICAL_PATH↓
d:\users\ken3_org\

AUTH_PASSWORD↓


AUTH_TYPE↓


AUTH_USER↓


CERT_COOKIE↓


CERT_FLAGS↓


CERT_ISSUER↓


CERT_KEYSIZE↓


CERT_SECRETKEYSIZE↓


CERT_SERIALNUMBER↓


CERT_SERVER_ISSUER↓


CERT_SERVER_SUBJECT↓


CERT_SUBJECT↓


CONTENT_LENGTH↓
0

CONTENT_TYPE↓


GATEWAY_INTERFACE↓
CGI/1.1

HTTPS↓
off

HTTPS_KEYSIZE↓


HTTPS_SECRETKEYSIZE↓


HTTPS_SERVER_ISSUER↓


HTTPS_SERVER_SUBJECT↓


INSTANCE_ID↓
173

INSTANCE_META_PATH↓
/LM/W3SVC/173

LOCAL_ADDR↓
210.169.90.5

LOGON_USER↓


PATH_INFO↓
/cgi-bin/test/test007-2.asp

PATH_TRANSLATED↓
d:\users\ken3_org\cgi-bin\test\test007-2.asp

QUERY_STRING↓


REMOTE_ADDR↓
202.217.96.90

REMOTE_HOST↓
202.217.96.90

REMOTE_USER↓


REQUEST_METHOD↓
GET

SCRIPT_NAME↓
/cgi-bin/test/test007-2.asp

SERVER_NAME↓
www.ken3.org

SERVER_PORT↓
80

SERVER_PORT_SECURE↓
0

SERVER_PROTOCOL↓
HTTP/1.1

SERVER_SOFTWARE↓
Microsoft-IIS/5.0

URL↓
/cgi-bin/test/test007-2.asp

HTTP_ACCEPT↓
*/*

HTTP_ACCEPT_LANGUAGE↓
ja

HTTP_CONNECTION↓
Keep-Alive

HTTP_HOST↓
www.ken3.org

HTTP_USER_AGENT↓
Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)

HTTP_COOKIE↓
ASPSESSIONIDSSQSSDAT=NJMAKNPAEBAPMCGKHBMOOIMG

HTTP_ACCEPT_ENCODING↓
gzip, deflate 


----------------------------------------------------------------------------
終了です。
どんな感じでした? 

長過ぎ、ここまで、ついてきたマジメな読者さん、どれくらい居るのだろう?
少し心配になってきた(笑)

よく見ると、データが入っていない項目とかあります。
使えそうな項目は、

Request.ServerVariables("項目名")
で
使ってみてください。

/*
 * 3.テキストファイルにIPアドレスを書き込む
*/

あたりまえの話ですが、
ユーザーに表示させただけでは、何も残らないので、
私が知るために、テキストファイルに書いてみたいと思います。

アクセスされた時刻とユーザーのIPとブラウザの種類を

http://www.ken3.org/cgi-bin/test/test007.txt
に保存してみたいと思います。

http://www.ken3.org/cgi-bin/test/test007-3.asp
を実行すると、
test007.txt に追記されます。
*みんなに公開しているのでIPアドレスが固定の常時接続の人や
 会社などからアクセスする人は証拠が残るので(ほかの人も見れるので)
 注意して実行してみてください。

あっ、ソースの解説忘れた(笑)
ASPのソースを下記に載せます。

<%@LANGUAGE=VBScript%>
<html>
<head>
<title>テキストファイルにIPアドレスを書き込む</title>
</head>
<body>
<h2>テキストファイルにIPアドレスを書き込む</h2>
test007-3.asp<br>
<hr>
<%
'*1 FileSystemObjectを生成します、、って英文、そのままジャン。
Set objFS = Server.CreateObject("Scripting.FileSystemObject")

'*2 test007.txt を追加モードで開く
Set ts = objFS.OpenTextFile(Server.MapPath("test007.txt"), 8, True)

'*3ファイルにデータを書き込む
ts.write "test007-3.asp アクセス時刻は、" & Now & " , "  '時刻を書く
ts.write Request.ServerVariables("REMOTE_ADDR") & " , "  'IPアドレス
ts.write Request.ServerVariables("HTTP_USER_AGENT")    'ブラウザ情報
ts.write chr(13) & chr(10)

'*4使ったファイルは閉じようよ
ts.close

%>
<hr>
書き込み終了です。<br>
<A HREF="test007.txt">結果のtest007.txtを見る</A><br>

</body>
</html>

前回解説したファイルの書き込みに、
ts.write Request.ServerVariables("REMOTE_ADDR") & " , "  'IPアドレス
で参照した値を書いただけです。

test007-3.asp アクセス時刻は、2002/12/02 11:38:51 , 203.182.79.210
 , Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
test007-3.asp アクセス時刻は、2002/12/02 12:20:23 , 210.168.199.42
 , PDXGW/1.0 (TX=12;TY=11;GX=120;GY=416;C=CF-;G=J2;GI=2)
test007-3.asp アクセス時刻は、2002/12/02 12:21:53 , 203.182.194.1
 , Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90)
test007-3.asp アクセス時刻は、2002/12/02 12:42:32 , 210.136.161.38
 , DoCoMo/1.0/N210i/c10

と無事に書き込むことができました。
携帯電話のIモード端末からアクセスしても動作しました。
DoCoMo/1.0/N210i/c10
って書き込めたのは少し感動かなぁ。

ASPファイルが見れたのは、そんなビックリすることじゃないのか。
ささやかな感動を自作自演している自己満足なKen3でした(笑)

Jフォンの人がテストで
http://www.ken3.org/cgi-bin/test/test007-3.asp
を表示してくれると嬉しいなぁ・・・と独り言書いてみたりして。

次は何やろうかなぁ、、、ハヤク何か面白いの作りたいですよね。

/*
 * 4.終わりの挨拶
*/

なんとなく、わかったような、わからなかったような。
まだまだ、道のりは遠いなぁ〜

アクセスしてきた人の情報を探るでした。
またね(笑)

何か質問があったら、気軽に、
メール、掲示板に書き込んでくださいね。

三流プログラマーのKen3でした。

No.8 2002/12/05
URLに付けたパラメータを参照(クエリ情報)
[ページTOPへ戻る]
<URLに付けたパラメータを参照(クエリ情報)>

こんにちは、Ken3です。

今回は、
URLに付けたパラメータを参照(クエリ情報)
を軽くやって見たいと思います。

/*
 * 1.よく見かけると思う、URLのパラメーター
*/

下記、まぐまぐのバックナンバーを表示させるページです
http://backno.mag2.com/reader/Back?id=0000099248
http://backno.mag2.com/reader/Back?id=0000098566

よく見ると、
〜?id=0000099248
と、IDを渡して、処理してるぽいですよね。

あと、アンケート処理で、
はい   http://XXXX.xXx.xx/cgi-bin/a.cgi?a=1
いいえ http://XXXX.xXx.xx/cgi-bin/a.cgi?a=2
と
どちらかをクリックさせて、集計用のページを表示させる。

/*
 * 2.じゃ、ASPで受け取る方法は?
*/

さて、人様がやってるんだから、自分もできるだろう
どうやるんだろう?
と探りを入れたくなりましたよね。

まずは、前回、ブラウザ(端末情報)をGetする
なんてやってましたね、ここにパラメーターを渡して見ると。

In message "[ASPで遊ぶ No.007] - ブラウザ(端末情報)をGetする",
 >http://www.ken3.org/cgi-bin/test/test007-2.asp 
 >をテストすると下記のようになります。テスト結果は、(長いです)

?とパラメーターID=123を追加してみるか
http://www.ken3.org/cgi-bin/test/test007-2.asp?ID=123
↑のページに飛ぶと、
ServerVariablesの項目が表示されます。

ざっと項目を上から見てみると、

QUERY_STRING↓
ID=123


おっ、この項目、使えそうだなぁ。 http://www.ken3.org/cgi-bin/test/test007-2.asp?ID=123&MODE=ON だと、 QUERY_STRING ID=123&MODE=ON かぁ、 使えそうだけど、項目をバラすのがダルそう。
何か無いのかなぁ。 /* * 3.Request.QueryString でクエリ情報を取り出す */ 世の中には(ASPには)、 Request.QueryStringってのがあって、それで簡単に取り出せるみたいです。 http://www.ken3.org/cgi-bin/test/test008-1.asp?ID=123&MODE=ON で、IDとMODEを表示するサンプル test008-1.asp は、 下記のようになります。 <head> <title>Request.QueryString でクエリ情報を取り出す</title> </head> <body> <h2>Request.QueryString でクエリ情報を取り出す</h2> test008-1.asp<br> <hr> クエリ情報で渡されたIDとMODEを表示します<br> ID= <%=Request.QueryString("ID")%><br> <% if Request.QueryString("MODE") = "ON" then Response.Write "オンです。" else Response.Write "オフです。" end if %> <hr> 終了です。<br> </body> </html> IDの値を表示とMODE=ONならカタカナでオン、それ以外だったらオフと表示します。 http://www.ken3.org/cgi-bin/test/test008-1.asp?ID=123&MODE=ON http://www.ken3.org/cgi-bin/test/test008-1.asp?ID=987&MODE=OFF で、試してください。 /* * 4.復習を兼ねて、ファイルに書いてみる */ 目的(システムには目的ってありますよね) メルマガの満足度3段階をアンケートしたい。 1.満足 2.普通 3.不満 を読者さんに聞く プログラムの仕様 test008-2.asp で、A=回答のパラメーターを受け取り(test008-2.asp?A=1みたいに) test008.txt に 結果を書き込む。 復習兼ねて、前回までのプログラムを簡単に修正して下記のように作りました。 <%@LANGUAGE=VBScript%> <html> <head> <title>テキストファイルにアンケート結果を書き込む</title> </head> <body> <h2>テキストファイルにアンケート結果を書き込む</h2> test008-2.asp<br> <hr> <% '*1 FileSystemObjectを生成します、、って英文、そのままジャン。 Set objFS = Server.CreateObject("Scripting.FileSystemObject") '*2 test008.txt を追加モードで開く Set ts = objFS.OpenTextFile(Server.MapPath("test008.txt"), 8, True) '*3ファイルにアンケート結果のデータを書き込む ts.write Now & " , " '時刻を書く 'アンケートの結果を判断する strMSG = "不正なパラメーターです" if Request.QueryString("A") = "1" then strMSG = "満足" if Request.QueryString("A") = "2" then strMSG = "普通" if Request.QueryString("A") = "3" then strMSG = "不満" ts.write strMSG 'ファイルに結果を書き込む ts.write chr(13) & chr(10) '改行する '*4使ったファイルは閉じようよ ts.close Response.Write "パラメーターは" & strMSG & "でした" '表示もついでに行う %> <hr> 書き込み終了です。<br> <A HREF="test008.txt">結果のtest008.txtを見る</A><br> </body> </html> ポイントは、今回やった、Request.QueryStringで、 if Request.QueryString("A") = "1" then strMSG = "満足" if Request.QueryString("A") = "2" then strMSG = "普通" if Request.QueryString("A") = "3" then strMSG = "不満" のIf文で判断してます。 さて、よくあるアンケートです 今回の内容は、 満足 http://www.ken3.org/cgi-bin/test/test008-2.asp?A=1 普通 http://www.ken3.org/cgi-bin/test/test008-2.asp?A=2 不満 http://www.ken3.org/cgi-bin/test/test008-2.asp?A=3 どんな感じですか?(笑) テストで押してみて下さい。
結果は、成功してれば、 http://www.ken3.org/cgi-bin/test/test008.txt で見ることができます。(テキストファイルに書かれていると思います) /* * 5.終わりの挨拶 */ 今回は、 Request.QueryString でした。 まぁなんとなく、わかったような、わからなかったような。 まだまだ、道のりは遠いなぁ〜 またね(笑)

No.9 2002/12/06
FORM ACTION="XXX.asp" METHOD="GET" を使用
[ページTOPへ戻る]
<FORM ACTION="XXX.asp" METHOD="GET" を使用>

こんにちは、Ken3です。

今回は、
FORM ACTION="XXX.asp" METHOD="GET"
で フォームの値を渡したいと思います。

/*
 * 1.何で?METHOD="GET"を使おうと思ったのアナタは?
*/
いきなり三流君に質問かますけど、
なんで、アンタは、
METHOD="GET"を使おうと思ったの?
発行回数稼ぎか?

えっと、フォームの値を受け取る方法は、
http://www.ken3.org/cgi-bin/test/test004-1.html
のHTML中で、
好きに入力して、送信ボタンを押してください。<br>
<FORM ACTION="http://www.ken3.org/cgi-bin/test/test004-1.asp" METHOD="POST">
・
・
・
受け取るには、
基本は簡単で、
Request.Form("フォームの項目名")
で受け取れます。
と解説してました。
( http://www.ken3.org/backno/backno_asp01.html#4  に詳細有り )

それでいいんじゃない?
METHOD="POST"が普通って、本やどこかにも書いてあったような気がするけど。

このメルマガの満足度を5段階で<br>
不満 ------ 満足<br>
1<INPUT TYPE="RADIO" NAME="q_5" VALUE="1">
2<INPUT TYPE="RADIO" NAME="q_5" VALUE="2">
3<INPUT TYPE="RADIO" NAME="q_5" VALUE="3">
4<INPUT TYPE="RADIO" NAME="q_5" VALUE="4">
5<INPUT TYPE="RADIO" NAME="q_5" VALUE="5">

とか、解説でやってたよね。
で、ASP側では、
	if Request.Form("q_5") <= 2 then  '2以下は不満にする
と判断して動いてたジャン。

/*
 * 2.メルマガのアンケートとホームページ上のアンケートを一緒にしたかった
*/

えっと、理由は簡単で、正直に言うと発行数稼ぎです(うそ)
じゃなくって、
メルマガのアンケート
と
ホームページ上のアンケートを一緒にしたかったんです。

えっ、何?それ?

前回、
よく見かけるアンケート処理で、
In message "[ASPで遊ぶ No.008] - URLに付けたパラメータを参照(クエリ情報)",
 >さて、よくあるアンケートです
 >今回の内容は、
 >満足 http://www.ken3.org/cgi-bin/test/test008-2.asp?A=1 
 >普通 http://www.ken3.org/cgi-bin/test/test008-2.asp?A=2 
 >不満 http://www.ken3.org/cgi-bin/test/test008-2.asp?A=3 
 >どんな感じですか?(笑)

と、URLにパラメーターを書いて、
それを受けとって処理する方法をやりました。
( http://www.ken3.org/backno/backno_asp02.html#8  に詳細有り )

やったねぇ、昨日だから記憶に新しいよ。
ASP側で、
Request.QueryStringで、
if Request.QueryString("A") = "1" then strMSG = "満足" 
if Request.QueryString("A") = "2" then strMSG = "普通" 
if Request.QueryString("A") = "3" then strMSG = "不満" 
こんな感じで、URLに付けた値を取り出せるんだろ?

はい、それと、最近(今日)気が付いたのが、
フォームのMETHOD="GET"で送ると、
フォームの値をURLに載せて、ASPが呼ばれてるのに気が付いたんですよ。

はぁ?言ってる意味がわかんねぇよ。

では、実際にテストしてみます。
http://www.ken3.org/cgi-bin/test/test009-1.html
が、下記のテスト用フォーム入力です。

<html>
<head>
<title>フォームに値を入力してMETHOD="GET"でASPファイルに渡す</title>
</head>
<body>
<h2>フォームに値を入力してMETHOD="GET"でASPファイルに渡す</h2>
<br>
test009-1.html<br>
<FORM ACTION="http://www.ken3.org/cgi-bin/test/test008-2.asp" METHOD="GET">
このメルマガの満足度は?選択後、送信ボタンを押してください。<br>
1.満足<INPUT TYPE="RADIO" NAME="a" VALUE="1"><br>
2.普通<INPUT TYPE="RADIO" NAME="a" VALUE="2"><br>
3.不満<INPUT TYPE="RADIO" NAME="a" VALUE="3"><br>
<br>
<INPUT TYPE="submit" VALUE="送 信">
<INPUT TYPE="reset"  VALUE="入力クリア">
</FORM>

</body>
</html>



ポイントは、
METHOD="GET"
で、
http://www.ken3.org/cgi-bin/test/test008-2.asp
を呼び出してます。

画面のURLランを見ると、
http://www.ken3.org/cgi-bin/test/test008-2.asp?a=2
と?A=2が追加されて、ますよね。



そこから先の処理は同じなので、
メール上のアンケート
http://www.ken3.org/cgi-bin/test/test008-2.asp?A=2
と
<FORM ACTION="http://www.ken3.org/cgi-bin/test/test008-2.asp" METHOD="GET">
のブラウザでフォーム入力、
をまとめられるんじゃないかなぁと考えました。

-- 余談 --
発行前の見直しで気が付いたけど、
http://www.ken3.org/cgi-bin/test/test008-2.asp?a=2
http://www.ken3.org/cgi-bin/test/test008-2.asp?A=2
間違いに気が付いたけど、同じ動作する。
大文字と小文字のIf文の比較、今後の宿題で探らないと。

/*
 * 3.リンクのURLに書いときゃいいじゃんよ。
*/
なんとなく、アンタがGET使いたい気持ちはわかったけど、
そんなの、リンクのURLに書いときゃいいじゃんよ。

えっ、、、

えっじゃねぇよ、えっじゃ。
メルマガで下記のようにアンケート取るんでしょ。(クリックしてもらう)

>今回の内容は、
>満足 http://www.ken3.org/cgi-bin/test/test008-2.asp?A=1 
>普通 http://www.ken3.org/cgi-bin/test/test008-2.asp?A=2 
>不満 http://www.ken3.org/cgi-bin/test/test008-2.asp?A=3 
>どんな感じですか?(笑)

そうですよ、
ユーザーがURLクリックするとメーラーの機能でブラウザが起動して、
ASPでURLの後ろについたパラメーターを判断して処理します。

だったらさ、今回の処理は項目も少ないし、
HTML側もリンクにすればいいんじゃないの?
こんな感じでさ

<html>
<head>
<title>リンクのURLのパラメーターをASPファイルに渡す</title>
</head>
<body>
<h2>リンクのURLのパラメーターをASPファイルに渡す</h2>
<br>
test009-2.html<br>
<hr>
今回の内容は、<br>
<A HREF="http://www.ken3.org/cgi-bin/test/test008-2.asp?A=1">満足</A><BR>
<A HREF="http://www.ken3.org/cgi-bin/test/test008-2.asp?A=2">普通</A><BR>
<A HREF="http://www.ken3.org/cgi-bin/test/test008-2.asp?A=3">不満</A><BR>
どんな感じですか?(笑)<br>
<hr>
</body>
</html>

http://www.ken3.org/cgi-bin/test/test009-2.html
にサンプルHTMLあります。



これでも、簡単なアンケートはできるんじゃないの?

そうですねぇ、参考意見どうもありがとね。(長引きそうだなぁコイツとの話は、、)
確かに、1つの手ですよね、
URLにパラメーターを載せるんだから、リンクにそのまま書けばいい。
いろいろな場面で使えそうですね。

そうだろ、三流野郎はわかってないからなぁ。
変な解説してんじゃねえぞ、今度からもっと勉強してからメルマガ書けよ。

ムカ、久しぶりにむかついた。お客さんだと思ってこっちがおとなしくしてたら、、
得意の毒舌かますか、ヒサビサに。

「坊ちゃん、坊ちゃんは物知りだから、いろいろなツール持ってるよね」
「うん、持ってるし、素人だけどプロのアンタより使い方知ってるよ」

なめた口聞きやがってコイツは、、、
「インターネットを速くするソフトやHPを丸ごと保存するソフト知ってる?」
「使ったこと無いけど知ってるよ」

よし、かかった(笑)
「仕組みも知ってるよねキミなら」
「だから、言ってんだろ、素人だけどプロのアンタより使い方知ってるって」

よしよし、食い付きもOK。ハリがかかったから、あとは慎重に釣り上げよう(笑)
「まず、インターネットを速くするソフト、
 ある機能内容を見ると、ユーザーが使用していない時間にリンク先を先読みする」
「それが、いいソフトじゃん、考えている間に次を先読みしてくれて快適快適」

「でもね、それが今回のリンクにパラメータ埋めこみだと問題で、
 満足、普通、不満を考えてる間に先読みソフトが勝手に先に進んで行って
 ASPを実行してしまう(答えてしまう)場合がイヤだよね」
「同様に、HPをまるごとローカルハードディスクに記録するのも、
 リンク先を読んでいくから、勝手に回答されてしまう」
「さらに、検索会社のロボット君の自動巡回でも同じかなぁ」
よし、何も言い返せない。(と、一安心)

「なんだぁ、ヤッパ三流ジャン、ロボット検索をさせない方法も知らないの?」
と言いながら、できる坊ちゃんは捨て台詞を残しママの所へ帰っていった。
*次回は子供思いのヤンママが登場、子供のケンカに大人が出てきます。
 Web関係のインターフェース、処理にはうるさい。
 もちろん、各種アンケートページ、ウラの悪徳Webまでプロより知ってる
 (うそです、そんな人登場しません、書くと疲れるしね)

/*
 * 4.脱線を元に戻す。
*/

先読みソフト
ローカルへHPを保存するツール
ロボットの自動検索
などで、変な動きをするかもしれないけど、
場合によっては、
リンクに埋めこむ、
<A HREF="http://www.ken3.org/cgi-bin/test/test008-2.asp?A=2">普通</A><BR>
も
手ごろかなぁと思った。

私のカスイHPにもロボットが来てるのは不思議だけど、
(たぶん、まぐまぐとかメルマガバックナンバーのリンクから?)
マジメにWeb上からアンケートやデータを取りたいひとは、
そのへんの対策も考えないといけないみたいですよね。

URLにパラメータを付ける、
クエリ情報で渡すのも、
データが軽い時はいいのかなぁ
と思って書きました。
参考となれば幸いです。

/*
 * 5.終わりの挨拶
*/

今回は、
・子供とマジでケンカしてはいけません
じゃなくって、
FORM ACTION="XXX.asp" METHOD="GET" で フォームの値を渡したい
でした。

まぁなんとなく、わかったような、わからなかったような。
まだまだ、道のりは遠いなぁ〜

またね(笑)

何か質問・感想があったら、気軽に、
メール、掲示板に書き込んでくださいね。

三流プログラマーのKen3でした。



ページフッター リンクや広告、質問送信など

三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。

まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。

次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません

DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く

VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。

ニガテな環境設定系など
[Win2003 Server に IIS を Setup]・・・ポイントの無い、ほぼ一本道解説だけど。
[IIS 仮想ディレクトの作成とASP動作TEST]・・・Web拡張でASPを有効にしただけです。

Blog:[三流君の作業日記]/ [サンプルコードのゴミ箱]/ 広告-[通販人気商品の足跡]

質問や要望など メッセージを送る(三流君に連絡する)

質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。

あなたのお名前(ニックネーム):さん
返信は?: 不用(HP更新を待つ) , E-mail→ アドレス:に返事をもらいたい



(感想や質問・要望 メッセージはHPで記事に載せることがあります。)


急ぎで連絡がほしい、そんな時は:[三流君連絡先アドレス]を見て連絡してください。



[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]