• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

سيستم عضويت فقط با دعوت‌نامه مانند جي‌ميل و اركات

babakweb

Registered User
تاریخ عضویت
29 اکتبر 2003
نوشته‌ها
1,759
لایک‌ها
36
محل سکونت
Tehran
سلام
بلدم كه چطوري سيستم عضوگيري بسازم. اما مي‌خوام اين عضوگيري فقط از طريق ارسال دعوت‌نامه‌ي اعضا انجام بشه. مثل اركات و جي‌ميل.
چطوري مي‌تونم اين كار رو بكنم؟
فرستادن ايميل از طريق اعضا را هم بلدم اما نمي‌دانم چطور كاري كنم كه مثلا صفحه‌ي عضويت فقط براي اون كسي قابل ديدن بشه كه ايميل دعوت‌نامه براش اومده؟
 

PersianPC

کاربر فعال صفحات داینامیک
کاربر فعال
تاریخ عضویت
9 فوریه 2005
نوشته‌ها
583
لایک‌ها
1
سن
35
محل سکونت
Tehran
میتونی یه کد رندوم تولید کنی و اونو تو دیتابیس ذخیره کنی ، بعد اگه ، تو صفحه عضویت این کد درست وارد شده بود ، اونوقت ، صفحه عصویت رو نشون بده و بعد از عضویت هم این کد رو پاک کن از تو دیتابیس. ( البته بجز اینکد باید چندتا چیز دیگه هم برای امنیت بیشتر ، مشخص کنی ، مثل نام کاربری طرفی که دعوت کرده یا تاریخ دعوت یا ... )

مثلا کد ما 1234567890 هست و ادرس صفحه register.php . اگه متغیر invitecode ( و بقیه متغیر ها که دربالا اشاره کردم ) درست وارد شده بود ، صفحه رو نشون بده :

کد:
register.php?invitecode=1234567890&name=payam&date=11112005

و بعد باید اطلاعات مورد نظر رو ، با استفاده از اطلاعات دریافتی از ادرس مون ( invitecode, name, date ) از دیتابیس بحونیم و در صورت صحت ، صفحه رو به بازدید کننده نشون بدیم.
 

babakweb

Registered User
تاریخ عضویت
29 اکتبر 2003
نوشته‌ها
1,759
لایک‌ها
36
محل سکونت
Tehran
خب اين كار رو چجوري انجام بدم؟
ميشه بيشتر توضيح بدي راجع به اين كه چجوري ديتابيس اطلاعات رو چك كنه و مثلا فقط يك بار اون صفحه با اون كد و اسم به نمايش در بياد؟
 

babakweb

Registered User
تاریخ عضویت
29 اکتبر 2003
نوشته‌ها
1,759
لایک‌ها
36
محل سکونت
Tehran
به نقل از PersianPC :
میتونی یه کد رندوم تولید کنی و اونو تو دیتابیس ذخیره کنی ، بعد اگه ، تو صفحه عضویت این کد درست وارد شده بود ، اونوقت ، صفحه عصویت رو نشون بده و بعد از عضویت هم این کد رو پاک کن از تو دیتابیس. ( البته بجز اینکد باید چندتا چیز دیگه هم برای امنیت بیشتر ، مشخص کنی ، مثل نام کاربری طرفی که دعوت کرده یا تاریخ دعوت یا ... )

مثلا کد ما 1234567890 هست و ادرس صفحه register.php . اگه متغیر invitecode ( و بقیه متغیر ها که دربالا اشاره کردم ) درست وارد شده بود ، صفحه رو نشون بده :

کد:
register.php?invitecode=1234567890&name=payam&date=11112005

و بعد باید اطلاعات مورد نظر رو ، با استفاده از اطلاعات دریافتی از ادرس مون ( invitecode, name, date ) از دیتابیس بحونیم و در صورت صحت ، صفحه رو به بازدید کننده نشون بدیم.
راستي سايتت چي شده؟ پرشين پي سي كجاست؟ چرا رفتي رو بلاگ اسپات؟
 

ads

Registered User
تاریخ عضویت
23 جولای 2004
نوشته‌ها
633
لایک‌ها
6
سن
40
به نقل از babakweb :
ميشه بيشتر توضيح بدي راجع به اين كه چجوري ديتابيس اطلاعات رو چك كنه و مثلا فقط يك بار اون صفحه با اون كد و اسم به نمايش در بياد؟

---------------------------------------
اين يادداشت رو ويرايش كردم و توضيحات رو همينجا گذاشتم:
----------------------------------------

1- ساخت جدول: جدول بايد حداقل سه ستون داشته باشد: id با خاصيت auto_increment و code و used كه فقط مي تونه دو حالت 0 يا 1 داشته باشه و به صورت پيش فرض در حالت 0 هستش. براي ايجاد جدول مي توني از كدهاي زير استفاده كني:
کد:
CREATE TABLE invite (
userid int(10) NOT NULL auto_increment,
code varchar(255) NOT NULL default '',
used enum('0','1') NOT NULL default '0',
PRIMARY KEY (userid)
) TYPE=MyISAM COMMENT='Invite Information';

