[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.029 復習で一言コメント入力の処理を作る

復習で一言コメント入力の処理を作る



本文(発行内容)


<復習で一言コメント入力の処理を作る>
こんにちは、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でした。


ページフッター

ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、

三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。
返信例 XXXXさんへ
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

種類別のリンク や 広告など

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


Blogとリンク:[三流君のMemo別館]/ [ASP 三流君のソースコード置き場]/ [Ken3Video YouTubeで動画解説]
広告:

気になった ジャンル ↓を選択してください。

まぁ、基本はデータの受け取りかなぁ。
・[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記事 バックナンバー目次]


広告: