- ベストアンサー
簡単なユーザーページ
掲示板的なものを改造中です。 各ユーザーにパスワードを配布し、そのパスワードで入場すると、ユーザー名やアイコンがすでにセットされた状態で書き込みが出来るようにしたいと考えています。 そこで、簡単ですが、以下のようにやってみました。 sub admin { @new=(); open(FILE,"$userfile") || &error("Open Error : $userfileが開けません"); $top = <FILE>; while (<FILE>) { #while open ($userno,$cpwd,$cnam,$cico) = split(/<>/); if ($in{'pass'} eq $cpwd) { #if open &header; print <<"EOM"; <TABLE > <TBODY> <TR> <TD bgcolor="$obi_color" align="center"><font color="$tx"><B>新 規 記 事<B></font></TD> </TR> <TR> <TD><BR></TD> </TR> EOM # 投稿フォーム &form(); }else{ &error("パスワードがちゃいます"); } } #while close exit; --------------------------- datファイル 3<>0003<>イッシー<>is.jpg<> 2<>0002<>ますます<>ma.jpg<> 1<>0001<>うっちー<>un.jpg<> --------------------------- こうすると、パスワードが違いますと言われてしまいます。 しかも、パスワードを「0002」にすると、入場は出来るのですが、下に「パスワードがちゃいます」のエラーが表示されてしまいます。 どこが間違ってますか? また、必要な情報が足りていない場合は指摘してください。すぐに掲載します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
&form();の方にユーザー名などを送りたいのときは&form($userno, $cnam, $cico)として,sub formの方の頭を, sub form { ($userno, $cnam, $cico) = @_; としておけばよいでしょう。すると,sub formに$userno, $cnam, $cicoが渡されます。そうした上で <input type=text name=name size=28 value="$cnam"> のようにすれば大丈夫じゃないかと思います。
その他の回答 (3)
- grape16
- ベストアンサー率55% (52/93)
No.1中の$pwmatchは$pwdmatchに訂正します。すみません
補足
すばやい返答ありがとうございます。 修正してログインすることは出来ました。しかし、変数を送ることが出来ません。 &form();の方にユーザー名などを送りたいのですが、空白のままです。 <input type=text name=name size=28 value="$cnam"> こんな感じで間違えは無いですよね? $in{'cnam'}じゃおかしいですよね。 もしかして、formの方にも何か変更が必要なのでしょうか?
- ___noboru___
- ベストアンサー率28% (33/117)
そのプログラムは単純に書くとこんな感じですよね。 (<FILE> で読むとパスワードだけ読めると思って下さい)。 while (<FILE>) { chomp; $pass = $_; if ($pass eq $query) { print "一致したパスワード発見\n"; } else { print "エラー\n"; } } よーく見て下さい。$pass が $query に一致していない時は全て "エラー\n" が出力されます。これと同じことです。
補足
指摘ありがとうございます。 しかし、どうすれば改善できるかがさっぱりです。 No1の方のものを試してみましたが、どうもうまくいかず… よろしければ、そのものずばりの解決方法を教えていただけないでしょうか? お願いします。
- grape16
- ベストアンサー率55% (52/93)
下記のコードにようにエラーメッセージはwhileループを抜けてから,ループ中一度もパスワードがマッチしなかったときに表示するようにしたほうがいいと思います。 sub admin { @new=(); open(FILE,"$userfile") || &error("Open Error : $userfileが開けません"); $top = <FILE>; $pwdmatch = 0; #パスワードがマッチしたら真となる変数 while (<FILE>) { #while open ($userno,$cpwd,$cnam,$cico) = split(/<>/); $pwdmatch = ($in{'pass'} eq $cpwd); if ($pwmatch) { last; } } #while close if ($pwmatch) { &header; print <<"EOM"; …中略… EOM # 投稿フォーム &form(); }else{ &error("パスワードがちゃいます"); } exit;
補足
すばやい返答ありがとうございます。 が、今度はすべて「パスワードがちゃいます」になってしまいました。 コピペしたので、記入し間違えでは無いと思うのですが…
お礼
ありがとうございます。 ばっちり出来ました