このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

検索用CGI(filedb_2について)

発言者:横地宣重
( Date Friday, March 13, 1998 19:01:26 )


filedb_2 のCGIなんですが、検索する時、12345678の用に、すべて8文字で
検索させたいのですが、必ず8文字入力しないと検索エラーがでるように
するには、どうすればいいのでしょうか?

よろしくおねがいします。


横地宣重 さんからのコメント
( Saturday, March 14, 1998 03:54:21 )

上記の事柄についてですが

8桁の数字の名前がファイル名になっているファイルが、filesのフォルダの中
に、いくつか入っています。

ファイル名を入力する欄に、そのファイル名をきちんと入れないと、検索
されず、filedb_2.htmlのページにもどってくるようにしたいのですが、上手く
filedb_2.cgiをつかって、できるようできないものでしょうか?

よいアイデアをいただければ、幸いです。
よろしくおねがいします。

重松修 さんからのコメント
( Saturday, March 14, 1998 04:35:45 )

それって、ただ単に文字列がすべて半角の数値で、かつ8桁であるか
チェックしてだめなら、エラーを返す、その後の問題ですよね?

わたしは、そして、そこにhistory.backのJavaScriptボタンを出力する
しています。

    <FORM>
    <INPUT TYPE="button" VALUE="戻る" onClick="history.back()">
    </FORM>

CGI側でブラウザのバックボタンを押すのと同じ意味のHTTPヘッダを吐き
たいという意味ですよね?私もそれは知りたいです。

それとも、単に、8桁のチェックのスクリプトが分からないという問題で
しょうか?

横地宣重 さんからのコメント
( Saturday, March 14, 1998 06:54:22 )

filedb_2.acgi のなかに上手く8桁のチェックのスクリプトが、つかえれば
いいのですが。よろしくおねがいします。初心者の質問ですが、上手く
filedb_2.acgiの中にスクリプトを挿入できるのであれば、
教えていただければ幸いです
よろしくおねがいします。

田中求之 さんからのコメント
( Saturday, March 14, 1998 15:29:11 )

入力されたデータが8桁の数字であるかどうかをチェックすればいいわけですね?

myData に FORM からの入力がデコードされて入っているとして

try
  
  if length of ((myData as integer) as string) is not 8 then
    error
  else if (myData as integer) < 0 then
    error
  end if
  
on error
  return --- 8桁の正の整数以外が入力されていたのでリダイレクト
end try

というスクリプトでチェック可能です

横地宣重 さんからのコメント
( Saturday, March 14, 1998 17:18:36 )

ありがとうございます。
勉強になります。

試したところ、すぐにおもったとうりに動いてくれました。

ありがとうございました。

横地宣重 さんからのコメント
( Monday, March 16, 1998 11:07:48 )

try
  
  if length of ((myData as integer) as string) is not 8 then
    error
  else if (myData as integer) < 0 then
    error
  end if
  
on error
  return --- 8桁の正の整数以外が入力されていたのでリダイレクト
end try

このスクリプトに質問なのですが、 これは、1以上の8桁整数の場合
ですよね?もし、00000001のように、0ではじまる、8桁の整数の場合も
検索できると思うのですができません。10000001であるならば、
検索できるのですが、どうしてなのでしょうか?

教えていただければ幸いです。
よろしくお願いします。


重松修 さんからのコメント
( Monday, March 16, 1998 11:43:41 )

if length of ((myData as integer) as string) is not 8 then
ってありますよね。

よって、00000001は数字にしたら1になります。それをさらに文字列にしま
すから、1となり、長さはやはり1のままです。

ですので、一番上の桁を0以外にするか、もうちょっとこったスクリプトを
かく必要があります。具体的には、9桁の数字、たとえば、100000000を
足したものの右8桁とったものが、元の次列と一致するか調べる、などの
方法があるでしょう。

横地宣重 さんからのコメント
( Monday, March 16, 1998 13:32:22 )

ありがとうございました。
勉強になります


田中求之 さんからのコメント
( Monday, March 16, 1998 16:50:28 )

8桁の整数であるかどうかのチェックではなく、8文字の数字からなる文字列かどうか
のチェックを行えばよいわけですね。でしたら、以下のようなスクリプトで可能です。

try
  set myL to characters of myData
  if (count items of myL) is not 8 then error
  repeat with thisC in myL
    set thisC to contents of thisC
    if not ("0" <= thisC and thisC <= "9") then error
  end repeat
on error
  return --- 条件に合わないのでリダイレクトする
end try

横地宣重 さんからのコメント
( Monday, March 16, 1998 18:08:34 )

田中さん、重松さん
ありがとうございます。色々なアイデア
具体例をみせていただいて、勉強になります。