• ベストアンサー

textボックスに"手入力"して検索。

URL(1) http://riss.narc.affrc.go.jp/kssys/test/query.asp 今、↑このURL(1)のサンプルを参考にしながら 検索できるスクリプトを作っています。 このサンプルに 下記のURLの↓ "出版年"のところの、 ←1990年から1995年に出版された資料に限定する。という方法 をつけるにはどうしたらいいのでしょうか? URL(2) http://kototoi.dl.itc.u-tokyo.ac.jp/opac/help/expart-help.html よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hequil
  • ベストアンサー率65% (242/372)
回答No.2

そのまま書いたら当然エラーになりますって(;´Д`) 実際にはこのSQL文をデータベース(mdb)へ投げてあげる必要があります。 http://riss.narc.affrc.go.jp/kssys/test/encode.asp?file=query を例に挙げれば、65~70行目でSQL文を作って、72行目でデータベースへSQLを投げて結果をレコードセット変数「rs」で受け取っています。 これと同じことを行えば良いのです。 yearがデータベース内の出版年のフィールド名nen1とnen2が検索条件となるASPでの変数名なら、上記サンプルを参考に SQL = "SELECT * FROM example WHERE year BETWEEN " & nen1 " AND " & nen2 Set rs = db.Execute(SQL) で結果がrsに入ります。 他の検索条件も組み合わせるなら、それらの条件もSQL文に追加してあげる必要 があります。 なお、nen1とnen2は「ただの変数」なのでフォームから値を受け取るには事前にRequest.QueryStringまたはRequest.Formで値を受け取っておく必要があります。 あと、上記の例もSQL文のサニタイジングを行っていませんのであくまで例としてご利用下さい。

その他の回答 (1)

  • hequil
  • ベストアンサー率65% (242/372)
回答No.1

SQL文のヒントのみ書いておきます。 SELECT * FROM example WHERE 出版年 BETWEEN 1990 AND 1995 SELECT * FROM example WHERE 出版年 >= 1990 AND 出版年 <= 1995 あと少し気になったのはURL(1)に限らず、該当サイト内のASPサンプル全般にSQL InjectionやXSS(クロスサイトスクリプティング)脆弱性を始め、セキュリティ的に問題となるコードが多く含まれています。 最低でもSQL文で使用する入力データとHTMLへ出力する文字は無害化(サニタイジング)を行う必要があります。 これらはReplace関数とServer.HTMLEncodeで簡単に解決出来る問題なので 参考URLを熟読の上、安全なコードを書けるよう頑張って下さい。

参考URL:
http://www.atmarkit.co.jp/fsecurity/special/30xss/xss01.html
tanaba
質問者

補足

SELECT * FROM example WHERE 出版年 BETWEEN 1990 AND 1995 SELECT * FROM example WHERE 出版年 >= 1990 AND 出版年 <= 1995 のところ、有り難うございます。 私もBetweenまではたどりつきましたが、そこからがわからず 悩んでいました。本当に有り難うこざいます。 しかしながら、変数?がきちんと入り込めていないためか、 うまく検索にかかってくれません。 テーブル名 ・・example 出版年 ・・・mdbに登録されている名前year 上記サンプルとしてあがっている1990・・・テキストの名前 "nen1" 上記サンプルとしてあがっている1995・・・テキストの名前 "nen2" でSQLを作成した場合、 SELECT * FROM example WHERE year BETWEEN nen1 AND nen2 SELECT * FROM example WHERE year >= nen1 AND year <= nen2 で、よろしいのですよね? これでやると、 Microsoft VBScript コンパイル エラー (0x800A03FD) 'Case' がありません。 /db/nen.asp, line 252, column 7 SELECT * FROM example WHERE year BETWEEN nen1 AND nen2 となってしまいます。 これがずっと続いてるのですが、どこがおかしいのかおわかりになりますでしょうか・・・。 脆弱性があるんですね(^^;) 教えていただいたURLを読んで勉強します。

関連するQ&A