プロが教えるわが家の防犯対策術!

掲示板的なものを改造中です。
各ユーザーにパスワードを配布し、そのパスワードで入場すると、ユーザー名やアイコンがすでにセットされた状態で書き込みが出来るようにしたいと考えています。
そこで、簡単ですが、以下のようにやってみました。

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」にすると、入場は出来るのですが、下に「パスワードがちゃいます」のエラーが表示されてしまいます。

どこが間違ってますか?
また、必要な情報が足りていない場合は指摘してください。すぐに掲載します。

A 回答 (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">
のようにすれば大丈夫じゃないかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ばっちり出来ました

お礼日時:2006/01/31 11:50

No.1中の$pwmatchは$pwdmatchに訂正します。

すみません

この回答への補足

すばやい返答ありがとうございます。

修正してログインすることは出来ました。しかし、変数を送ることが出来ません。
&form();の方にユーザー名などを送りたいのですが、空白のままです。
<input type=text name=name size=28 value="$cnam">
こんな感じで間違えは無いですよね?
$in{'cnam'}じゃおかしいですよね。
もしかして、formの方にも何か変更が必要なのでしょうか?

補足日時:2006/01/30 20:11
    • good
    • 0

そのプログラムは単純に書くとこんな感じですよね。


(<FILE> で読むとパスワードだけ読めると思って下さい)。

while (<FILE>) {
 chomp;
 $pass = $_;
 if ($pass eq $query) {
  print "一致したパスワード発見\n";
 } else {
  print "エラー\n";
 }
}

よーく見て下さい。$pass が $query に一致していない時は全て "エラー\n" が出力されます。これと同じことです。

この回答への補足

指摘ありがとうございます。
しかし、どうすれば改善できるかがさっぱりです。
No1の方のものを試してみましたが、どうもうまくいかず…
よろしければ、そのものずばりの解決方法を教えていただけないでしょうか?
お願いします。

補足日時:2006/01/30 19:07
    • good
    • 0

下記のコードにようにエラーメッセージは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;

この回答への補足

すばやい返答ありがとうございます。
が、今度はすべて「パスワードがちゃいます」になってしまいました。
コピペしたので、記入し間違えでは無いと思うのですが…

補足日時:2006/01/30 19:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!