※ ChatGPTを利用し、要約された質問です(原文:どうしてか全くわかりません。)
なぜIDのフォームだけ数値としてしか扱えないのか?
このQ&Aのポイント
自力でアクセス制限のCGIを作ろうと思って独学で勉強しているのですが、フォームからのデータの受け取りがうまくいきません。
IDのフォームデータは数値として扱っていないようで、文字数さえあっていればどんな文字列でもOKという状態になってしまいます。
IDの入力データを文字列として扱いたくて数値用比較演算子『!=』の部分をPSと同じく文字用比較演算子『ne』にしたいのですが、そうするとうまく動作しません。どうしてIDのフォームだけ数値としてしか扱えないのでしょうか?また文字列として扱えるようにするにはどこを直せば良いのでしょうか。教えてください。お願いします。
自力でアクセス制限のCGIを作ろうと思って独学で勉強しているのですが、フォームからのデータの受け取りがうまくいきません。
今の状況を抜粋して載せた方が早いと思いますので、長くなってしまいますがお許しください。
---トップのページ(HTML)抜粋---
<form method="post" action="./Certification.cgi">
ID:<input type="text" name="id" size=17>
PS:<input type="password" name="ps" size=17>
<input type="submit" value="ログイン">
---Certification.cgi(Perl)抜粋---
#!/usr/local/bin/perl
require 'cgi-lib.pl';
&ReadParse(*input_data);
#キーファイルオープン
open(DAT,"<key.dat");
#判別変数宣言
$dec=0;
#入力データ格納
$id=$input_data{'id'};
$ps=$input_data{'ps'};
#キー格納
$keyid=<DAT>;
$keyps=<DAT>;
#判別
if($id != $keyid){$dec=1;}
if($ps ne $keyps){$dec=1;}
※以下、$decが0ならばOK、$decが1ならばNGという文をifを用いて記述。
---key.data(ログインできるIDとPSを記述)---
(1行目)abc
(2行目)efg
以上です。
※フォームデータのデコード?にはcgi-libライブラリというものを使っています。
この状態では、PSのフォームデータは正しく評価され、
ちゃんと機能しているのですが、(#判別のIDの部分からもわかる通り)IDのフォームデータは数値として扱っていないようで、文字数さえあっていればどんな文字列でもOKという状態になってしまいます。
それで、IDの入力データを文字列として扱いたくて数値用比較演算子『!=』の部分をPSと同じく文字用比較演算子『ne』にしたいのですが、そうするとうまく動作しません。
どうしてIDのフォームだけ数値としてしか扱えないのでしょうか?また文字列として扱えるようにするにはどこを直せば良いのでしょうか。教えてください。お願いします。
お礼
ありがとうございました!! やっとできました! おっしゃる通り、改行コード2文字分をキーID変数から取り除くことでうまくいきました! どうもありがとうございました!!