چگونه : یک فرم ساده ثبت نام در PHP با امکان کار با دیتابیس MySQL بنویسیم ؟!

چگونه : یک فرم ساده ثبت نام در PHP با امکان کار با دیتابیس MySQL بنویسیم ؟!

سلام :)

یکی از سوالاتی که همیشه توسط دوستان مخصوصا آنهایی که به تازگی کار با php را شروع کرده اند ، پرسیده میشود، این است که چطور اطلاعات را از طریق یک فرم از کاربر بگیریم و آن را در دیتابیس ذخیره کنیم.

برای پاسخ راحت تر اجازه دهید کمی کلیات کار را شرح دهیم و بعد وارد جزئیات شویم تا برای دوستانی که آشنایی کمتری ممکن است با موضوع داشته باشند نیز مفید باشد.

  • فرم دریافت اطلاعات : فرم دریافت اطلاعات شامل ساختاری از تگ های مختلف فرم مانند <form>,<input>,<textarea>,<select>  و … می باشد که با توجه به نیازمان می توانیم ورودی های مختلفی مانند متن ، دکمه ، منوی پایین افتادنی،متن طولانی و … را با آنها ایجاد کنیم.در انتها نیز این فرم داده ها را به فایلی که درش مشخص کرده ایم ، ارسال می کند
  • فایل PHP برای پردازش اطلاعات ارسالی فرم : حالا که داده ها را از طریق فرم در اختیار داریم نیاز به کدهایی داریم تا آنها را پردازش کنیم.منظور از پردازش عموما دو کار است.اول اعتبارسنجی (validation) برای اطمینان از اینکه کاربر داده های صحیحی وارد کرده است یا نه .فرضا امتحان می کنیم که در ورودی ارسالی کاربر برای تلفن ، حروف موجود نباشد و … .دوم هم بلایی که می خواهیم بر سر داده ها بیاوریم.ممکن است بخواهیم آنها را به آدرسی ایمیل کنیم ، یا در دیتابیس ذخیره کنیم و یا در یک فایل متنی روی هاست مان ویا اصلا خروجی pdf بگیریم و یا های دیگر :)

در اینجا فرض می کنیم که می خواهیم یک فرم ثبت نام کاربران داشته باشیم که سه ورودی نام کاربری ، کلمه عبور و ایمیل کاربر را دریافت کند و بعد از اینکه مطمئن شد آدرس ایمیل از قالب درستی برخوردار است ( email@email.tld ) ، همه اطلاعات را در جدولی بنام users ذخیره کند .

قدم اول – کد HTML

فرم ما کدهایی شبیه زیر خواهد داشتکه باید آن را در فایلی بنام index.html ذخیره کنید :

index.html
<!doctype html>  
<html lang="fa">
<head>
<meta charset="utf-8">  
<title>Simple form</title>

<style type="text/css">
body,input[type="submit"]
{
	  text-align:center;
	  font:.9em tahoma
}
form 
{
	  width:400px;
	  margin:200px auto 0 auto;
	  border:1px silver solid
}

</style>
</head>

<body dir="rtl">
<form action="register.php" method="post">
نام کاربری : <input name="username" type="text" /> <br />
کلمه عبور :  <input name="password" type="password" /><br />
ایمیل : <input name="email" type="text" /><br />
<input name="send" type="submit" value="ثبت نام" />
</form>
</body>
</html>

همانطور که می بینید این صفحه از قوانین html5 نیز تا حدودی تبعیت می کند . در خط ۸ یک سبک css تعریف کردیم تا استایل مربوطه را هم به تگ body اعمال کند و هم به همه تگ های input که خصیصه type شان برابر submit باشد (در کد بالا یکی داریم !)

در خط ۲۴ نیز دو خصیصه مهم داریم که اولی action است و تعیین می کند بعد از اینکه کاربر روی دکمه ثبت نام کلیک کرد ، اطلاعات فرم به کدام صفحه فرستاده شوند و دومی نیز method یا روش ارسال داده هاست که معمولا از پست استفاده میشود .

 

قدم دوم – کد PHP

حالا باید ترتیب صفحه ای را بدهیم که در قسمت action فرم تعریف کردیم.

دقت کنید که می توانیم هر دو یعنی هم فرم و هم کدهای php را در یک صفحه واحد داشته باشیم و در آن صورت خصیصه Action باید خالی باشد.

کد های صفحه register.php ما به این صورت هستند :

register.php
<?php

$con=mysql_connect('localhost','root','');

if(!$con) {die ('MySQL connect error !');}

if(!mysql_select_db('test')){die('MySQL database select error !');}

$user=$_POST['username'];
$pass=$_POST['password'];
$mail=$_POST['email'];

if(!$user)
{

  	die('لطفا نام کاربری را وارد کنید !');

}
if(!$pass)
{

    die('لطفا کلمه عبور را وارد کنید !');

}
if(!$mail)
{

    die('لطفا ایمیل را وارد کنید !');
}
if(!preg_match("/[a-zA-Z0-9._-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z\.]+/",$mail))
{

    die('آدرس ایمیل صحیح نیست !');

}

$pass_hash=md5($pass);
$query= mysql_query ("insert into users (u_username,u_password,u_email)
                                  values('$user','$pass_hash','$mail');
");

if(mysql_affected_rows()>0)
{

  die ('ثبت نام کاربر تکمیل شد !');

}
else
{

  die('مشکلی بوجود آمده است !');	

}
?>

در این کد از خط ۳ تا ۷ به اتصال به دیتابیس و انتخاب پایگاه داده مورد نظر مربوط است.از خط ۱۳ تا ۳۵ نیز کدهای شرطی با دستور if قرار دارند که کار validation (که در ابتدا صحبت شد) را انجام می دهند.

از خط ۹ تا ۱۱ ، مقادیری را که توسط فرم فرستاده شده اند و در متغیر سراسری POST_$ قرار دارند را می گیریم.

در خط ۳۰ از عبارات منظم برای تشخیص اینکه قالب ایمیل صحیح است یا نه استفاده شده است.مثلا حتما دارای علامت @ باشد.

در خط ۳۷ ، رمز عبور را با استفاده از تابع md5 ،هش (hash) کردیم.همانطور که می دانید قبل از ذخیره کلمات عبور در دیتابیس بهتر است آنها را به صورتی در آوریم که اگر توسط افرادی نیز خوانده شدند باز قابل بازگشت به اصل خود نباشند.در واقع تفاوت هش با کد کردن در همین است که هش قابل بازگشت نیست ولی موردی که کد شده باشد را می توان معکوس کرد و آن را بدست آورد.بدین ترتیب یک کد ۳۲ حرفی از رمز کاربر ایجاد می کنیم.

در خط ۳۸ همه اطلاعات دریافتی را بوسیله یک کوئری ،در پایگاه داده وارد می کنیم.

از خطوط ۴۲ تا ۵۳ نیز یک شرط قرار دارد تا مشخص شود عملیات وارد کردن داده ها موفقیت آمیز بوده یا نه.این کار توسط تابع mysql_affected_rows انجام می شود.کار این تابع ، برگشت دادن تعداد ردیف هایی است که روی شان عملیات های مختلف مانند : وارد کردن داده (کار ما) ، حذف داده و ویرایش داده رخ داده است.بنابراین در اینجا چون مشخصات یک کاربر را وارد می کنیم ، در صورت انجام موفقیت آمیز ورود داده ، مقدار یک را برگشت می دهد و می توان با توجه به آن پیام مناسبی را به کاربر نمایش داد.

 

کدهای sql برای ایجاد جدول user را می توانید از پایین پست دانلود کنید

 

حالا می توانید با دیدن جدول users در دیتابیس ببینید که داده مورد نظر وارد شده است یا خیر

امیدوارم به درد دوستان خورده باشه .هر سوال یا نظری دارید میتونید در بخش نظرات پایین مطرح کنید.