آموزش ساخت فرم عضویت با php و mysql
#1
Note 
همان طور که می دانیم استفاده از php و mysql برای ایجاد صفحات و سایت های داینامیک به دلایل مختلف بیش از پیش رو به گسترش است، از طرفی بسیاری از افراد تمایل دارند برای سایت یا صفحه خود، فُرمی جهت ثبت نام کاربران داشته باشند، مثلا برای ارسال خبرنامه و اطلاع از به روز رسانی سایت یا فراتر از آن برای ایجاد یک محیط کاربری و ورود و خروج کاربران به پنل سایت و خیلی چیزهای دیگر؛ اما قبل از دست یافتن به این هدفها، نیاز به ایجاد یک فرم ثبت نام و عضویت کاربر است تا اطلاعات لازم جهت ورود و خروج ایمن را در پایگاه داده داشته باشیم؛ از این رو به جهت آشنایی شما، در این آموزش قصد داریم روش ساخت یک سیستم ساده و در عین حال کاربردیِ ثبت نام و عضویت را با php و mysql آموزش دهیم.
ایجاد جدول و ردیف با دستور CREATE

قبل از هر چیز باید جدولی در پایگاه داده خود با نامی دلخواه بسازیم و ردیف هایی را در آن برای نگهداری نام کاربری، کلمه عبور و سایر اطلاعات مورد نیاز ایجاد کنیم، بدین منظور از دستور CREATE TABLE در MySQL استفاده می کنیم؛ در کد زیر ما سه ردیف id، username و password در جدول فرضی register ساخته ایم.

کد php:
<?php
//اطلاعات اتصال به پایگاه داده
mysql_connect("localhost""user""pass")
or die(
mysql_error());   
//نام دیتابیس
mysql_select_db("db")
or die(
mysql_error());
//ایجاد جدول و ردیف با دستور CREATE TABLE
mysql_query("CREATE TABLE register(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
username VARCHAR(255),
password VARCHAR(255)) ENGINE=MyISAM "
)
or die(
mysql_error());   
//پایان ارتباط با پایگاه داده  
mysql_close;  
?>

توضیح:

- ابتدا در قسمت mysql_connect باید اطلاعات لازم جهت اتصال به پایگاه داده را تعریف کنید (نام کاربری و کلمه عبور).
- در قسمت mysql_select_db دیتابیس مورد نظر را انتخاب کنید، این دیتابیس را باید قبلا ایجاد کرده باشید.
- دستور CREATE TABLE سه ردیف id با خاصیت افزایش خودکار (AUTO_INCREMENT)، ردیف username و password از نوع VARCHAR می سازد و در نهایت موتور پیش فرض ردیف ها را بر روی MyISAM تنظیم می کند.
- در نهایت هم اتصال با پایگاه داده با تابع mysql_close به پایان می رسد.
فرم html جهت عضویت و ثبت نام کاربر

پس از ساختن جداول و ردیف ها، اکنون نوبت به ساختن فرم html برای ارتباط با کاربر است، با طراحی یک صفحه به صورت html و قرار دادن چند فیلد در آن به فرض به عنوان نام کاربری و کلمه عبور، می توانیم اطلاعات کاربر را در جدول و در ردیف های تعیین شده ذخیره کرده و در واقع قابلیت عضویت در سایت را ایجاد کنیم، به همین جهت فرم زیر را جهت نمونه ساخته ایم.
کد php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>وبگو صفحه ثبت نام کاربر</title>
<!-- 
http://webgoo.ir -->
<style type="text/css">
body{
    
font-family:TahomaGenevasans-serif;
    
direction:rtl;
    
font-size:12px;
}
</
style>
</
head>
<
body>
<
form action="register.php" method="post">
<
label for="user">نام کاربری:</label>
<
input name="username" id="user" type="text" maxlength="255" />
<
label for="pass">کلمه عبور:</label>
<
input name="password" id="pass" type="password" maxlength="255" />
<
input type="submit" value="عضویت" />
</
form>
</
body>
</
html

توضیح:

