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


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

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

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

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

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

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

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

会員登録機能拡張-2


今度は、会員登録スクリプトの管理モードに会員の各ステータスでソート(並び替え)ができるようにします。

変更する個所は管理モードのみです。

# 管理モード
sub Admin {
   # パスワード不一致ならエラー
   &Error('パスワードが違います!') if($in{'pass'} ne $ADMIN_PASS);

   # 会員データの読み込み
   &Get_User();
   # ヘッダー
   &Header();
   # ユーザーフラグ
   $f = 0;
   print <<E_O_M;
<form action="test.cgi" method="POST">
<SELECT name="sort">
<OPTION value="0">ID</OPTION>
<OPTION value="1">PASS</OPTION>
<OPTION value="2">名前</OPTION>
<OPTION value="3">メールアドレス</OPTION>
</SELECT><input type="submit" value="並び替え">
<input type="hidden" name="pass" value="$in{'pass'}">
<input type="hidden" name="m" value="Admin">
</form>
</body>
<table border="1">
<tr><td>ID</td><td>PASS</td><td>名前</td><td>メールアドレス</td></tr>
E_O_M
   foreach(sort { $UserData{$a}[$in{'sort'}] cmp $UserData{$b}[$in{'sort'}] } keys %UserData) {
      # ユーザーが一人でもいるならユーザーフラグを真
      $f = 1;
      print "<tr><td>$UserData{$_}[0]</td><td>$UserData{$_}[1]</td>
      <td>$UserData{$_}[2]</td><td>$UserData{$_}[3]</td></tr>";
   }
   # ユーザーフラグが偽ならユーザー不在のメッセージ
   print "<tr><td colspan=\"4\">登録されたユーザーはありません</td></tr>" unless($f);
   print "</table></body></html>"; 
}

変更点は、HTMLの出力部に並び替え用のフォームが設置されたことと、foreach文の配列部分がソートに変わったことです。
この方法ですと、指定された要素を昇順に並び替えることができます。
非常にスクリプトが簡潔に書かれています。これも擬似データベースを作成してこその仕様です。
しかし、今回の場合でも欠点が存在します。それは、見ての通り降順に並び替えができないことです。

降順にも対応させるためには、ソートを複数用意する必要があります。
しかし、foreach文をもう一つ用意するとスクリプトが無駄に大きくなってしまいます。
そういう場合は、ソートをルーチン化させます。

ソートは、ルーチンとしてまとめることができます。また、そのルーチン内部では条件分岐も使えるので
ソートの機能を格段に上げることができます。
宣言方法と使用方法は下記の通りです。(降順の場合は、$in{'f'} が"真"という設定で行います)

sub sort1 {
   if(!$in{'f'}) {
      # 昇順
      $UserData{$a}[$in{'sort'}] cmp $UserData{$b}[$in{'sort'}]
   } else {
      # 降順
      $UserData{$b}[$in{'sort'}] cmp $UserData{$a}[$in{'sort'}]
   }
}

#   ソートの呼び出し方
#   foreach(sort { &sort1() } keys %UserData) {
#   .
#   .
#   .

ここでの注意点は、ソートをルーチン化した場合にはセミコロンを付けないことです。
これを応用して、さまざまなソートを作成することができます。

scriptEYE