2-ساخت لينك عضويت:
براي ساخت لينك عضويت هم كافيه كه يك كد بسازي و اون رو توي جدول قرار بدي. براي ساخت كد مي توني از تابع زير استفاده كني:

کد:
function makeRandomcode() {
 $salt = "abchefghjkmnpqrstuvwxyz0123456789";
 srand((double)microtime()*1000000);
 $i = 0;
 while ($i <= 7) {
  $num = rand() % 33;
  $tmp = substr($salt, $num, 1);
  $code = $code . $tmp;
  $i++;
 }
  return $code;
 }
 $random_code = makeRandomcode();
 $code = md5($random_code);

خب حالا بايد اين كد رو توي ديتابيس قرار بدي:

کد:
 $sql = mysql_query("INSERT INTO invite (code)
 VALUES('$db_code')") or die (mysql_error());

براي اينكه بتوني id مربوط به اين كد رو به دست بياري بايد خط زير هم اضافه كني:

کد:
 $userid = mysql_insert_id();

در آخر هم بايد يه ايميل بفرستي كه خط زير توش باشه:

کد:
http://www.caspianblog.com/do.php?id=$userid&code=$db_code

يا به صورت كامل يه چيزي تو مايه هاي كد زير:

کد:
$subject = "Signup";
 $message = "

Welcome To Babakweb.com.

Now, you can register.

Click on the link:
	http://www.caspianblog.com/do.php?id=$userid&code=$db_code

Thanks for joining us,

";
 mail($email_address, $subject, $message,
 "From: Babakweb <mailto:[email protected]>" . phpversion());
echo 'Email was sent!';

3- ساخت فايل چك كننده (do.php): الآن به يه برنامه احتياج داريم كه چك كنه اون id با كد كه در لينك هستش توي ديتابيس وجود داره يا نه يا اگر وجود داره استفاده شده يا نشده.

اول بايد id و code رو از لينك دريافت كنيم:

کد:
 $userid = $_REQUEST['id'];
 $code = $_REQUEST['code'];

حالا بايد توي ديتابيس ببينيم همچين چيزي وجود داره يا نه كه من ترجيح مي دم از كدهاي زير استفاده كنم:

کد:
 $sql_check = mysql_query("SELECT * FROM invite 
 WHERE  userid='$userid' AND code='$code' AND use='0'");
 $check = mysql_num_rows($sql_check);

 $sql_doublecheck = mysql_query("SELECT * FROM invite 
 WHERE  userid='$userid' AND code='$code' AND activated='1'");
 $doublecheck = mysql_num_rows($sql_doublecheck);

خب اگر check=0 و doublecheck=0 باشن همچين اطلاعاتي وجود نداره و لينك الكيه.
اگر check=0 و doublecheck=1 باشن لينك وجود داره ولي قبلا استفاده شده.
اگر هم check=1 و doublecheck=0 باشن كه لينك درسته و فرم ثبت نام رو مي شه نشون داد.

در آخر هم بايد يك خط ديگه اضافه بشه تا مقدار used توي ديتابيس رو به يك تغيير بده تا معلوم بشه از لينك استفاده شده. البته بهت پيشنهاد مي كنم اين خط رو جايي بكار ببري كه ثبت نام نهايي شده مثلا دقيقا قبل از نمايش متن مربوط به موفقيت آميز بودن ثبت نام چون اگر جايي زودتر از اون به كار ببري ممكنه قبل از اينكه يكي ثبت نامش تموم بشه به صورت اتفاقي صفحه بسته بشه و وقتي دوباره بياد از لينك استفاده كنه با پيغام مربوط به استفاده شدن لينك روبرو بشه.

کد:
$sql = mysql_query("UPDATE invite SET activated='1' 
WHERE userid='$userid; AND code='$code'");
 

PersianPC

کاربر فعال صفحات داینامیک
کاربر فعال
تاریخ عضویت
9 فوریه 2005
نوشته‌ها
583
لایک‌ها
1
سن
35
محل سکونت
Tehran
من این کد رو که جناب ads گذشتن هنوز ندیدم ، اگه با این کد کارت راه افتاد که خداروشکر ، ولی اگه بازم مشکل داشتی بگو همینجا ، برات کامل توضیح بدم ...

در ضمن برای سایت هم یه سری مشکلات پیش اومده ( یعنی نامردا پیش اوردن ! ) که فعلا اینجوری شده ، به زودی بر میگردم ، مرسی از معرفتت ...
 

ads

Registered User
تاریخ عضویت
23 جولای 2004
نوشته‌ها
633
لایک‌ها
6
سن
40
حالا سر در اوردي؟ انقال مطلب من در حد صفره
 

babakweb

Registered User
تاریخ عضویت
29 اکتبر 2003
نوشته‌ها
1,759
لایک‌ها
36
محل سکونت
Tehran
اصلا اينطور نيست. خيلي خوب توضيح دادي. مرسي.
 
بالا