<復習で一言コメント入力の処理を作る> こんにちは、Ken3です。 前回、前々回、 SQL 文を発行してMDBファイルにアクセスしました。 軽く、SELECT文、INSERT INTO文をやりました。 今回は、SQLのDELETE、UPDATEに行くと読者を思わせといて、 期待にはこたえずに、 復習で、一言コメントを受け取れる処理を作成してみたいと思います。 といっても、たいしたことないのでご安心を。 /* * 1.やりたいこと、感想を蓄積して、閲覧可能にする */ やりたいことは、HPを訪れた読者が、一言感想を書き込める。 そんなシンプルな処理をやってみたいと思います。 シンプルな、、とか、、簡単な、、とか、 日本語で書かないで、チャント仕様を書けよ。 えっと、宣伝兼ねて、 三流君の書いてるメルマガ http://www.ken3.org/guchi/ 作者の貧しい心の中が見れる愚痴系 http://www.ken3.org/vba/ VBA主にExcel/Access関係を少し http://www.ken3.org/24h/ コンビニ関係の話を少し http://www.ken3.org/asp/ ASP関係、Web上で少し遊んでます と4つあります。 このASPが一番流行ってない(笑)、う〜ん、、、 4つのメルマガあるので、 どのメルマガのどの話に対しての感想か知りたいので、 VBA No.5 今回も面白くない ASP No.7 よかったよ と、メルマガの区分とX話、感想、日時を受け取って、 作者の私が見るだけじゃなく、読者にもオープン表示したいです。 あっそ、一言感想やると、またショック受けるよキット。 いいんです。そんな話は置いといて、 データは、 データベース名:db029.mdb テーブル名:KANSOU フィールド ID オートナンバー型 F_KUBUN テキスト型 ASP,VBA,GUCHI,24Hと4つの区分 F_NO 整数型 0:は全体に対して、1〜はX話にする F_MEMO テキスト型 一言メッセージ WriteTime 日付型 書き込み日付 こんな感じでいいかなぁ。 動作は、 データ表示部 -- test029-1.asp ここでは、単純にデータを表示します。 また、感想を追加できるフォームを作成します。 データ追加部 -- test029-2.asp 単純に、受け取ったデータを追加します。 お礼のメッセージを表示します。 入力フォーム 各バックナンバーのHTMLに入れる。 こんな感じでOKかなぁ。 /* * 2.表示部を作成する */ 単純にデータを表示するんだろ、 それと、入力フォームを作成でしょ。 -- test029-1.asp -- <%@LANGUAGE=VBScript%> <html> <head> <title>コメント入力部(入力と表示)</title> </head> <body> <h2>コメント入力部(入力と表示)</h2> test029-1.asp<br> <hr> 感想を書き込んでください。<br> <FORM ACTION="test029-2.asp" METHOD="POST"> <INPUT TYPE="HIDDEN" NAME="NO" VALUE="0"> <b>メルマガ区分選択:</b><br> <INPUT TYPE="RADIO" NAME="KUBUN" VALUE="ASP" CHECKED>ASPで遊ぶ、失敗する<br> <INPUT TYPE="RADIO" NAME="KUBUN" VALUE="VBA" >VBAで楽しく<br> <INPUT TYPE="RADIO" NAME="KUBUN" VALUE="GUCHI" >愚痴系メルマガ<br> <INPUT TYPE="RADIO" NAME="KUBUN" VALUE="24H" >コンビニのオモテとウラ<br> <b>感想:</b> <INPUT TYPE="TEXT" NAME="MEMO" SIZE=60><br> <br> <INPUT TYPE="SUBMIT" VALUE="書 込"> <INPUT TYPE="RESET" VALUE="クリア"> </FORM> <hr> 今まで書き込まれたご意見・感想<br> <% 'DB内のデータを表示する 'ADO DB Connection オブジェクトを作成する、英文そのままじゃん Set db=Server.CreateObject("ADODB.Connection") '.Provider?プロバイダー?通信会社?じゃなくって 'データアクセスにはJet.OLEDB.4.0を使うことを設定 db.Provider = "Microsoft.Jet.OLEDB.4.0" '次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す db.ConnectionString = Server.MapPath("db029.mdb") 'やっとデータベースを開ける db.open 'お約束のレコードセットの作成 テーブル名KANSOUから全項目(*)を指定 Set rs = db.Execute("Select * From KANSOU ORDER BY WriteTime DESC") 'データの表示をテーブルで行う Response.Write "<TABLE Border='1'>" '見出しをバカっぽく、そのまま書き込む Response.Write "<TR>" Response.Write "<TD>日付</TD>" Response.Write "<TD>区分</TD>" Response.Write "<TD>NO.</TD>" Response.Write "<TD>感想</TD>" Response.Write "</TR>" 'お約束のEOFまでループは(データが無くなるまでループ)、 Do While rs.EOF = False 'レコードセットの.EOFがFalseの間 Response.Write "<TR>" '内容を表示する、行開始のタグ<TR> Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>" Response.Write "<TD>" & rs.Fields.Item("F_KUBUN") & "</TD>" If rs.Fields.Item("F_NO") = 0 Then '0の全体かチェック Response.Write "<TD>全体</TD>" Else Response.Write "<TD>" & rs.Fields.Item("F_NO") & "</TD>" 'NO表示 End If Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>" Response.Write "</TR>" '次のレコードにポインタを移動する rs.MoveNext 'これを忘れると悲惨なことに、、、 Loop Response.Write "</TABLE>" 'テーブルは終わりです '開いていたレコードセットを閉じる rs.Close 'データベースも閉じようよ db.Close 'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど) Set db = Nothing %> <hr> 終了です。<br> </body> </html> --- 軽く、ポイントを書くと、 頭で入力用のフォームを作成 ^^^^^^^^^^^^^^^^^^^^^^^^^^ 感想を書き込んでください。<br> <FORM ACTION="test029-2.asp" METHOD="POST"> <INPUT TYPE="HIDDEN" NAME="NO" VALUE="0"> <b>メルマガ区分選択:</b><br> <INPUT TYPE="RADIO" NAME="KUBUN" VALUE="ASP" CHECKED>ASPで遊ぶ、失敗する<br> <INPUT TYPE="RADIO" NAME="KUBUN" VALUE="VBA" >VBAで楽しく<br> <INPUT TYPE="RADIO" NAME="KUBUN" VALUE="GUCHI" >愚痴系メルマガ<br> <INPUT TYPE="RADIO" NAME="KUBUN" VALUE="24H" >コンビニのオモテとウラ<br> <b>感想:</b> <INPUT TYPE="TEXT" NAME="MEMO" SIZE=60><br> <br> <INPUT TYPE="SUBMIT" VALUE="書 込"> <INPUT TYPE="RESET" VALUE="クリア"> </FORM> と、入力用のフォームを作成してます。 ACTIONでtest029-2.aspの書込み部を指定してます。 あとは、だらだらと<INPUT TYPE"〜で入力項目を作ってます。 RADIO、ラジオボタンで選択させてるぐらいかなぁ。 DB内のデータを表示する ^^^^^^^^^^^^^^^^^^^^^^^^ 'ADO DB Connection オブジェクトを作成する、英文そのままじゃん Set db=Server.CreateObject("ADODB.Connection") '.Provider?プロバイダー?通信会社?じゃなくって 'データアクセスにはJet.OLEDB.4.0を使うことを設定 db.Provider = "Microsoft.Jet.OLEDB.4.0" '次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す db.ConnectionString = Server.MapPath("db029.mdb") 'やっとデータベースを開ける db.open ここまで、前回までのお約束?で、DB029以外変えてない。 'お約束のレコードセットの作成 テーブル名KANSOUから全項目(*)を指定 Set rs = db.Execute("Select * From KANSOU ORDER BY WriteTime DESC") ここもテーブル名を変えただけ。 書込み時間の降順でデータを抽出してます。 'お約束のEOFまでループは(データが無くなるまでループ)、 Do While rs.EOF = False 'レコードセットの.EOFがFalseの間 Response.Write "<TR>" '内容を表示する、行開始のタグ<TR> Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>" Response.Write "<TD>" & rs.Fields.Item("F_KUBUN") & "</TD>" If rs.Fields.Item("F_NO") = 0 Then '0の全体かチェック Response.Write "<TD>全体</TD>" Else Response.Write "<TD>" & rs.Fields.Item("F_NO") & "</TD>" 'NO表示 End If ↑0だったら、全体と置換えて表示してます。 Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>" Response.Write "</TR>" '次のレコードにポインタを移動する rs.MoveNext 'これを忘れると悲惨なことに、、、 Loop 後始末 ^^^^^^ Response.Write "</TABLE>" 'テーブルは終わりです '開いていたレコードセットを閉じる rs.Close 'データベースも閉じようよ db.Close 'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど) Set db = Nothing これも、決り文句になってしまってる、、、面白くないなぁ。 /* * 3.データを受け取って、DBに書き込む */ 次は、データを受け取って、書込みかぁ。 これもワンパターンで、INSERT INTO文の項目名を変えただけなんですよ。 -- test029-2.asp -- <%@LANGUAGE=VBScript%> <html> <head> <title>INSERT INTO文を使用して、コメント書込み</title> </head> <body> <h2>INSERT INTO文を使用して、コメント書込み</h2> test029-2.asp<br> <hr> <% '頭で、入力パラメーターの文字数をチェックする If Len(Request.Form("MEMO")) = 0 Then Response.Write "データを入力して下さい。<br>" 'エラーメッセージの表示 Else 'データが入力されていたら、 '書き込み関数を呼ぶ(外側に出したかったので) Call TEST_WRITE() End If 'If文もここで終わり %> <HR> 終了です。<br> <A href="test029-1.asp">db029.mdb内のデータを確認する</a><br> </body> </html> <% 'データを受け取り、DBへ書き込むつもり Sub TEST_WRITE() 'ADO DB Connection オブジェクトを作成する、英文そのままじゃん Set db=Server.CreateObject("ADODB.Connection") '.Provider?プロバイダー?通信会社?じゃなくって 'データアクセスにはJet.OLEDB.4.0を使うことを設定 db.Provider = "Microsoft.Jet.OLEDB.4.0" '次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す db.ConnectionString = Server.MapPath("db029.mdb") 'やっとデータベースを開ける db.open 'あまり意味無いけど、変数に代入 strKUBUN = Request.Form("KUBUN") strNO = Request.Form("NO") strMEMO = Server.HTMLEncode(Request.Form("MEMO")) 'フリー入力なので 'SQL文を作る strSQL = "INSERT INTO KANSOU (F_KUBUN, F_NO, F_MEMO, WriteTime) VALUES (" strSQL = strSQL & "'" & strKUBUN & "'" '区分 strSQL = strSQL & ", " & strNO '番号 strSQL = strSQL & ", '" & strMEMO & "'" '感想メモ strSQL = strSQL & ", #" & now & "#)" '現在時刻、日付型は#で囲む 'SQL文を発行 db.Execute(strSQL) 'オマケで画面にデータ表示 Response.Write "<HR>SQL [" & strSQL & "]を発行しました<HR>" 'データベースも閉じようよ db.Close 'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど) Set db = Nothing End Sub %> ポイントは、特に無く ^^^^^^^^^^^^^^^^^^^^ 'あまり意味無いけど、変数に代入 strKUBUN = Request.Form("KUBUN") strNO = Request.Form("NO") strMEMO = Server.HTMLEncode(Request.Form("MEMO")) 'フリー入力なので で、Server.HTMLEncodeを使って、文字を変換してるぐらいです。 /* * 4.HTMLに組みこんでコメントを取る 隠し項目の利用 */ 私は、メルマガのバックナンバーを5話単位でまとめてます。 バックナンバー内で、コメントを取りたいので、 HTML文章に、 --- 感想を書き込んでください。<br> <FORM ACTION="test029-2.asp" METHOD="POST"> <INPUT TYPE="HIDDEN" NAME="KUBUN" VALUE="ASP"> <INPUT TYPE="HIDDEN" NAME="NO" VALUE="29"> <b>感想:</b> <INPUT TYPE="TEXT" NAME="MEMO" SIZE=60><br> <br> <INPUT TYPE="SUBMIT" VALUE="書 込"> <INPUT TYPE="RESET" VALUE="クリア"> </FORM> --- と入れると、 隠し項目で、 <INPUT TYPE="HIDDEN" NAME="KUBUN" VALUE="ASP"> と区分を設定、 <INPUT TYPE="HIDDEN" NAME="NO" VALUE="29"> で、どの話かわかるようにしてます。 ユーザーは、メモだけの入力に見えるけど、 隠し項目でパラメーターを送ってます。 こんなセコイ使い方もあるので、なんとなく頭のスミに入れておいてください。 /* * 5.終わりの挨拶 */ 今回は、 ・SELECT文の復習 ・INSERT INTO文の復習 ・<FORM>隠し項目の利用 で、 コメントの書込み処理を作ってみました。 なんかイマイチなサンプルだけど、 プログラムの欠陥(穴)を含めて、次回も説明していくので、ヨロシクです。 えっ、今回の欠陥、もうわかってしまった?速いなぁ一流読者は。 テストは、 http://www.ken3.org/cgi-bin/test/test029-1.asp で、出来ます。 *あと、バックナンバーのページに随時入れておくので、 コメント入力してみてください。 素朴な疑問あったら、気軽に、 メール、掲示板に書き込んでくださいね。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]
まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。
次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません
広告:
DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く
VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]