カレッヂ |
質問者 Octo
投稿日 3/13(火) 19:47:50
IDとパスワードで検索をかけようとしていますが、うまくいきません。 正しいパスワードを入れているはずなのですが、なぜか 「パスワードが違っています」とのエラーがでます。 不思議なことに最後に入れたレコードを検索すると別の反応が あります(といってもInternal Server Error なのですけど)。 パスワードチェックの部分は下記の通りです。 $datafileの中のレコードはタブ区切りで、 レコードの1番目の要素($rec[0])がID、19番目の要素($rec[18])が パスワードです。 また、検索フォームのID入力欄が「axsid」で、 パスワード入力欄が「checkpw」です。 よろしくお願いします。 open (REC,"<$datafile"); while(<REC>){@rec=split(/\t/,$_); if($rec[0] eq $FORM{'axsid'} && $rec[18] ne $FORM{'checkpw'}){ print<<"DIFPW"; Content-Type: Text/Html <html><head><title>検索結果</title></head> <body bgcolor="lightgreen"><center><font color="darkblue"><hr> <b>パスワードが違っています。</b><p> 検索画面に戻る場合はブラウザの「戻る」ボタンをクリックしてください。<hr> </font></center></body></html> DIFPW last;} |
回答者 しあわせのツボ
[削除]
投稿日 3/13(火) 21:40:39
データファイルには1レコードに何項目ありますか? パスワードが最後の項目だとすると、レコード区切りの改行もそのまま変数に格納されています。 予め chomp($rec[18]); として改行を取り除いて下さい。 |
質問者 Octo
[削除]
投稿日 3/14(水) 09:09:53
しあわせのつぼ様 大当たりです!項目数は全部で19。つまり$rec[18]は最後の項目です。 最後のレコードだけは末尾に改行コードが入らないようになってるので・・・ さっそくためしてみます。 最後のレコードで検索をかけたらサーバエラーになるのは この下にあるelsif文(今回は掲載してませんけど)の どこかに問題があるのでしょうね。 |
質問者 Octo
[削除]
投稿日 3/14(水) 12:16:02
そういえば、chompって「最後の1バイトを削除」ではなかったで しょうか? だとしたら、 最後のレコード(改行コードなし)でこれをやるとデータそのものを 削ってしまうことになるので、$rec[18]=~s/\n$//; あたりに しておいた方がいいということでしょうか。 ちなみに、このデータファイルの書き込みの仕方は ・初期値として見出し行が入っている(末尾の改行コードなし) ・書き込み時はまず既存のデータの末尾に改行コードを入れ その後に新データ(末尾の改行コードなし)を追記する というものです。 |
回答者 しあわせのツボ
[削除]
投稿日 3/14(水) 12:29:56
「最後の1バイトを削除」はchopです。 chompは「最後の1バイトが改行コード(変更可能)なら削除」という処理をしてくれます。 |
質問者 Octo
[削除]
投稿日 3/14(水) 12:37:15
しあわせのツボ様 毎度ごていねいにどうもありがとうございます。 さっそくやってみようと思います。 |
質問者 Octo
[削除]
投稿日 3/14(水) 14:52:05
さっそくやってみましたが・・・ こんどはすべてのレコードについて 「パスワードが違う」と出てきてしまいます。 open (REC,"<$datafile"); while(<REC>){@rec=split(/\t/,$_); $rec[18] = chomp($rec[18]); if($rec[0] eq $FORM{'axsid'} && $rec[18] ne $FORM{'checkpw'}){ print<<"DIFPW"; Content-Type: Text/Html <html><head><title>検索結果</title></head> <body bgcolor="lightgreen"><center><font color="darkblue"><hr> <b>パスワードが違っています。</b><p> 検索画面に戻る場合はブラウザの「戻る」ボタンをクリックしてください。<hr> </font></center></body></html> DIFPW last;} どこがおかしいのでしょうか?? パスワードは間違いなく19番めの項目(ゼロから数えれば18) なのですが・・・ |
質問者 Octo
[削除]
投稿日 3/14(水) 19:48:04
結局chompのかわりに $rec[18]=~s/\n$//; としたら うまく作動しました。 chompの使い方、どこか間違ってたんでしょうか・・・? とりあえず、動作がうまくいったということで この件は終了とします。 ご協力ありがとうございました! |
このページは終了したので返信(回答)は書きこめません
Web裏技 |