توانایی خود را افزایش دهیم

فرهنگ و هنر
توانایی خود را افزایش دهیم

بسم الله الرحمن الرحیم

با سلام

• لطفا مطالب سایت را به صورت منظم پیگیری کنید
• ارائه پیشنهادات و نظرات شما باعث بهبود کیفیت ارائه مطالب خواهد شد

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

طبقه بندی موضوعی
آخرین نظرات
سه شنبه, ۱۷ تیر ۱۳۹۳، ۱۲:۴۱ ب.ظ

درس دهم- استفاده از پی اچ پی با پایگاه داده ها

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

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

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

 

ارتباط با پایگاه داده ها
در زمان آموزش MySQL، طریقه ارتباط با پایگاه داده ها را از طریق phpMyAdmin و CMD به طور مستقیم و بدون بکارگیری پی اچ پی شرح دادیم. اما مسئله اصلی این است که ما می خواهیم از پایگاه داده ها توسط پی اچ پی و با یک تعامل دو طرفه استفاده کنیم.

برای بکارگیری این کار باید از طریق توابع از قبل تعریف شده در پی اچ پی عمل کرد. ابتدایی ترین کار برای ارتباط استفاده از تابع زیر است:

$dbc = mysqli_connect ( hostname , username , password , db_name );

این تابع عمل ارتباط با پایگاه را انجام می دهد. پارامترهای آن به شرح زیر هستند:

  • hostname: در اصل همان مکان برای رجوع به پایگاه است. معمولا Localhost است ولی در شرایطی ممکن است متفاوت باشد که باید از سرویس دهنده در مورد آن جویا شد.
  • username: این شناسه کاربری است که در زمان ساخت پایگاه درست کردید.
  • password: رمزی که به شناسه کاربری برای اتصال به پایگاه داده اید.
  • db_name: نامی که برای پایگاه داده ها هنگام ساخت آن انتخاب کردید.

 

ساخت فایل ارتباط با پایگاه
یک راه درست برای انجام این عمل ساختن یک فایل مجزا برای ارتباط با پایگاه داده است که با داشتن این فایل در هر زمان که نیاز باشد، کافیست که فایل را در محل مناسب وارد کنیم. حتما تابع وارد کردن فایل یادتان هست!

include(' db_connection.php ')

از دیگر تکنیک هایی که می شود به کار برد قرار دادن مشخصات پایگاه در ثابت ها است. این کار امنیت ارتباط با پایگاه را بالا می برد. برای ساخت فایل ارتباط با پایگاه ابتدا فایلی با نام db_connection.php بسازید و در داخل آن کدهای زیر را قرار دهید:

<?php # db_connection.php
// این فایل شامل مشخصات برای ارتباط با پایگاه داده ها است
// با وارد کردن این فایل پایگاه انتخاب و ارتباط با آن برقرار می شود.
DEFINE ('DB_USER', 'root');   //  نام کاربری را در ثابت قرار می دهد.
DEFINE ('DB_PASSWORD', 'dars');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'darsnameh');
$dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
OR die (' به پایگاه متصل نشد: ' . mysqli_connect_error() );
?>

همان طور که مشاهده می کنید، در ابتدا مشخصات لازم به داخل ثابت ها قرار داده شده است و بعد ارتباط توسط تابع mysqli_connect برقرار می شود.

$dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
OR die (' به پایگاه متصل نشد: ' . mysqli_connect_error() );

برای شرح این دستور باید به سه نکته اشاره کرد:

۱. عمل ارتباط در داخل متغیری با نام $dbc ذخیره می شود. این کار یک اشاره گر به منظور رجوع بعدی در داخل برنامه می سازد.

۲. mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME): این تابع که کار ارتباط را انجام می دهد، چهار پارامتر دارد که با هر چهارتایشان آشنا هستیم.

