のフリー、シェアCGI・PHPスクリプト・JavaScriptをキーワード、97のカテゴリーから検索できます。スクリプトの登録ご利用は一切無料です。


フリー、シェアCGI・PHPスクリプトをキーワード、96のカテゴリーから検索できます。

 スクリプトをお探しなら当サイトでOK

  •  フリー、シェアのCGI・PHPスクリプトをメインに検索。
  •  ランキングによる評価で人気のスクリプトを紹介。
  •  サンプル(ページ)によるダウンロード前の事前評価。
  •  お気に入りスクリプトへのパーソナルリンクの作成。

 スクリプト登録のメリット

  •  シェアスクリプトでも、掲載は一切無料。
  •  細かなカテゴリー(全97項目)で閲覧者に分かり易く分類。
  •  スクリプトを印象づけるサンプル(ページ)の登録が可能。
  •  ダウンロードランキングの実施による人気度の評価。

当サイトはQ&A掲示板(コミュニティ)の窓口を共有して下さるサイト様を募集しています。

[Q&A掲示板] 共有サイト様募集!

会員登録機能拡張-1


今回は、会員情報を変更するフォームを製作します。

更新する情報は、パスワード、名前、メールアドレスです。
IDは変更できないものとします。

# トップページ
sub Top {
   &Header();
   print <<E_O_M;
・<a href="test.cgi?m=Entry">新規登録</a><br>
<br>
<form action="test.cgi" method="POST">
ID<input type="text" name="id"> PASS<input type="password" name="pass">
<input type="submit" value="ログイン">
<input type="hidden" name="m" value="Login">
</form>
<br>
<form action="test.cgi" method="POST">
<input type="password" name="pass"> <input type="submit" value="管理">
<input type="hidden" name="m" value="Admin">
</form>
</body>
</html>
E_O_M
}

# 変更フォーム
sub Login {
   &Get_User();
   &Error('指定されたユーザーは存在しません!') if(!exists($UserData{$in{'id'}}));
   &Error('パスワードが一致しません!') if($in{'pass'} ne $UserData{$in{'id'}}[1]);
   if(!$in{'f'}) {
      # 変更フォームの表示
      &Header();
      print <<E_O_M;
<form action="test.cgi" method="POST">
パスワード<input type="password" name="newpass"><br>
名前<input type="text" name="name"><br>
メールアドレス<input type="text" name="mail"><br>
<input type="hidden" name="pass" value="$in{'pass'}">
<input type="hidden" name="id" value="$in{'id'}">
<input type="hidden" name="f" value="1">
<input type="hidden" name="m" value="Login">
<input type="submit" value="登録">
</form>
E_O_M
   } else {
      # 変更処理
      # パスワードチェック
      $ERROR .= 'パスワードが入力させていません!<br>' unless($in{'newpass'});
      $ERROR .= 'パスワードには半角英数字以外は使用できません!<br>' if($in{'newpass'} =~ /[^0-9a-zA-Z]/);
      $ERROR .= 'パスワードが長すぎます' if(length($in{'newpass'}) > 20);
      # 名前チェック
      $ERROR .= '名前が入力されていません!<br>' unless($in{'name'});
      $ERROR .= '名前が長すぎます!<br>' if(length($in{'name'}) > 40);
      # メールアドレスチェック
      $ERROR .= 'メールアドレスが不正です!
      <br>' if($in{'mail'} !~ /^[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,6}$/);
      $ERROR .= 'メールアドレスが長すぎます!<br>' if(length($in{'mail'}) > 100);

      # 変更の適用
      $UserData{$in{'id'}}[1] = $in{'newpass'};
      $UserData{$in{'id'}}[2] = $in{'name'};
      $UserData{$in{'id'}}[3] = $in{'mail'};
      &Set_User();

      &Header();
      print <<E_O_M;
変更が完了しました!
E_O_M
   }
}

前回作成した関数を利用して変更するフォームを作成しました。
特に新しく使う関数などはありませんが、こういうユーザーデータの変更の処理などで
絶対に気を付けなければならないことがあります。

変更フォームに、ログイン時はパスワードを入力します。
そして、変更処理に移る際、そのパスワードを再びフォームで情報を渡す必要があります。
もし、パスワードを変更処理に渡していない場合、不正にアクセスできてしまうのです。
たとえば、 "test.cgi?m=Login&f=1&id=test...." というURLにアクセスすれば、
誰でも簡単にそのユーザーの情報を改ざんできてしまいます。

なので、このような場合にも限らず、管理モードなどには毎回必ずパスワードの認証をさせましょう。

scriptEYE