- این فرم html، دو فیلد جهت انتخاب نام کاربری و کلمه عبور ایجاد می کند.
- در قسمت action آدرس فایل register.php را قرار می دهیم (اطلاعات فرم به این فایل ارسال می شوند).
- برای ارسال اطلاعات از متُد post استفاده کرده ایم.
- آنچه به عنوان مقدار یا value به فایل register.php ارسال می شود با قسمت مربوط به name در تگ input قابل شناسایی و دریافت است (در ادامه خواهیم دید).
- با قرار دادن خاصیت maxlength حداکثر تعداد کاراکترهای مجاز را تعیین می کنیم.
- قسمت مربوط به label جهت تعریف برچسب های استاندارد برای تگ های فرم، استفاده می شود.
- سرانجام اطلاعات با یک دکمه submit به فایل register.php ارسال می شوند.
بررسی و ذخیره اطلاعات با فایل register.php

پس از اینکه کاربر اطلاعات خود را در فیلدهای موجود در فرم بالا وارد می کند، این اطلاعات با متد post به فایل register.php ارسال می شوند و پارامترها با استفاده از post_$ در دسترس هستند، به مثال زیر توجه کنید.
کد php:
<?php
//دریافت و تعریف متغیر ها
$username $_POST['username'];
$password $_POST['password'];
?>

توضیح:

- با روش بالا، نام کاربری از فیلد username دریافت و در متغیر username ذخیره می شود، همچنین کلمه عبور از فیلد password دریافت و در متغیر password ذخیره می شود، با این کار اطلاعات کاربر در کد php قابل دسترس است و می توانیم پردازش های مورد نظر را روی آن اعمال کنیم.
- دقت کنید که معمولا آنچه برای php در کار با یک فرم html اهمیت دارد، متد استفاده شده (post یا get) و نام فیلدها است (نه آی دی آنها).


بررسی معتبر بودن اطلاعات

پس از اینکه اطلاعات فیلدها را در متغیر های قابل استفاده در php دریافت کردیم، باید معتبر بودن آنها را بررسی کنیم، پس کد زیر را در ادامه اضافه می کنیم.
کد php:
<?php
//دریافت و تعریف متغیر ها
$username $_POST['username'];
$password $_POST['password'];
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
if (!isset($username) || $username == ''){
    echo 
"فیلد نام کاربری نباید خالی باشد!";
    
$check_error 1;
}
//کلمه عبور
elseif (!isset($password) || $password == ''){
    echo 
"فیلد کلمه عبور نباید خالی باشد!";
    
$check_error 1;
}
//مجاز بودن انتخاب حروف انگلیسی به عنوان نام کاربری
elseif (preg_match('/^[a-zA-Z0-9 _-]+$/'$username) === 0){
    echo 
"نام کاربری دارای کاراکترهای غیر مجاز است!";
    
$check_error 1;
}
?>

توضیح:

- در دستور شرطی if، تنظیم شدن و خالی نبودن نام کاربری را با isset بررسی می کنیم، اگر نام کاربری خالی باشد، یک پیام به کاربر نشان داده می شود و متغیری به نام check_error (نامی دلخواه است) را برابر 1 قرار می دهیم (تا در ادامه وضعیت آن را چک کنیم).
- در دستور elseif اول، محاسبات بالا را بر روی کلمه عبور انجام می دهیم تا از خالی نبودن آن یا ارسال اشتباه فرم توسط کاربر اطمینان حاصل کنیم.
- در قسمت elseif آخر نیز با تابع preg_match بررسی می کنیم تا ببینیم آیا کارکترهای وارد شده توسط کاربر بین حروف و اعداد انگلیسی جای دارند یا خیر، همچنین دو علامت - و _ هم جزء کاراکترهای مجاز است، اگر کاراکتری خارج از این شرایط ارسال شود، بررسی preg_match نادرست یا false شده (وضعیت با عدد صفر برگردانده می شود) و پیام خطا به کاربر نشان داده خواهد شد.
بررسی اعتبار اطلاعات فرم، بسته به اینکه هدف و خواسته شما چه چیز باشد، متفاوت و سلیقه ای است، لذا مثال های عنوان شده صرفا جهت نمونه است و هیچ محدودیتی در این خصوص وجود ندارد.


حفظ امنیت اطلاعات

اگر همه چیز درست باشد و کاربر فیلدها را به طور کامل و صحیح پُر نماید، نوبت به ذخیره اطلاعات در دیتابیس است، اما قبل از اینکه به این کار بپردازیم، یک امر مهم را نباید فراموش کنیم، حفظ امنیت اطلاعات و پایگاه داده! توضیح اینکه رعایت برخی مسائل امنیتی در کار با پایگاه داده ضروری است، چرا که اگرچه بیشتر کاربران هیچ سوء نیتی ندارند، اما ممکن است هر از چندگاهی برخی پیدا شوند که به دنبال کوچکترین فرصتی برای نفوذ و آسیب زدن به سیستم شما باشند، از طرفی ذخیره اطلاعات و مخصوصا کلمه عبور کاربران، باید به صورت رمزی شده باشد تا امکان هر نوع سوء استفاده احتمالی را از بین ببرد و ضریب امنیت را افزایش دهد، بدین منظور ما از دو تابع mysql_real_escape_string و md5 در php استفاده می کنیم.

کد php:
<?php
//اطلاعات اتصال به پایگاه داده
mysql_connect("localhost""user""pass")
or die(
mysql_error());   
//نام دیتابیس
mysql_select_db("db")
or die(
mysql_error());
//دریافت و تعریف متغیر ها
$username $_POST['username'];
$password $_POST['password'];
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
if (!isset($username) || $username == ''){
    echo 
"فیلد نام کاربری نباید خالی باشد!";
    
$check_error 1;
}
//کلمه عبور
elseif (!isset($password) || $password == ''){
    echo 
"فیلد کلمه عبور نباید خالی باشد!";
    
$check_error 1;
}
//مجاز بودن انتخاب حروف انگلیسی به عنوان نام کاربری
elseif (preg_match('/^[a-zA-Z0-9 _-]+$/'$username) === 0){
    echo 
"نام کاربری دارای کاراکترهای غیر مجاز است!";
    
$check_error 1;
}
//جلوگیری از نفوذ به دیتابیس
$username mysql_real_escape_string($username);
$password md5($password);
if (
$check_error != 1){
//در این مرحله اطلاعات را در دیتابیس ذخیره خواهیم کرد
##########PHP MySQL INSERT INTO db##########
}
//پایان ارتباط با پایگاه داده  
mysql_close;
?>

توضیح:


- همانطور که می بینید، در اینجا اطلاعات اتصال به پایگاه داده را در ابتدا تعریف کرده ایم، این کار بدین جهت نیاز است که تابع mysql_real_escape_string نیاز به اطلاعات اتصال به پایگاه داده دارد، در غیر اینصورت با خطا مواجه خواهیم شد، از این تابع برای جلوگیری از MySQL Injection یا همان جلوگیری از نفوذ به دیتابیس استفاده می شود.
- از تابع md5 برای رمزی کردن رشته ها استفاده می شود، اگرچه هیچ سیستمی به طور کامل ایمن نیست، ولی با استفاده از تابع md5 تا حدود زیادی امنیت کلمه های عبور کاربران حفظ می شود (توجه داشته باشید که برگرداندن پسورد های اینکُد یا رمزی شده با md5 تقریبا غیر ممکن است).
ذخیره اطلاعات با INSERT INTO در MySQL

