آژانس هواپیماییexchanging

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

شروع موضوع توسط babakweb ‏18 جولای 2005 در انجمن PHP

  1. babakweb

    babakweb Registered User

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

    PersianPC کاربر فعال صفحات داینامیک کاربر فعال

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

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

    کد:
    register.php?invitecode=1234567890&name=payam&date=11112005
    و بعد باید اطلاعات مورد نظر رو ، با استفاده از اطلاعات دریافتی از ادرس مون ( invitecode, name, date ) از دیتابیس بحونیم و در صورت صحت ، صفحه رو به بازدید کننده نشون بدیم.
     
  3. babakweb

    babakweb Registered User

    تاریخ عضویت:
    ‏29 اکتبر 2003
    نوشته ها:
    1,757
    تشکر شده:
    36
    محل سکونت:
    Tehran
    خب اين كار رو چجوري انجام بدم؟
    ميشه بيشتر توضيح بدي راجع به اين كه چجوري ديتابيس اطلاعات رو چك كنه و مثلا فقط يك بار اون صفحه با اون كد و اسم به نمايش در بياد؟
     
  4. babakweb

    babakweb Registered User

    تاریخ عضویت:
    ‏29 اکتبر 2003
    نوشته ها:
    1,757
    تشکر شده:
    36
    محل سکونت:
    Tehran
    راستي سايتت چي شده؟ پرشين پي سي كجاست؟ چرا رفتي رو بلاگ اسپات؟
     
  5. ads

    ads Registered User

    تاریخ عضویت:
    ‏23 جولای 2004
    نوشته ها:
    633
    تشکر شده:
    6
    ---------------------------------------
    اين يادداشت رو ويرايش كردم و توضيحات رو همينجا گذاشتم:
    ----------------------------------------

    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'");
     
  6. PersianPC

    PersianPC کاربر فعال صفحات داینامیک کاربر فعال

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

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

    babakweb Registered User

    تاریخ عضویت:
    ‏29 اکتبر 2003
    نوشته ها:
    1,757
    تشکر شده:
    36
    محل سکونت:
    Tehran
    ممنونم حسين جان
     
  9. ads

    ads Registered User

    تاریخ عضویت:
    ‏23 جولای 2004
    نوشته ها:
    633
    تشکر شده:
    6
    حالا سر در اوردي؟ انقال مطلب من در حد صفره
     
  10. babakweb

    babakweb Registered User

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