• ベストアンサー

簡単なユーザーページ

掲示板的なものを改造中です。 各ユーザーにパスワードを配布し、そのパスワードで入場すると、ユーザー名やアイコンがすでにセットされた状態で書き込みが出来るようにしたいと考えています。 そこで、簡単ですが、以下のようにやってみました。 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」にすると、入場は出来るのですが、下に「パスワードがちゃいます」のエラーが表示されてしまいます。 どこが間違ってますか? また、必要な情報が足りていない場合は指摘してください。すぐに掲載します。

  • Perl
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • grape16
  • ベストアンサー率55% (52/93)
回答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"> のようにすれば大丈夫じゃないかと思います。

master-3rd
質問者

お礼

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

その他の回答 (3)

  • grape16
  • ベストアンサー率55% (52/93)
回答No.3

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

master-3rd
質問者

補足

すばやい返答ありがとうございます。 修正してログインすることは出来ました。しかし、変数を送ることが出来ません。 &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" が出力されます。これと同じことです。

master-3rd
質問者

補足

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

  • grape16
  • ベストアンサー率55% (52/93)
回答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;

master-3rd
質問者

補足

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

関連するQ&A

  • 繰返しを繰り返す【php】

    たとえばですが、 for($i=0; $i < 31; $i++){ $table ="<td>★</td><td>●</td>"; } echo <<<EOM <table> <tr><td>名前</td>{$table}</tr> </table> EOM; という処理を10回繰り返したい場合はどのようにしたらいいのでしょうか。 上記のプログラムを丸々whileで囲んでみたのですが、うまく表示されませんでした。

    • ベストアンサー
    • PHP
  • こんな感じのwebページできませんか?

    tableタグを使ってやってみました。 <table border="1" width="800"> <tr> <th bgcolor="#FFFFFF" width="160"><font color="#000000">項目</font></th> <th bgcolor="#FFFFFF" width="*"><font color="#000000">説明</font></th> </tr> <tr> <td bgcolor="#FFFFFF">水星</td> <td rowspan="5" bgcolor="#FFFFFF">太陽の最も近くを回る惑星。</td> </tr> <tr> <td bgcolor="#FFFFFF">金星</td> </tr> <tr> <td bgcolor="#FFFFFF">地球</td> </tr> <tr> <td bgcolor="#FFFFFF">火星</td> </tr> <tr> <td bgcolor="#FFFFFF">木星</td> </tr> </table> これをブラウザで見るとわかるのですが、左側の項目をクリックすると右側の説明の欄に分が表示されるようにしたいです。 上の例では、直接に説明を書いていますがHTMLファイルを表示させたいです。 左の項目をクリックして、右に説明を持ってくるようにするにはどうしたらいいでしょうか? 水星をa href=""でリンクしてもいいのですが、そうすると画面全体に説明が来てしまいます。 また、項目を追加した場合、どのように調整したらよいか困ってしまいました。 フレームは使いたくないので、スタイルシートかジャバスクリプトを使うのでしょうか? どなたかアドバイスお願いします。

  • ファイルをopenできない時別のページを表示したい

    ファイルをopenできない時、エラー表示しているのを  if (!open(IN,"$userfile")) { &error("投稿データファイルを開けません "); 別のページを(abc.cgi)表示したいのですがよろしくお願いします

  • 楽天オークション HTMLエラー

    楽天オークション商品説明文の欄にHTMLを挿入した結果「PC用説明文欄に認められていないHTMLタグ、または「<」「>」が入力されています。各入力項目ごとの利用可能なHTMLタグをご確認ください。」というエラーが出ました。 どなたか解決方法をお教えください。 <div align="center"> <table width="695" cellpadding="1px" cellspacing="1px" bgcolor="#187353"> <tr> <td align="center"><font color="#ffffff" size="+1"><strong>商品データ</strong></font></td> </tr> </table> <table width="700" cellpadding="5px" cellspacing="3px"> <tr> <td width="270" bgcolor="#30AA8E"><font color="#ffffff" size="-1"><strong>■ 参考価格</strong></font></td> <td width="270" bgcolor="#30AA8E"><font color="#ffffff" size="-1"><strong>■ 販売価格</strong></font></td> </tr> <tr> <td width="270" bgcolor="#EFEFEF"><font color="#231815" size="-1">29,800円</font></td> <td width="270" bgcolor="#EFEFEF"><font color="#231815" size="-1">24,500円</font></td> </tr> <tr> <td width="270" bgcolor="#30AA8E"><font color="#ffffff" size="-1"><strong>■ ランク</strong></font></td> <td width="270" bgcolor="#30AA8E"><font color="#ffffff" size="-1"><strong>■ 型番</strong></font></td> </tr> <tr> <td width="270" bgcolor="#EFEFEF"><font color="#231815" size="-1">N(新品・未使用品)</font></td> <td width="270" bgcolor="#EFEFEF"><font color="#231815" size="-1">J1234</font></td> </tr> <tr> <td width="270" bgcolor="#30AA8E"><font color="#ffffff" size="-1"><strong>■ 色</strong></font></td> <td width="270" bgcolor="#30AA8E"><font color="#ffffff" size="-1"><strong>■ サイズ</strong></font></td> </tr> <tr> <td width="270" bgcolor="#EFEFEF"><font color="#231815" size="-1">BLACK</font></td> <td width="270" bgcolor="#EFEFEF"><font color="#231815" size="-1">縦30cm 横10cm</font></td> </tr> <tr> <td width="270" bgcolor="#30AA8E"><font color="#ffffff" size="-1"><strong>■ 素材</strong></font></td> <td width="270" bgcolor="#30AA8E"><font color="#ffffff" size="-1"><strong>■ 付属品</strong></font></td> </tr> <tr> <td width="270" bgcolor="#EFEFEF"><font color="#231815" size="-1">レザー</font></td> <td width="270" bgcolor="#EFEFEF"><font color="#231815" size="-1">なし</font></td> </tr> <tr> <td colspan="2" bgcolor="#30AA8E"><font color="#ffffff" size="-1"><strong>■ コメント</strong></font></td> </tr> <tr> <td colspan="2" bgcolor="#EFEFEF"><font color="#231815" size="-1">小さなシミ(変色目立つ)小傷若干(角擦れ目立つが破れなし)</font></td> </tr> </table> </div> 宜しくお願い致します。

  • テーブルタグを作成した後、プレビューで表示されるタグの上部に空白が出来てしまう。

    テーブルタグを作成した後、プレビューで表示されるタグの上部に空白が出来てしまいます。 下記の内容で文章中にテーブルタグを表示しようとしたところ、 (1)の文章とテーブルタグとの間に、かなりの空白が表示されてしまいます。 どのようにしたら、この空白が削除できるか、是非お教え願います。 10種類の競技は以下のとおりです。・・・・(1) <Table Border><Tr><Td><FONT COLOR="#ec7600">1.サッカーナイン</FONT></Td><Td><FONT COLOR="#ec7600">ボールを蹴って的をいくつ落とせるか記録する</FONT></Td></Tr> <Tr><Td>2.サッカーリフティング</Td><Td> リフティングが何回できたかを記録する</Td></Tr> <Tr><Td><FONT COLOR="#ec7600">3.サッカードリブル</FONT></Td><Td><FONT COLOR="#ec7600"> ドリブルのコースを作り何秒でクリアできたかを記録する</FONT></Td></Tr> <Tr><Td>4.バスケットゴール</Td><Td> 決められた数のボールを何回入れられたかを記録する </Td></Tr> <Tr><Td><FONT COLOR="#ec7600">5.50メートル走</FONT></Td><Td><FONT COLOR="#ec7600">50メートルを何秒で走れるかを記録する</FONT></Td></Tr> <Tr><Td>6.バランス競技</Td><Td> 不安定な仕掛けの上に何秒間いられるかを記録する </Td></Tr> <Tr><Td><FONT COLOR="#ec7600">7.息止め競技</FONT></Td><Td><FONT COLOR="#ec7600">水に顔を付けてどのくらい我慢できるか記録する</FONT></Td></Tr> <Tr><Td>8.ターゲットゴルフ</Td><Td> クラブを使いボールをいくつ入れられるか記録する</Td></Tr> <Tr><Td><FONT COLOR="#ec7600">9.フライングディスク</FONT></Td><Td><FONT COLOR="#ec7600">フライングディスクを何枚的にいれられるかを記録する</FONT></Td></Tr></Table>

    • ベストアンサー
    • HTML
  • 同じようなタグと文字のパターンを簡略化する方法

    <table> <tr><td><font color="blue">あ</font><font color="red">い</font><font color="green">う</font></tr> <tr><td><font color="blue">あ</font><font color="red">い</font><font color="green">う</font></tr> <tr><td><font color="blue">い</font><font color="red">う</font><font color="green">あ</font></tr> <tr><td><font color="blue">あ</font><font color="red">い</font><font color="green">う</font></tr> </table> このような感じに同じパターンのHTMLタグと文字の羅列があるのですが、 タグが長くなりすぎて後から調整し直そうとするととても大変です。 <font color="blue">あ</font><font color="red">い</font><font color="green">う</font> 上記の部分を何処か別の場所から呼び出したりして簡略化することは出来ないでしょうか?

  • フォームメール確認用ページ

    フォームメールの確認用のページで、 cgiから書き出す、最終的な確認部分を、入力フォームから内容を受けた部分のみ表示しようとおもうのですが、以下の書式だとhtml内のsub部分の指示が効かずに、画面にそのままsub~と書き出されてしまいます。 どなたか良い方法を教えていただけないでしょうか? よろしくお願いいたします。 省略 $errNum = chkFormInput(); fixTags(); &okhtml(); sub okhtml{ print "Content-type:text/html\n\n"; print <<DATA; <html> <head> 省略 sub hoge { if ($hoge eq "") { print "<tr><td height="1" width="1"><img src="bitr.gif" width="1" height="1"></td></tr>\n"; }else{ print "<tr><td align=center width="30" bgcolor="#ffffdd"><font color="#333300" class="text2">8.</font></td> <td width="3"><img src="bitr.gif" width="1" height="1"></td> <td width="106" height="27" bgcolor="#ffffaa"><img src="bitr.gif" width="1" height="1"><font color="#333300" class="text2">連絡先<font class="text2" color="#cc0000"></td> <td width="3"><img src="bitr.gif" width="1" height="1"></td> <td width="414" bgcolor="#ffffdd"><img src="bitr.gif" width="1" height="1"><font class="text5">$hoge</font></td></tr> <tr><td colspan="5" height="2"><img src="bitr.gif" width="1" height="1"></td></tr>\n"; } }

    • ベストアンサー
    • Perl
  • HTMLで表を横並びにしたくて、下記のような表を作りました。

    HTMLで表を横並びにしたくて、下記のような表を作りました。 この表をもう一つ右隣に作りたいのですが、どうもうまくいきません。 何を付け足せば横に並んでくれるのでしょうか? <table style= width="500" bgcolor="#007500" cellspacing="1" cellpadding="5"> <tr> <td bgcolor="#e5ffe5" width="120"><font color="#000000"><strong><a href="紹介したURL">ああああ</strong></font></td> <td bgcolor="#ffffff"><font color="#000000"><strong>ああ<br></strong></font></td> </tr> <tr> <td bgcolor="#e5ffe5"><font color="#007500"><strong><a href="紹介したいURL">ああああ</a> </strong></font></td> <td bgcolor="#ffffff"><font color="#000000"><strong>ああ<br></strong></font></td> </tr> <tr> <td bgcolor="#e5ffe5"><font color="#000000"><strong><a href="index.html"></strong></font></td> <td bgcolor="#ffffff"><font color="#000000"><strong>あああああ</strong></font></td> </tr> </table><br> </tr>

  • CGI掲示板カスタマイズ~メッセージ送信の上にプロフを付けたい。

    現在、CGI掲示板のカスタマイズ中ですが、この掲示板は、投稿者の名前をクリックすると、メッセージ送信フォームが出るようになっています。 そこでこの送信フォーム画面の上部に、その投稿者の文章を表示したく、観覧処理や出力処理の中から必要そうな記述を抜き出し、送信フォーム表示処理の中のルーチンに取り込み、なんとか表示させることには成功したのですが、、その人物の投稿内容ではなく、なぜか1番目の投稿者の内容なのです。以下がそのメッセージ送信フォーム表示処理の内容です。 ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ## SUB >>> メール送信フォーム表示処理 ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sub mailform { if ($in{'sex'} eq '0') { if(!open(IN,"$mensfile")) { &error("$mensfile ファイルオープンエラー"); } } elsif ($in{'sex'} eq '1') { if (!open(IN,"$ladysfile")) { &error("$ladysfile ファイルオープンエラー"); } } if ($in{'sex'} eq "0") { $word_color = "$boy_color"; } elsif ($in{'sex'} eq "1") { $word_color = "$girl_color"; } if ($in{'sex'} eq "0") { $word_color = "$boy_color"; } elsif ($in{'sex'} eq "1") { $word_color = "$girl_color"; } if ($in{'sex'} eq "0") { $image = "image/otoko.gif"; } elsif ($in{'sex'} eq "1") { $image = "image/onna.gif"; } #--生年月日から年齢を計算--# $nenrei = ""; unless ($noage) { $nenrei = $year - $age_y; if ($age_m > $month) { $nenrei = $nenrei - 1; } if ($age_m == $month) { if ($age_d > $mday) { $nenrei = $nenrei - 1; } } } #--メール送信可能数の設定--# if ($max) { $max = "$max通まで"; } else { $max = "無制限"; } $i = 0; $allno = 0; while (<IN>) { ($no,$name,$mail,$age,$state,$comment,$hoop,$risou,$max,$date,$H_A,$m_pass,$looks) = split(/\,/,); ($age_y,$age_m,$age_d,$noage) = split(/<>/, $age); ($street,$title) = split(/<>/, $state); $i++; $allno++; if ($i < $start) { next; } if ($i > $end) { next; } if ($in{'sex'} eq '0') { $name_color = "$m_namecolor"; } if ($in{'sex'} eq '1') { $name_color = "$l_namecolor"; } &member_view; } close(IN); ~~~~↑↑↑追加部分↑↑↑~~~~~~~~ &html_head; &title; print <<"HERE"; <TABLE width="580"> <TR><TD bgcolor="$top_t_bgc"><CENTER> <FONT color="$top_t_color"><B>メッセージ送信フォーム</B></FONT> </TD></TR></TABLE> ~~~~↓↓↓追加部分↓↓↓~~~~~~~~ <TABLE width="98%" cellspacing="0" cellpadding="5" border="$table_border"> <TR><TD bgcolor="$table_bgc"> ■<FONT color="$title_color">[<B>$no</B>] <B>$title</B></FONT><BR> ■お名前/ <B>$name</B>さん $date<BR> ■住所/ $street 年齢/ $age_y年$age_m月$age_d日生まれ($nenrei歳)<BR> ■希望/ $risou <FONT color="$word_color">[$hoop]</FONT> ■メール制限数/ <FONT color="$word_color">[$max]</FONT><BR> <FONT color="$word_color">$comment</FONT></TD></TR></TABLE> <TABLE height="$kiji_sp" border="0"><TR><TD></TD></TR></TABLE> HERE ~~~~↑↑↑追加部分↑↑↑~~~~~~~~ 以下は元からある送信フォーム。文字数オーバーのため省略 ~~~ここまでが送信処理のルーチンですが、 この上部の方の記述をどう記したら、その人物の投稿文が出せるのか、宜しくお願い致します。

    • ベストアンサー
    • CGI
  • CGI コメント欄の文章を行替えしたいのです

    お世話になります。 野球スコアボードのCGIなのですが、コメント欄の文章がどうしても1列になってしまい、行替えができません。 文章で<br>を書き加えると、1行分のみしか表示されず、改行の2行目以降が表示されません。   以下の構成でどのようにすれば、文章の行替えが可能になりますか? アドバイスよろしくお願い致します。 <tr><td colspan=\"2\"> <font color=white>スコアボード<center> <table border=\"1\" bgcolor=\"#009933\" cellspacing=0 bordercolor=\"black\"> "; for($i=0;$i<@score;$i++){ print "<tr>"; @team_score=split(/,/,$score[$i]); if($i eq 0){ print "<tr>"; for($s=0;$s<@team_score;$s++){ if($s eq 0){ print "<td width=80> <font color=\"white\"> <center><i>チーム名 </td>"; }else{ print "<td width=\"20\"> <font color=\"white\"> <center><i>$s </td>"; } } print "<td width=40><font color=\"white\"><center><i>合計</td>"; print "</tr><tr>"; } $point=0; for($j=0;$j<@team_score;$j++){ print "<td><font color=\"white\">"; print"<center>"; if($team eq $team_score[$j]){ print "<b>" } print"$team_score[$j]</td>"; if($j eq 0){ }else{ $point=$point+$team_score[$j]; } } if($cnt[$i-1] eq $j || $i eq 0){ print "<td><font color=\"white\"><center>$point</td>"; }else{ print "<td> <font color=\"white\"><center>× </td> <td> <font color=\"white\"><center>$point </td>"; } print "</tr>"; $cnt[$i]=$j; } print "</table><p></td></tr>"; print "<tr><td bgcolor=\"#778899\" height=100> <font color=white>コメント </td> <td bgcolor=\"#f8f8ff\"> $cmt[$p] </td></tr>"; print "</table>"; print "<p><hr width=500><p>"; } } print " </body></html>"; exit;

    • ベストアンサー
    • CGI