۳. die (' به پایگاه متصل نشد: ' . mysqli_connect_error() ): این تابع در صورت بروز خطا و عدم ارتباط با پایگاه یک متن «به پایگاه متصل نشد» را به همراه متن خطا چاپ می کند.

نکته: در زمان انجام بررسی ابتدایی و قبل از انتشار تارنما در اینترنت، برای دیدن و رفع خطا، قسمت مورد سوم را اضافه کنید. اما در زمان انتشار به دلایل امنیتی از این کار خودداری کنید. اگر می خواهید این تابع متن خطا را چاپ نکند، کافیست که یک علامت @ در ابتدای کد اضافه کنید:

$dbc = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
OR die (' به پایگاه متصل نشد: ' . mysqli_connect_error() );

حال فایل ارتباط با پایگاه آماده است که در زمان لازم با تابع زیر آن را وارد فایل اصلی می کنیم:

require_once ('db_connect.php'); // اتصال به پایگاه

به خاطر اهمیت این فایل آن را با تابع require_once وارد می کنیم تا در زمان بروز خطا از ادامه اجرای برنامه جلوگیری شود.

از آنجایی که در این درس می خواهیم یک برگه ثبت نام کامل تری از دروس قبلی بسازیم، بنابراین یک جدول دیگر با ستون های بیشتر در داخل پایگاه درست می کنیم.

فراموش نکنید که برای اینکار ابتدا باید به پایگاه وصل شوید.

> mysql -u root -p
password: dars

ابتدا به جدول هایی که از قبل درست کردیم سری می زنیم:

mysql> show tables;
+---------------------+
| Tables_in_darsnameh |
+---------------------+
| users                                |
+---------------------+
1 row in set (0.00 sec)

خروجی دستور نشان می دهد که از قبل جدولی با نام users  وجود دارد. بهتر است ابتدا این جدول را پاک کرده و بعد جدول جدید را بسازیم:

mysql>DROP TABLE users ;

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

حال جدول جدید را با توجه به نیاز برگه ثبت نام می سازیم.

دستورات زیر را برای ساخت این جدول وارد کنید:

CREATE TABLE users
(
ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
first_name VARCHAR(20) NOT NULL,
last_name  VARCHAR(30) NOT NULL,
username  VARCHAR(20) NOT NULL,
password  CHAR(40) NOT NULL,
email VARCHAR(80) NOT NULL,
register_date   DATETIME NOT NULL,
PRIMARY KEY (ID)
) CHARSET utf8 ;    // نوع استاندارد کاراکتری جدول 

تا به اینجا فایل ارتباط با پایگاه و جدول مورد نیاز ثبت داده ها را آماده کردیم. از این به بعد برای ساختن این برگه موارد دیگر را اضافه می کنیم.

پوشه ای به نام DatabaseConnecion در پوشه www برای این درس آماده کنید. در داخل آن محتوای پوشه Register که در درس های قبل داشتیم را وارد کنید.

از داخل پوشه includes فایل header.html را برای انجام بعضی تغییرات باز کنید و کدهای زیر را با کدهای قبلی تعویض کنید:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<title> <?php echo $page_title; ?> </title>
<link rel="stylesheet" href="includes/style.css" type="text/css" media="screen" />
</head>
<body>
<div id="wrap">
<div id="header">
<h1> درسنامه </h1>
<div id="navigation">
<ul>
<li><a href="index.php"> خانه</a></li>
<li><a href="register.php">  ثبت نام </a></li>
</ul>
</div>
</div>
<div id="content">

کار با این فایل تمام است آن را ببندید. فایل بعدی style.css است. موارد تکراری را با کدهای قبلی جابه جا و موارد جدید را اضافه کنید.

#wrap{
     border:0px solid #ccc;
     width:751px;
     text-align:right;
     overflow:hidden;
     background-color:#fff;
     margin:auto;}
