PHP+MySQLを使い課金型の情報配信サイトを作ろうと思っていますがどうしてよいのかわからない部分があるので教えてください。


このサイトでは数千個の情報を扱いますが、それぞれの情報はhtmlもしくはphpで用意し、個々の情報へのアクセスは課金しないと見れない仕組みとしたいのですが、情報へアクセスする際の権限管理をどのようなデータベース設計を行って管理したらよいのかという点についてわかりません。ですので教えていただきたいポイントとしてはテーブルの設計(どのようなフィールドを用意すればよいのか)という点になります。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/04/22 12:16:14
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:inokuni No.2

回答回数1343ベストアンサー獲得回数21

ポイント100pt

doc テーブル

  • doc_id // 情報のID
  • doc_name // 情報の名前

user テーブル

  • user_id // ユーザID
  • user_name // ユーザ名
  • user_pass // パスワード

kengen テーブル

  • doc_id // 情報ID
  • user_id // ユーザID
  • kigen // 有効期限

こんな感じでテーブルを分けて正規化するといいかと思います。

http://www.google.com/search?sourceid=navclient&hl=ja&ie...

id:jayz

権限テーブルを用意してあげるんですね。

ありがとうございます

ていうか、ちゃんとポイントもらえてます?

はじめてhatena使ったので・・・(;´д`)

2007/04/21 15:46:19

その他の回答1件)

id:inokuni No.1

回答回数1343ベストアンサー獲得回数21

ポイント35pt

情報へアクセスする際の権限管理をどのようなデータベース設計を行って管理したらよいのかという点についてわかりません。ですので教えていただきたいポイントとしてはテーブルの設計(どのようなフィールドを用意すればよいのか)という点になります。

どのようにしたいのか?によって、テーブルの設計は変わります。


簡単にしたいのであれば、

  • ユーザ名
  • パスワード

の2フィールドだけにして、ユーザ名とパスワードが一致すれば表示、みたいな感じにできます。


有効期限を定めるのであれば、

  • ユーザ名
  • パスワード
  • 有効期限

みたいな感じになるのかもしれません。


いずれにしろ、仕様がしっかり決まらないと設計のしようがありません。

id:jayz

簡単にしたいのであればユーザー名とパスワードの2フィールドとありますが、アクセス権限の管理はどう行うのですか?仮にuserテーブルに権限フィールドを追加しても一つのフィールドに最大数千(情報の数)の値を入れるというのはどうなのかと思いますし、、、はたまた、userテーブルとdoc(情報テーブル)を紐付けて、課金済みであればアクセスを許可する、とした場合でも数千の情報に対する”権限”を管理する場合どうしたらよいのか、、、

なにより質問が抽象的でしたね、すみません

少し入門書を読んだ程度なので基本的な面でわかっていないところがあるかもしれません

2007/04/21 15:28:18
id:inokuni No.2

回答回数1343ベストアンサー獲得回数21ここでベストアンサー

ポイント100pt

doc テーブル

  • doc_id // 情報のID
  • doc_name // 情報の名前

user テーブル

  • user_id // ユーザID
  • user_name // ユーザ名
  • user_pass // パスワード

kengen テーブル

  • doc_id // 情報ID
  • user_id // ユーザID
  • kigen // 有効期限

こんな感じでテーブルを分けて正規化するといいかと思います。

http://www.google.com/search?sourceid=navclient&hl=ja&ie...

id:jayz

権限テーブルを用意してあげるんですね。

ありがとうございます

ていうか、ちゃんとポイントもらえてます?

はじめてhatena使ったので・・・(;´д`)

2007/04/21 15:46:19
  • id:kurukuru-neko
    >テーブルの設計

    HTML/PHPのローケションが知られてしまい
    直接URL入力されてしまった場合
    PHP -> 何らかのチエックは可能
    HTML-> 表示されてしまう可能性がある

    全てのソースでチエックが必要になり面倒
    なので実際は、参照したいものをzzzとした
    場合チエックもじゅールをxxx.phpとした
    場合、参照したいzzzをURL or Cookie等で
    引き渡して、xxx.phpが目的のPHP/HTMLを
    動的に生成する事になると思われる。

    xxx.php?data=zzz -> 目的のPHP/HTMLを表示

    するとテーブル構成としては、
    zzzと HTML/PHPとの対応関係 をテーブルAと
    すると

    Table A:
    infoid int, // HTML / PHPの参照番号
    attr int, // HTML/PHP等のデータ属性
    price int, // 情報料金
    data char(xx), // 実際の参照するデータの場所
    primary keyはinfoid

    MYSQLが4.0以上ならHTML等はLOAD_FILEでDBに保存 
     してしまう方法もある。

    http://dev.mysql.com/doc/refman/4.1/en/string-functions.html#function_space
    ユーザーの支払い状況をTable Bとすると

    Table B:
    userid int, // ユーザの番号など固有識別
    infoid int, // 購入済み情報の番号
    price int, // 支払い済み金額
    order datetime,// 購入日
    expire datetime, // 有効期限
    refnum int, // 参照回数
    refdate datetime, // 最終参照日
    primary keyは、userid+infoid
    or
    Table B:
    userid int , // ユーザの番号など固有識別
    infoids text, // 購入済み情報番号
    primary keyは、userid
    ※:Table Aのinfoidは、1~65535に制限する必要がある

    ユーザー登録すると
    insert into B values(1234,space(65535) );
    等で初期化すれば
    select substr(infoids,zzz,1) from B where userid=ppp
    で検索して空白だと未登録とすれば、課金有無は判断可能。

    更新は多少面倒なのと初期容量が大きくなる
    (情報の数を制限すれば小さくは出来る)
    例:zzの情報を"1"に変更する
    update B set infoids=concat(substring(infoids,1,zz-1),"1",substring(infoids,zz+1)) from B wher userid=zz

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません