:登録要求が送信されると
Field name Type
------------------------------------------
id int (primary, auto)
name varchar
email varchar
submember1 int
submember2 int
、私は "のようなあなたは価値があるでしょうと仮定sponsor_email "をチェックしてください。この値を消毒し、それが電子メールアドレスであることを確認した後
SELECT
id,
name,
submember1,
submember2
FROM
members
WHERE
email = "'.$sponsor_email.'"
を...とサインアップするユーザーは有効なメンバーのメールアドレスを持っていることを確認してください:(ヒント:使用正規表現)は、あなたのメンバーに関する情報をつかみます。 、$member['submember1']
がある場合はゼロよりも大きいが(すでにいっぱい) - あなたはこの新しいサインアップを置くためにどのスロットを把握する必要があります、今
if ($member['submember1'] > 0 && $member['submember2'] > 0) {
// add warning to sponsor, reject the signup
}
:もしそうなら、そのメンバーは、オープンスロットを持っているかどうかを確認しますサインアップはスロット2に、スロット1にはサインインします。
さらに柔軟な方法は、メンバテーブルとスポンサーをリンクする連想テーブルを追加することです。の代わりにを使用して、これをメンバテーブルで追跡するフィールドを追加します。このアプローチにはいくつかの利点があります。最も重要なことは、データベース構造に触れることなく、コード内の小さなスポットを簡単に変更することができます。 「あなたの方法」を完了したら、データベースとコードを変更する必要があります。
if ($member['submember1'] > 0 && $member['submember2'] > 0 && $member['submember3'] > 0 && $member['submember4'] > 0 && $member['submember5'] >0) {
// add warning to sponsor, reject the signup
}
... yuck!さらに、これは、新しいサインアップを挿入するスロットを髪型にすることになります。連想表にはこの問題はありません。
Field name Type
------------------------------------------
id int (primary, auto)
name varchar
email varchar
...そして、あなたはmember_sponsorsテーブルを持っている:連想テーブルのルートを使用して、あなたはまだメンバー表を持って
Field name Type
------------------------------------------
id int (primary, auto)
sponsor_id int
member_id int
MEMBER_IDフィールドには、「スポンサー」メンバーのIDを持ちますsponsor_idフィールドは、「スポンサード」メンバーのIDを保持します。サインアッププロセスでこれらのテーブルを使用して
限り、電子メールの一致として、あなたが行を持つことになり、もう一度、あなたのメンバーを取得するだけでなく、参加しないと今、彼らの現在のスポンサー
SELECT
members.id,
members.name,
COUNT(member_sponsors.id) AS sponsored_count
FROM
members
LEFT JOIN
member_sponsors ON
member_sponsors.member_id = members.id
WHERE
email = "'.$sponsor_email.'"
GROUP BY
members.id
のカウント指定されたユーザーが持っているスポンサーメンバーのID、名前、および現在の数を表示します。あなたのPHPは現在、次のようになります。
$limit_on_sponsorships = 2;
if ($member['sponsored_count'] >= $limit_on_sponsorships) {
// add warning to sponsor, reject the signup
}
$limit_on_sponsorships
...など、あなたは数に変更を加えるために今しなければならないすべてを、どこから来て、それに一定にし、それデータベース設定することができます許可されたスポンサーはその1つの値を変更します。この方法を使用すると、コードをより柔軟に変更できるようになります。
ありがとうTim - 別のテーブルを持つことをお勧めします - 私はそれを行っています! – fangman