2012-01-03 2 views
0

나는 모든 다양한 필드로 데이터베이스를 설정했으며 필요한 모든 등록과 로그인 등을 수행 할 수 있습니다. - 지금까지 그렇게 좋았습니다! 다음과 같이 내가 지금해야 할 일은PHP에서 멤버십 MySQL 데이터베이스를 자동으로 업데이트

은 다음과 같습니다 새로운 멤버가 자신을 등록하려고 할 때 (말하자면, 스폰서 등)/그녀는 기존 회원의 이메일 주소를 제공해야합니다

. 스폰서 이메일이 가짜이거나 데이터베이스에 존재하지 않는 경우 가입 신청이 거부됩니다.

정품 경우에, 나는 자동으로 스폰서의 기록을 검색하고 두 가지 분야 중 하나에 새 구성원을 넣어 그/그녀의 기록을 업데이트해야합니다. 각 회원은 두 명의 신입 회원을 후원 할 수 있습니다. 따라서 스폰서가 신입 회원을 갖지 않으면 필드 -A와 필드 -B는 비어있을 것이므로 신입 회원의 이메일은 필드 -A에 배정됩니다. 반면에 이미 필드 A에 항목이 있으면 새 구성원 전자 메일이 필드 B에 저장됩니다. 둘 다 이미 채워지면 경고가 표시되고 스폰서는 "제 3의"신입 회원을 소개 할 수있는 권한을 거부합니다.

나는이 어떤 도움을 대부분의 감사 것은 성공하지 연구 일주일의 가장 중요한 부분을 소비 한. 나는이 훌륭한 사이트에 대한 전문가의 대답이 매우 간단하다고 확신합니다.

답변

3

팡맨,

이 경우 2 열을 사용하지 않을 것입니다.

예를 들어 새 테이블 member_sponsors를 만들 것입니다.

이 구성 것이다 :

ID - 후원 날짜 멤버 - 스폰서 memeber_id의 아이디 - - 새로운 일원이 sponsor_date의 ID 자동 차 인덱스 sponser_id를 증가?

단순히이 테이블을 조회하고 덜 2 다음 (또는 도로의 아래 당신이 쉽게 할 수있는이 값을 늘리려면)이 포함 된 경우 확인할 수 있습니다이 방법.

그런 다음이 테이블에 정보를 추가하십시오.

희망이 개념은 의미가 있으며 도움이됩니다.

등록 요청이 제출
Field name   Type 
------------------------------------------ 
id     int (primary, auto) 
name     varchar 
email     varchar 
submember1   int 
submember2   int 

, 난 당신이 "와 같은 값을 가질 수 있습니다 가정

+0

감사의 말 Tim - 별도의 테이블이있는 것이 좋습니다. – fangman

2

는 기존 멤버와 테이블은 다음과 같은 구조로"회원 "이라고 가정하면 sponsor_email "을 확인하십시오. 이 값을 살균하고 이메일 주소인지 확인한 후

SELECT 
    id, 
    name, 
    submember1, 
    submember2 
FROM 
    members 
WHERE 
    email = "'.$sponsor_email.'" 

을 ... 그리고 가입 사용자가 유효한 회원의 이메일 주소를 가지고 있는지 확인하십시오 (힌트 : 사용 정규식), 귀하의 회원 대한 정보를 잡아. , $member['submember1'] 경우 0보다 큰 (이미 작성) - 당신이 새로운 가입을 넣어하는 슬롯 파악해야합니다, 지금

if ($member['submember1'] > 0 && $member['submember2'] > 0) { 
    // add warning to sponsor, reject the signup 
} 

:이 경우, 해당 멤버는 오픈 슬롯이 있는지 확인 가입은 슬롯 2에, 슬롯 1에 들어갑니다.

더 유연한 방법은 멤버와 스폰서를 연결하는 연관 테이블을 추가하는 것입니다. 대신에 을 사용하여 멤버 테이블에서이를 추적하는 필드를 추가하십시오. 이 접근법에는 몇 가지 장점이 있습니다. 가장 중요한 점은 2 개가 아닌 5 개의 submembers를 늘리려는 경우 데이터베이스 구조를 변경하지 않고도 코드의 작은 부분을 쉽게 변경할 수 있다는 것입니다. "당신의 방법"을 완료하면 데이터베이스와 코드를 변경해야 할 것입니다 ...

if ($member['submember1'] > 0 && $member['submember2'] > 0 && $member['submember3'] > 0 && $member['submember4'] > 0 && $member['submember5'] >0) { 
    // add warning to sponsor, reject the signup 
} 

... 퍽! 게다가, 이것은 새로운 등록을 넣을 슬롯을 결정 짓는 털이 많을 것입니다. 연관 테이블에는이 문제가 없습니다. 연관 테이블 경로를 사용하여, 당신은 아직도 멤버 테이블이 있습니다

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 당신이 지금 할 일은의 수를 변경하는 ... 등, 그것은 일정하게, 어디에서 와서 그것을 데이터베이스 설정을 할 수 있습니다 허용 된 스폰서는 하나의 값을 수정합니다. 이 방법을 사용하면 코드를보다 유연하고 변경할 준비가됩니다.

+0

크리스. 고마워. - 이걸 시험해보고있어. 아마도 도움이 더 필요할거야. 답장을 보내 주시면 감사하겠습니다. – fangman

+0

잘 들어라. 연관 테이블의 개념은 중요하다. 만약이 메커니즘을 아직 사용하지 않았다면, 학습은 매우 강력한 개념을 이해에 추가 할 것이다. 데이터베이스로 구동되는 대부분의 시스템은이 개념을 사용합니다. 크고 작은 시스템에서 반복해서 반복되는 것을 볼 수 있습니다. 데이터베이스와 SQL을 시작으로 어떻게 작동하는지 (그리고 테이블을 올바르게 설정했는지) 이해했는지 확인하십시오. –

관련 문제