掲示板的なものを改造中です。
各ユーザーにパスワードを配布し、そのパスワードで入場すると、ユーザー名やアイコンがすでにセットされた状態で書き込みが出来るようにしたいと考えています。
そこで、簡単ですが、以下のようにやってみました。
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」にすると、入場は出来るのですが、下に「パスワードがちゃいます」のエラーが表示されてしまいます。
どこが間違ってますか?
また、必要な情報が足りていない場合は指摘してください。すぐに掲載します。
No.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">
のようにすれば大丈夫じゃないかと思います。
No.3
- 回答日時:
No.1中の$pwmatchは$pwdmatchに訂正します。
すみませんこの回答への補足
すばやい返答ありがとうございます。
修正してログインすることは出来ました。しかし、変数を送ることが出来ません。
&form();の方にユーザー名などを送りたいのですが、空白のままです。
<input type=text name=name size=28 value="$cnam">
こんな感じで間違えは無いですよね?
$in{'cnam'}じゃおかしいですよね。
もしかして、formの方にも何か変更が必要なのでしょうか?
No.2
- 回答日時:
そのプログラムは単純に書くとこんな感じですよね。
(<FILE> で読むとパスワードだけ読めると思って下さい)。
while (<FILE>) {
chomp;
$pass = $_;
if ($pass eq $query) {
print "一致したパスワード発見\n";
} else {
print "エラー\n";
}
}
よーく見て下さい。$pass が $query に一致していない時は全て "エラー\n" が出力されます。これと同じことです。
この回答への補足
指摘ありがとうございます。
しかし、どうすれば改善できるかがさっぱりです。
No1の方のものを試してみましたが、どうもうまくいかず…
よろしければ、そのものずばりの解決方法を教えていただけないでしょうか?
お願いします。
No.1
- 回答日時:
下記のコードにようにエラーメッセージは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;
この回答への補足
すばやい返答ありがとうございます。
が、今度はすべて「パスワードがちゃいます」になってしまいました。
コピペしたので、記入し間違えでは無いと思うのですが…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのセルにユーザー名...
-
メールをパスワードつきで送る方法
-
メールのマナー編
-
LINE TCBというところからLINE...
-
大学定期試験過去問サイト「過...
-
メールアドレス 上バーの入力...
-
インスタの捨て垢で友達のスト...
-
メールアドレスで上付きのハイフン
-
CDにパスワードをかける
-
カカオで退会せずに、アプリだ...
-
ログアウトのないサイトからロ...
-
CSVファイルを添付するときにパ...
-
メールエラー
-
YahooIDをパスワード形式にした...
-
存在しないアドレスにメールを...
-
メールアドレスから個人を特定...
-
LINE Payで友だちに送金しよう...
-
インターネットカフェでCD書き...
-
インスタのアイコンについてるN...
-
カカオトークを退会せずにアン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ビーリアルのユーザー名を変え...
-
Excelのセルにユーザー名...
-
メールをパスワードつきで送る方法
-
steam版 apexのログアウト方法...
-
メールエラー
-
LINE TCBというところからLINE...
-
URLとメールアドレス
-
メールアドレスで上付きのハイフン
-
インスタのアイコンについてるN...
-
メールアドレス 上バーの入力...
-
ユニクロやGUのシフト管理アプ...
-
携帯電話を解約してもSMSの受信...
-
メールアドレスから個人を特定...
-
インスタの捨て垢で友達のスト...
-
スタディプラスではアカウント...
-
Instagramからこんなメールがき...
-
YouTubeが毎回ログインしないと...
-
メールを返信したら、英語のメ...
-
解約済みの iPadについて 解約...
-
メールのマナー編
おすすめ情報