به نقل از 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'");