#header {
     border:0px solid #bbb;
     height:130px;
     margin:0 auto;
     width:100%;
}
#content {
     border:0px solid #ccc;
     border-top:1px dashed #ddd;
     border-bottom:1px dashed #ddd;
     width:100%;
     height:auto;
     min-height:400px;
     padding:0 0 20px 0;
}
.error{
     color : #F00 ;  margin : 5px 20px 5px auto;
}
.again { margin : auto 20px 0 auto; }

 

ساخت فایل register.php
در کنار فایل index.php، فایل دیگری به نام register.php بسازید و کدهای زیر را در داخل آن بنویسید:

<?php
$page_title = 'ثبت نام';
include ('includes/header.html'); ?>
<h1>  ثبت نام </h1>
<?php
if (isset($_POST['submit']))
{
require_once ('mysqli_connect.php'); // اتصال به پایگاه
$errors = array(); //  یک آرایه برای نگهداری خطاها می سازد
$fname = $_POST['f_name'] ;
$lname = $_POST['l_name'] ;
$username = $_POST['username'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
$email = $_POST['email'];
if ( !empty($fname) && !empty($lname) && !empty($username) && !empty($pass1) && !empty($pass2) && !empty($email) )
{
     $fn = mysqli_real_escape_string($dbc , trim($fname));
     $ln = mysqli_real_escape_string($dbc , trim($lname));
     $un = mysqli_real_escape_string($dbc, trim($username));
     $e  = mysqli_real_escape_string($dbc, trim($email));
     if($pass1 == $pass2)  {
          $pass= mysqli_real_escape_string($dbc, trim($pass1));
     }else {
          $errors[] = "لطفا هر دو رمز یکسان باشند.";
     }
} else {
     if(empty($fname))
     { $errors[] = ' لطفا نام خود را وارد کنید.'; }
     if(empty($lname))
     { $errors[] = ' لطفا نام خانوادگی خود را وارد کنید.'; }
     if(empty($username))
     { $errors[] = ' لطفا شناسه کاربری خود را وارد کنید.'; }
     if(empty($password))
     { $errors[] = ' لطفا رمز خود را وارد کنید.'; }
     if(empty($email))
     { $errors[] = ' لطفا رایانامه خود را وارد کنید.'; }
     }
if (empty($errors))  {
     $query = "INSERT INTO users (first_name, last_name, username, password, email, register_date) VALUES ('$fn', '$ln', '$un', SHA1('$pass'),'$e',  NOW() )"; //  نوشتن درخواست و گذاشتن در متغیر
     $r = @mysqli_query ($dbc, $query); // اجرای درخواست
     if ($r)  { // اگر درست اجرا شد
     echo ' از ثبت نام شما سپاسگزاریم. ' . '<br />' . $fn . '<br />' .  $ln  . '<br />' .  $un . '<br />' . SHA1( $pass ) . '<br />' . $e ;
}else { // اگر درست اجرا نشد
     echo '<h1> خطا در ثبت نام </h1><p class="error"> امکان ثبت نام برای شما به دلیل وجود مشکلی وجود ندارد. لطفا دوباره امتحان کنید. </p>';
     echo '<p>' . mysqli_error($dbc) . '<br /><br />Query: ' . $query . '</p>';  }
     mysqli_close($dbc); // Close the database connection.
          include ('includes/footer.html');
          exit(); 
}else{
echo '<div class="error">:خطاهای زیر صورت گرفته<br />';
     foreach ($errors as $msg) { // Print each error.
          echo "  .$msg - <br />"; }
          echo '</div><span class="again"> دوباره امتحان کنید.</span>';
}  }// پایان شرط ارسال
?>
<!-- کد برای ساخت فرم - form.html -->
<form action="register.php" method="post">
<fieldset>
<legend align="right">لطفا فرم زیر را پر کنید</legend>
<label> نام </label>
<input type="text" name="f_name" value="<?php if (isset($_POST['f_name'])){ echo $_POST['f_name'];} ?>" />
<label> نام خانوادگی </label>
<input type="text" name="l_name" value="<?php if (isset($_POST['l_name'])){ echo $_POST['l_name'];} ?>" />
<label> شناسه </label>
<input type="text" name="username" value="<?php if (isset($_POST['username'])){ echo $_POST['username'];} ?>" />
<label> رمز </label>
<input type="password" name="pass1" />
<label> رمز  تکرار</label>
<input type="password" name="pass2" />
<label> رایانامه </label>
<input type="text" name="email" value="<?php if (isset($_POST['email'])){ echo $_POST['email'];} ?>" />
</fieldset>
<input type="submit" name="submit" value="ارسال" class="submit"/>
</form<?php include ('includes/footer.html'); ?>

توضیح کدها
بیشتر این کدها را از قبل دیده ایم، در اینجا فقط به قسمت های جدید اشاره می کنیم:

if (isset($_POST['submit']))
{
require_once ('mysqli_connect.php'); // اتصال به پایگاه
$errors = array(); //  یک آرایه برای نگهداری خطاها می سازد

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

بعد یک آرایه برای نگهداری خطاها ساخته می شود، تا در صورت نیاز همه خطاها به طور منظم در یک آرایه نگهداری شوند.

if ( !empty($fname) && !empty($lname) && !empty($username) && !empty($pass1) && !empty($pass2) && !empty($email) )
{
     $fn = mysqli_real_escape_string($dbc , trim($fname));
     $ln = mysqli_real_escape_string($dbc , trim($lname));
     $un = mysqli_real_escape_string($dbc, trim($username));
     $e  = mysqli_real_escape_string($dbc, trim($email));
     if($pass1 == $pass2)
     {
     $pass= mysqli_real_escape_string($dbc, trim($pass1));
     }
     else
     {
          $errors[] = "لطفا هر دو رمز یکسان باشند";
     }
}

این قسمت چند شرط را شامل می شود که بعضی ها در حالت تو در تو هستند.

شرط ابتدایی بررسی می کند که اگر تمام متغیرهایی که بر دارنده داده های گرفته شده از کادرهای فرم هستند، پر باشند، آنها را پس از گذراندن از تابع دیگری که امنیت را مهیا می کند در متغیرهای جدید قرار دهد.

این متغییرهای جدید برای انتقال داده ها به پایگاه داده ها استفاده خواهند شد. شرطی که در داخل این شرط گذاشته شده است، وظیفه بررسی یکسان بودن هر دو کادر شامل رمز را دارا است. معمولا برای انتخاب رمز دو بار از کاربر خواسته می شود که رمز را وارد کند تا از بروز خطا جلوگیری شود.

mysqli_real_escape_string();

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

trim($fname)

این تابع فاصله های غیر ضروری میان متون را از بین می برد.

else  {
     if(empty($fname))
     { $errors[] = ' لطفا نام خود را وارد کنید.'; }
     if(empty($lname))
     { $errors[] = ' لطفا نام خانوادگی خود را وارد کنید.'; }
     if(empty($username))
     { $errors[] = ' لطفا شناسه کاربری خود را وارد کنید.'; }
     if(empty($password))
     { $errors[] = ' لطفا رمز خود را وارد کنید.'; }
     if(empty($email))
     { $errors[] = ' لطفا رایانامه خود را وارد کنید.';  }    }

در قسمت دوم شرط یا همان else، در زمانی که هر کدام از متغیرها خالی باشند، متنی را برای هشدار دادن به کاربر در داخل آرایه $errors  می گذارد. این متن ها به صورت مرتب در خانه های آرایه جای می گیرند. در ادامه از این آرایه استفاده خواهد شد.

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

if (empty($errors))
{

این شرط ابتدا بررسی می کند که متغیر $errors  خالی است یا نه. اگر این متغیر خالی باشد، یعنی خطایی در آن ثبت نشده و تمام داده های گرفته شده از کادرهای فرم وارد متغیرهای اصلی شده اند.

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

$query = "INSERT INTO users (first_name, last_name, username, password, email, register_date) VALUES ('$fn', '$ln', '$un', SHA1('$pass'),'$e',  NOW() )"; //  نوشتن درخواست و گذاشتن در متغیر

 

وارد کردن داده به پایگاه
برای وارد کردن داده ها به پایگاه از دستوری به شکل استفاده می کنیم:

INSERT INTO tablename (column1, column2  …)
VALUES (value1, value2 …)

ترجمه این دستور می شود:

در جدولی به نام «نام جدول» tablename

و با ستون های «نام ستون ها»   (column1, column2)

مقادیر «مقادیر» VALUES را وارد کن.

نام فنی این کار نوشتن query (بخوانید کوئری) است که ما این query را در داخل متغیری ذخیره می کنیم.

$r = @mysqli_query ($dbc, $query); // اجرای درخواست

اجرای این "کوئری" با تابعی به نام mysqli_query انجام می گیرد. این تابع دارای دو پارامتر است.

  • $dbc: این همان متغیری است که در فایل db_connection.php ارتباط با پایگاه را در آن قرار دادیم.
  • $query: و این هم متغیری است که در همین فایل دستورات وارد کردن را در آن قرار دادیم. این تابع کار وارد کردن داده ها را در پایگاه انجام می دهد.

if ($r)  { // اگر درست اجرا شد
echo ' از ثبت نام شما سپاسگزاریم. ' . '<br />' . $fn . '<br />' .  $ln  . '<br />' .  $un . '<br />' . SHA1( $pass ) . '<br />' . $e ;

این شرط درستی انجام وارد کردن داده ها در پایگاه را بررسی می کند که در صورت درستی، پیغام موفقیت می دهد.

}else  { // اگر درست اجرا نشد
echo '<h1> خطا در ثبت نام </h1><p class="error"> امکان ثبت نام برای شما به دلیل وجود مشکلی وجود ندارد. لطفا دوباره امتحان کنید. </p>';
echo '<p>' . mysqli_error($dbc) . '<br /><br />Query: ' . $query . '</p>'; }
     mysqli_close($dbc); // Close the database connection.
     include ('includes/footer.html');
     exit();
}

اگر وارد کردن داده ها در پایگاه با موفقیت انجام نشود، وارد قسمت else شرط می شود که پیغام مشکل ایجاد شده را می دهد. بعد از آن ارتباط با پایگاه را توسط mysqli_close($dbc);  قطع می کند.

else{
echo '<div class="error">:خطاهای زیر صورت گرفته<br />';
     foreach ($errors as $msg) { // Print each error.
echo "  .$msg - <br />"; }
      echo '</div><span class="again"> دوباره امتحان کنید.</span>';
}
}// پایان شرط ارسال

این قسمت در اصل قسمت else شرط بررسی کننده متغیر  $errors است. زمانی برنامه وارد این قسمت می شود که این متغییر دارای مقدار باشد و این یعنی کاربر یکی از موارد ثبت نام را خالی گذاشته و یا هر دو رمز را به طور یکسان وارد نکرده است. در اینجا تمام متن هایی که به صورت اخطار وارد این آرایه شده را با یک تابع حلقه چاپ می کند تا کاربر آنها را درست وارد کند.

بخش های عددی فایل را قبلا در درس های قبلی دیده ایم، تنها تفاوت این است که ما در اینجا چند کادر اضافه برای مواردی که اضافه کردیم داریم.

 

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

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

در درس بعدی با چگونگی خواندن داده های ثبت شده در پایگاه و استفاده از آنها برای ردیابی کاربران در تارنما آشنا خواهیم شد.

موافقین ۰ مخالفین ۰ ۹۳/۰۴/۱۷

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی