دوره های آموزش طراحی وب در تبریز

مشاهده دوره ها
در تابستان یک مهارت آینده ساز را یاد بگیرید

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

در PHP

سلام :)

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

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

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

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

قدم اول – کد HTML

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

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

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

 

قدم دوم – کد PHP

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

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

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

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

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

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

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

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

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

 

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

 

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

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

 

آخرین مقالات فتولیا در ایمیل شما :

84 نظر

  1. با سلام و خسته نباشید و با تشکر از توضیحتان
    لطفا خط زیر را برام تشریح کنید.

    متشکرم.

  2. با سلام در رابطه با فرم ثبت نامی که گذاشتید میخواستم ببینم اگر بخواهیم اطلاعات ضمن ذخیره در دیتابیس , ا مکان چاپ آن در همان صفحه را هم دارد؟ مثلا وقتی در دیتابیس ذخیره شد اطلاعات در قالب جدولی روی صفحه نشان داده شود. ممنون میشوم پاسخ دهید

  3. خواهشا کمک کنید
    آقای زمانی کیا هستم چرا جواب منو نمیدین
    برای ریزالت ۳۰ رکورد آخر ثبت نام شده چی باید بنویسم
    برای ویرایش هر کدام از این ۳۰ ریزالت چی بنویسیم
    و برای حذف هر کدام از این ریزالت ها چی بنویسیم

  4. آقای زمانی تو رو خدا کمک کنید
    اول از همه از سایت خوبتون تشکر می کنم واقعا مفیده و مطالب آموزشیش با زبانی بسیار ساده و قابل فهم توضیح داده شده
    من از پی اچ پی هیچی نمیدونستم با کمک این پست شما تونستم یه فرم درست حسابی درست کنم و کلیه اطلاعات فرم را درونش ذخیره کنم
    حالا استادم گفته که نتایج ثبت شده رو ریزالت بگیرم
    گفته اطلاعات ۱۰ کاربر آخر را در آخر فرم ثبت نام درج کنم
    واقعا گیر افتادم کاش نحوه ریزالت گیری و استخراج از دیتابیش رو مثل این پست با مثال میزاشتید

    هر چقدر هزینش باشه میدم خواهش می کنم اینکارو در حقم بکنید

  5. سلام
    ممنون بایت اطلاعاتی که در اختیار ما گذاشته اید . سوال داشتم ولی به انجمن های گفت و گو وصل نشد فکر کنم دچار مشکل شده است. لطفا در صورت امکان پاسخ سوالم را بدهید.
    سوال: اگر این شرط را داشته باشیم که اطلاعات فرم را کاربر به زبان فارسی وارد کند در غیر این صورت اطلاعات در پایگاه داده ثبت نشود باید از چه تابعی و چگونه استفاده کنیم؟

  6. سلام. واسه شماره شناسنامه اگه بخوام طولشو چک کنه
    if(!$sh){

    die(‘shomare shenasname ra vared konid !’);
    }
    if(!preg_match(“/[0-9]{10}/”,$sh))
    خطا میده

  7. salam va khaste nabashid,,,bebakhshid ma ye proje darim tarahi site laptop,vagti to gesmat order kilide sabt ro mizanim text ha khali mishe vali dataha dar my sql zakhire nemishan,,lotfan age mishe komak konid
    in ham code haye php ma
    <?php

    $name = $_post ['n'];
    $codeposti = $_post ['c'];
    $tell = $_post ['t'];
    $address = $_post['a'];
    $message = $_post ['m'];

    $a=mysql_connect('localhost:8001','root','');

    if(!$a)
    {
    die("not connected");
    }
    mysql_select_db('buy',$a);

    @$f=mysql_query("insert into buy (name,codeposti,tell,address,message)values('$name','$codeposti','$tell','$address', '$message')") ;
    echo'';

    if (!$f)
    {
    die(“not insert”);
    }
    else
    {
    echo’*** ba movafagiyat sabt shod***';
    }

    echo ”;

    ?>

  8. سلام خسته نباشید.
    من با دریم ویور کدهای بالا را نوشتم ولی خطوط ۳۷ و۳۸ کد php رو عینا در خروجی چاپ میکنه!!!!!!!!!!!!!!!!!!!!
    لطفا مرا یاری کنید.ممنون

  9. سلام،سورس مربوط به فایل دیتابیس رو وقتی ایمپورت می کنم داخل phpmyadmin ارور میده لطفاً راهنمایی کنید.

  10. با سلام اول ممنون ازسایت خوبتون .دوم اینکه من یه سایت دارم طراحی میکنم می خوام صفحه ارتباط با مارو باphpوصل کنم به پایگاه داده ،(البته اینم بگم که با نرمافزار دریم ویور cs4 دارم طراحی می کنم)ولی یه مشکلی هست اونم وقتی که می خوام از منوی windowگزینه server behavior رو انتخاب می کنم و از علامت +گزینه my sqlconnection را انتخاب می کنم ودر مرحله آخر که می خوام نام دیتا بیسم رو انتخاب کنم ارور setup site’s testing serverرو میده ،نمیدونم چکار کنم چطوری باید تنظیم کنم خواهش می کنم کمکم کنید….دیگه دارم دیوونه میشم….اگه بتونید کمک کنید یه عمر دعاگوتون میشم..

  11. سلام
    این فرمو چطوری باید تو لوکال بالا بیارم ؟
    برای بالا اوردن توی لوکال باید sql server رو نصب کرد؟
    لطفا کامل توضیح بدین

  12. سلام
    ممنون از آموزش مفید شما
    یک سوال الان من این قسمت md5 کردن رو به فرم خودم اضافه کردم
    ولی وقتی کاربر میخواد وار سایت بشه میگه پسور اشتباهه و وقتی پسوردی که hash شده رو میزنم وارد سایت میشه .

  13. ضمن عرض سلام و خسته نباشید
    با تشکر از آموزش خوبتان
    اگر بخواهم پیغام های خطا یا validation و پیغام های موفقیت در ثبت اطلاعات و خطا در ثبت اطلاعات در صفحه ی اصلی نمایش داده بشود چیکار باید انجام بدهم ؟
    در ضمن اگر امکان دارد فرم را تا حدودی پیشرفته تر نمایید ( منظورم آموزش است )
    به عنولن مثال قرار دادن دکمه جستجو و نمایش grid اطلاعات
    و ….

    موفق و پایدار باشید

  14. سلام دوست عزیز… شاید بتونی کمکم کنی?
    فرمی رو که من ساختم که یه سری اطلاعات به زبان فارسی رو در داخل دیتا بیس ذخیره میکنه. ولی این اطلاعات به صورت فارسی ذخیره نمیشه و با حروفی این شکلی احمد ذخیره میشه!
    هر کاری هم میکنم درست نمیشه!
    از utf8_unicode و utf8-general و utf8-persian هم در یتا بیس استفاده کردم ولی بازهم درست نشد! شما راهنمایی نداری؟ لطفا اگه راه حلی داری برام ایمیل کن. تشکر

  15. سلام ببخشین چه طوری میشه واسه کاربر شرط گذاشت که اگر پسوورد رو سه بار غلط زد کپچا برایش ظاهر شود؟

  16. سلام من این کد را نوشتم ولی وقتی داده وارد میکنم فقط جواب مشکلی رخ داده است را میده … میشه علتش رو توضیح بدید

  17. سلام اطلاعات فارسی ارسالی به پایگاه داده به صورت علامت سوال نمایش داده می شن علتش چیه؟

  18. تابع توی دیتابیسمون اجرا میشه ولی با تغییر فیلدا دیگه کار نمی کنه چرا؟؟؟؟

  19. سلام
    ی سوال دارم اگه بخوام ی combobox یعنی فیلد انتخابی توی فرم بذارم میشه کدشو بگید(فیلد کشویی) و کاربر هرچس انتخاب کرد به دیتابیس بفرسه ممنون

  20. سلام علی جان خسته نباشی

    ۱ سوال کوچیک داشتم میخواستم راهنمایی کنی منو

    سوال :

    اگر بخوام تو صفحه خودم یک تگ select بذارم که با انتخاب هر optaion از این select برای من یک المنت Select دیگه با option های مختلف ظاهر بشه چکار کنم ؟

    منظورم رو با یک مثال میگم که بهتر متوجه بشی :

    فرض کن یک لیست انتخاب جلوی کاربر هست ( select ) بعد به محض اینکه کاربر option اول رو انتخاب میکنه ، یک لیست انتخاب دیگه ظاهر میشه
    ( مشکلم کد جاوا هست نمیدونم چی بزنم ) .

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

  22. سلام
    با سپاس از آموزشتان من کارهای بالا را انجام دادم منتها در وارد نمودن اسامی فارسی دیتا بیس فارسی نشان نمیدهد فکر کنم یکجای کدهای بالا باید ویرایش شود لطفا بررسی نمایید

  23. سلام
    چطور اطلاعات رو از پایگاه داده select کنم و تو همون صفحه نمایش بدم به طوری که اسکرول هم داشته باشه.میشه دستورشو برام بگید؟ممنون میشم اگه زود بگین آخه عجله دارم!

  24. با سلام
    ممنون از آموزش خوبتون
    من اتصال پایگاه داده رو انجانم دادم ولی تتو select مشکل دارم .

    if(!mysql_select_db(‘users’)){die(‘MySQL database select error !’);}

    هر بلایی سرش آوردم نشد.
    لطفا” راهنمایی کنید

    • سلام
      ممنونم ، اول باید دیتابیس رو بسازید و بعد اسمشو اینجا وارد کنین . اینکارو با phpmyadmin می تونید انجام بدید

  25. سلام
    ممنون بابت مطلب لطفا اموزش اتصال این فرم رو به این سیستم ETCHATبنویسیدچون سیستم ثبت نام نداره.

  26. سلام

    چگونه یک فایل متنی رو در پایگاه داده ذخیره می کنیم ؟ پروژه من در باره بانک مقالات هست ولی نمی دونم چطوری باید فایل ها رو ذخیره کنم ممنون میشم.

  27. باسلام
    برنامه ی ثبت نام کاربر رو نصب و اجرا کردم
    میخام اطلاعاتی که کاربر وارد کرده و ثبت شده است را مشاهده کنم
    لطفا راهنمایی کنید؟؟؟؟؟؟؟
    با تشکر

  28. دوست عزیز ، حق با شما بود با vertrigo که run کردم سیستم بالا اومد .

    حالا برای اینکه یه فرم لوگین برای همین ثبت نام داشته باشیم چه کار کنیم .

    آیا مثالی هم برای لاگین شدن از دیتابیس دارید . ممنون میشم راهنمایی کنید.

    با تشکر
    Bvk

  29. سلام
    مرسی بابا آموزش
    من ۱ وب سایت در دریم ویور طراحی کردم ، و در هاست و دمین یکی از دوستانم تستش کردم، ولی خوب در صفحه ای که من می خواهم کاربر اطلاعات وارد کنه خروجی به هیچ فایلی داده نمی شه خیلی مطالعه کردم مثل اینکه من باید ۱ فایل php برای ارجا خروجی داشته باشم ولی اصلا نمی دونم چگونه بنویسم می شه به من لطفا کمک کنید مثلا می خواهم در فرمم اسم و فامیل بازدید کننده رو بگیرم
    مرسی

    • سلام دوست عزیز
      خوب مثل همین صفحه تقریبا باید بنویسین . اول یه فرم با دو ورودی(input) اسم و فامیل و بعدش هم یه فایل php که اینا رو بگیره و یا به ایمیلی ارسال کنه یا تو دیتابیس ذخیره کنه

  30. سلام : ضمن تشکر بابت آموزشی که ارائه دادید ، دوست عزیز من یک مشکل پیدا کردم اونم موقعی که ثبت رو میزنم به صفحه register.php که میره کد صفحه رو نشان میده و ذخیره نمیشه . اسم بانک هم test هست در ضمن users.sql هم import کردم . ممنون میشم اگر راهنمایی کنید

    • سلام
      ممنون ، اگه کد رو نشون بده یعنی فایل php روی سرور اجرا نمیشه و به صورت معمولی باز شده . روی کامپیوتر خودتون تست می کنین یا روی هاست ؟ اگه روی کامپیوتر خودتون باید برنامه wamp رو نصب کنین تا سرور نصب بشه

  31. سلام

    بخواهیم برای تعداد کارکتر در ورودی فیلد پسورد شرط بزاریم به چه شکلی میشه نوشت مثلا” : کمتر از ۴ کارکتر نباشد

  32. سلام
    توضیح مسئله : من یه فرم ثبت نام دارم که میخوام بعد از ثبت اطلاعات ۳ فیلد به ایمیل کاربر ارسال بشه و تا حدودی انجام دادم به شرح زیر :
    ۱- ایمیل( از فرم اول فرا خوانی میشود ) و سابجکت (از فرم دوم بصورت ثابت می باشد ) ارسال میشه .
    ۲- وقتی از داخل فایل دوم متن body بین ‘ ‘ پر میشه اون هم ارسال میشه ولی وقتی از یک متغیر فرا خوانی میشه ارسال نمیشه .

    کاری که بنده کردم :
    بنده یه فرم نوشتم با phpmailer به این صورت که ۳ تا فیلد را میگیره و در $Message ذخیره میکنه و به فایل class.phpmailer.php از طریق SESSION میفرسته اما در class.phpmailer.php در فانکشن $body فرا خوانی نمیشه .
    خلاصه کدها :
    فایل اول :
    $Message = ”
    Name : $username
    Last Name : $password
    credit :$credit
    expire : $exdate”;

    $Message = $_POST[‘Message’];
    $_SESSION[“Message”] = $Message;

    فایل دوم :
    function htmlmail($to, $from, $subject, $body) {
    global $error,$guser,$gpwd;
    $mail = new PHPMailer(); // create a new object
    $mail->IsSMTP(); // enable SMTP
    $mail->SMTPDebug = 0; // debugging: 1 = errors and messages, 2 = messages only
    $mail->SMTPAuth = true; // authentication enabled
    $mail->SMTPSecure = ‘ssl'; // secure transfer enabled REQUIRED for GMail
    $mail->Host = ‘smtp.gmail.com';
    $mail->Port = 465;
    $mail->Username = $guser;
    $mail->Password = $gpwd;
    $mail->SetFrom($from);

    $mail->Subject = ‘اکانت کاربری شما فعال گردید ‘;
    $mail->CharSet = ‘UTF-8′;

    $mail->Body = $Message ;
    $mail->AddAddress($to);
    $mail->IsHTML(true);
    $mail->CharSet = “utf-8″;
    if(!$mail->Send()) {
    //$error = ‘Mail error: ‘.$mail->ErrorInfo;
    return false;
    } else {
    //$error = ‘Message sent!';
    return true;

    با تشکر

    • سلام
      بالای همه صفحات تون تابع session_start(); رو نوشتید ؟ اگه بله لطفا همه فایل های مربوط به ارسال ایمیل رو تو یه فایل zip برای بنده ارسال کنید تا اگه شد حلش کنیم

      موفقیت

  33. سلام و عرض خسته نباشید
    بنده میخواستم یک فرم ثبت نام بنویسم و میخواستم فیلد ایمیل از دیتا بیس چک شود و در صورت تکراری بودن هشدار داده شود و کدی که نوشتم به این صورت میباشد ولی عمل نمی کند لطفا” بنده را راهنمائی کنید :
    // Check the e-mail address
    $result = mysql_num_rows(mysql_query(“SELECT email FROM account WHERE email=’$emailCHecker'”));
    if($result > 0)
    {
    {die_error(“ایمیل تکراری میباشد“);}
    }

    //Check the e-mail address

  34. یه سوال دیگه هم دارم راجع به همین مطلب. ببخشیدا. مثلا من میخوام اگه فرم ثبت نام کامل بود، پیغام “ثبت نام کاربر تکمیل شد” بالای “نام کاربری” نشون داده بشه و داخل صفحه دیگه‌ای نره. میشه اینم برام یه مثال بزنید؟

    • برای این کار باید فرم ثبت نام و کدهای php در یک فایل باهم باشند مثلا بنام register.php .اگه می خواید پیام در بالا نمایش داده بشه می تونید همین کدها رو در بالای کدهای html فرم قرار بدید . فقط باید مشخص کنید که اگر کاربر روی دکمه ثبت نام کلیک کرد بخش php اجرا بشه و نه از اول .چون هنوز داده ای برای ثبت نداریم.برای این کار هم باید تمام کدهای php رو داخل یک شرط if قرار بدید و بگید که اگر if($_POST['send']) اون موقع کدهای php اجرا بشن

  35. و یه سوال دیگه:) ببخشید من انقدر سوال می‌کنما. مثلا برای رمز عبور اگر بخوام بگم حداکثر مقدار x باشه باید چجوری تعریفش کنم؟ من زیاد وارد نیستم تازه دارم یاد می‌گیرم، خلاصه باید ببخشید دیگه.

  36. یه سوال! مثلا همین اعضا رو اگر بخوایم جهت نمایش داخل آمارگیر بکار ببریم از چه کدی باید استفاده کنیم؟ میشه راهنمایی کنید؟

      • مثلا من دیدم جاهایی در قسمت آمارگیرشون چنین چیزی دارن:

        بازدید امروز:
        بازدید دیروز:
        تعداد اعضا:
        و …

        می‌خواستم بدونم اگر من بخوام تعداد اعضایی که از طریق این فرم عضو شدن نمایش بدم قاعدتا باید عضوهای پایگاه داده رو بخونم دیگه! آما چجوری؟

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

  38. علی جان از php سر در نمیارم ولی فک کنم یوزر نیم رو مستقیم میریزی تو دیتابیس و این یعنی sql injection بهتره از نظره امنیتی بررسی بشه در دات نت به راحتی روش هایی برای جلوگیری از sql injection و XSS وجود داره در php رو خبر ندارم

    • درسته محمدجان ، چون بیشتر قصدم تو این بحث فقط آموزش خیلی ساده کار با دیتابیس بود با توجه به سوالات مکرر دوستان، دیگه نخواستم کدها زیاد پیچیده بشن .ولی در مثال های کاربردی حتما باید ورودی ها بررسی بشن همونطور که شما گفتی .
      تو php هم راه های مختلفی هست که ساده ترینش تابع mysql_real_scape_string است.
      ممنون از نظر بجایی که دادی :)

نظر شما در مورد این مطلب چیست ؟