اکنون که همه چیز را به درستی انجام داده ایم، نوبت به گام آخر است، در این مرحله اطلاعات کاربر را در دیتابیس و جدول register در ستون های username و password ذخیره می کنیم تا بعدا از آنها استفاده کنیم، این کار را در کد زیر انجام داده ایم.
کد php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>وبگو بررسی و ثبت اطلاعات کاربر</title>
<!-- 
http://webgoo.ir -->
<style type="text/css">
body{
    
font-family:TahomaGenevasans-serif;
    
font-size:12px;
    
direction:rtl;
}
</
style>
</
head>
<
body>
<?
php
//اطلاعات اتصال به پایگاه داده
mysql_connect("localhost""user""pass")
or die(
mysql_error());   
//نام دیتابیس
mysql_select_db("db")
or die(
mysql_error());
//دریافت و تعریف متغیر ها
$username $_POST['username'];
$password $_POST['password'];
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
if (!isset($username) || $username == ''){
    echo 
"فیلد نام کاربری نباید خالی باشد!";
    
$check_error 1;
}
//کلمه عبور
elseif (!isset($password) || $password == ''){
    echo 
"فیلد کلمه عبور نباید خالی باشد!";
    
$check_error 1;
}
//مجاز بودن انتخاب حروف انگلیسی به عنوان نام کاربری
elseif (preg_match('/^[a-zA-Z0-9 _-]+$/'$username) === 0){
    echo 
"نام کاربری دارای کاراکترهای غیر مجاز است!";
    
$check_error 1;
}
//جلوگیری از نفوذ به دیتابیس
$username mysql_real_escape_string($username);
$password md5($password);
if (
$check_error != 1){
//در این مرحله اطلاعات را در دیتابیس ذخیره خواهیم کرد
mysql_query("INSERT INTO register (username,password) VALUES('$username','$password')")
or die(
mysql_error());
echo 
"عضویت شما با موفقیت انجام شد!<br />";
}
//پایان ارتباط با پایگاه داده  
mysql_close;
?>
</body>
</html> 

توضیح:

- ساختار دستور INSERT INTO بسیار ساده است، اطلاعات را در ردیف ها ی تعین شده به شیوه آرایه، کلیدها و مقادیر ذخیره می کند، برای جدا سازی ستون ها و مقادیر آنها از علامت , استفاده کنید.
- در کد بالا صرفا جهت مثال و آشنایی شما چند فیلد را جهت نمونه آورده ایم، شما می توانید با توجه به نیازتان قابلیت های بیشتری برای ثبت نام و عضویت کاربران ایجاد کنید و از این لحاظ محدودیتی نیست.
- برای استفاده از اطلاعات ذخیره شده ی اعضای سایت، نیاز به تعریف و نوشتن کدهای دیگری است که در این مجال فرصت پرداختن به آنها نیست، این امر را به آموزش های بعدی موکول می کنیم.

webgoo.ir

این سایت هم خیلی عالی و قدم به قدم توضیح داده:
How to Create Registration Page in PHP/MySQL | Free source code, tutorials and articles
How to Create Login Page in PHP/MySQL | Free source code, tutorials and articles

پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Note آموزش MVC به زبان ساده (تصویری) Daniel 1 802 16-08-2016 ساعت 09:24
آخرین ارسال: aaiz
Note آموزش MVC Daniel 1 679 26-11-2015 ساعت 12:56
آخرین ارسال: bkk
Note کتاب آموزش PHP از مقدماتی تا پیشرفته Stack OverFlow 0 991 16-02-2015 ساعت 10:48
آخرین ارسال: Stack OverFlow
Note چرا میگن نباید دیگه از mysql در php استفاده کنیم؟ FireBug 3 910 18-01-2015 ساعت 16:29
آخرین ارسال: rockstar
Note سوال پروژه عملی یهویی php and Mysql . لطفاً راهنمایی کنید... rouzbeh 1 508 26-08-2014 ساعت 13:52
آخرین ارسال: REza mAX
Note خطای MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL Daniel 0 398 18-08-2014 ساعت 17:43
آخرین ارسال: Daniel
Note دریافت اطلاعات از json و ذخیره در mysql infoweb 1 473 06-08-2014 ساعت 15:00
آخرین ارسال: REza mAX
Note ذخیره و بازیابی اطلاعات در دیتابیس MySQL REza mAX 0 444 03-08-2014 ساعت 10:43
آخرین ارسال: REza mAX
Note ایجاد ارتباط از php به mysql hasti 4 1,037 11-07-2014 ساعت 22:06
آخرین ارسال: Comodo
Note جلوگیری از ورود رکورد تکراری (PHP-MySQL) Php1 1 862 16-06-2014 ساعت 10:37
آخرین ارسال: BaNNer LorD

کاربرانِ درحال بازدید از این موضوع:   1 مهمان