بایگانی برچسب: s

آموزش PHP: جلسه بیست و سوم: شیءگرایی (بخش سوم)

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

در دو جلسه‌ی قبلی ۱۱ مرحله مختلف را گذراندیم تا مبحث شیءگرایی را در پی‌اچ‌پی به روش عملی یاد بگیریم. در ادامه به سراغ مراحل بعدی می‌رویم.

مرحله دوازدهم:

دسترسی مستقیم به پروپرتی‌ها (توصیه نمی‌شود)

برای دسترسی مستقیم به خواص اشیاء ساخته شده در پی‌اچ‌پی، نیازی به استفاده از متدها ندارید. شما می‌توانید به‌طور مستقیم با استفاده از عملگر <- و نام متغیر (پروپرتی) موردنظر، به آن دسترسی داشته باشید.

به عنوان مثال اگر در کلاس پی‌اچ‌پی نوشته شده‌ی خود، یک پروپرتی به نام name$ (در شیء mojtaba$) داشته باشید، برای دسترسی به مقدار این متغیر باید از کدی مثل زیر استفاده کنید:

$name = $mojtaba->name;

البته همان‌طور که اشاره کردیم، استفاده از این روش پیشنهاد نمی‌شود چرا که امکان دارد در ادامه مسیر، با مشکلاتی مواجه شوید. برای دسترسی به مقادیر متغیرها (پروپرتی‌ها) در یک کلاس پی‌اچ‌پی، بهتر است از متدهای دریافت‌کننده یا همان Getter استفاده کنید.

به کد زیر توجه کنید تا آنچه گفته شد را بیشتر درک کنید.

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person();
$miaad = new person;

$mojtaba->set_name(“mojtaba bolhasani”);
$miaad->set_name(“miaad baferasat”);

// دسترسی مستقیم به مقدار یک پروپرتی در کلاس که پیشنهاد نمی‌شود
echo “mojtaba’s full name: “.$mojtaba->name;
?>

مرحله سیزدهم:

کانستراکتورها (constructor)

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

نکته: اگر تابعی به نام ()constructــ در کلاس موردنظرتان بسازید، پی‌اچ‌پی به‌طور خودکار متد (تابع) ()constructــ را پس از ساختن هر شیء و در واقع پس از اجرای کلاس، فراخوانی می‌کند.

به یاد داشته باشید که برای تعریف کانستراکتور در ابتدای نام آن باید دو علامت آندراسکور (آندرلاین ــ) قرار دهید و بدون هیچ فاصله‌ یا کاراکتر اضافه‌ای، کلمه‌ی construct را در ادامه‌ی نام آن بنویسید. برای درک بیشتر موضوع، به کد زیر توجه کنید:

<?php
class person {
var $name;
function __construct($persons_name) {
$this->name = $persons_name;
}

function set_name($new_name) {
$this->name = $new_name;
}

function get_name() {
return $this->name;
}

}
?>

از حالا به بعد به منظور پیش‌برد راحت‌تر و یکپارچه‌تر مبحث شی‌ءگرایی در پی‌اچ‌پی، هر جا صجبت از متد شد منظور ما تابع داخل کلاس است و هرجا از پروپرتی‌ها سخن گفتیم، منظور ما همان متغیرهای کلاس هستند.

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

مرحله چهاردهم:

ساختن یک کلاس (شیء) مجهز به کانستراکتور

حالا که ما با نحوه‌ی ساختن کانستراکتور آشنا شده‌ایم، می‌توانیم برای ساخت کلاس person، مقداری را به عنوان پیش‌فرض برای پروپرتی name$ مشخص کنیم. 

شما می‌توانید ورودی‌های مختلفی را به صورت آرگومان‌، برای متد کانستراکتور تعیین کنید. اگر با این موضوع آشنایی ندارید بد نیست سری به بخش آموزش توابع در پی‌اچ‌پی بزنید که پیش‌تر آن را در وبلاگ منتشر کرده‌ایم. برای افزودن ورودی به کانستراکتور، باید پس از استفاده از یک شیء ورودی‌ها را در داخل پرانتز و پس از نام کلاس موردنظر، وارد کنیم. به عنوان مثال به کد زیر توجه کنید:

$mojtaba = new person(“mojtaba bolhasani”);

استفاده از کانستراکتور و مقداردهی ورودی موردنیاز آن باعث می‌شود تا دیگر نیازی به فراخوانی متد ()set_name نداشته باشیم که همین کار باعث می‌شود با نوشتن کد کمتر، بتوان پروژه‌های مسنجم‌تری را ساخت. استفاده از کانستراکتورها همانند سایر زبان‌ها نظیر جاوا و … در بین برنامه‌نویسان این زبان، رایج است. باز هم توجه شما را به مثال زیر جلب می‌کنیم:

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person(“mojtaba bolhasani”);
echo “mojtaba’s full name: “.$mojtaba->get_name();
?>

استفاده از مکانسیم شی‌ءگرایی در مثال بالا، یکی از کاربردهای بسیار ساده‌ای است که می‌تواند در زمان و انرژی شما در کدنویسی صرفه‌جویی قابل توجهی کند. به یاد داشته باشید که برنامه‌نویسان حرفه‌ای این نکته را خوب می‌دانند: کد کمتر برابر است با باگ کمتر.

مرحله پانزدهم:

محدود کردن دسترسی به پروپرتی‌ها با اصلاح‌کننده‌های دسترسی

یکی از اصول بنیادی در برنامه‌نویسی شیءگرا، کپسوله‌سازی (encapsulation) است. اگر قصد دارید تا دسترسی به پروپرتی‌های مختلف را در کلاس خود محدود کنید، این ایده به شما کمک می‌کند تا کد خوانا‌تر و بهتری را تولید کنید.

برای محدود کردن دسترسی به پروپرتی‌های کلاس خود، باید از اصلاح‌کننده‌های دسترسی (ٰaccess modifiers) استفاده کنید. در پی‌اچ‌پی نیز مثل بسیاری از زبان‌های خانواده‌ی سی، ۳ عدد اصلاح‌کننده دسترسی موجود است:

  1. public (عمومی)
  2. private (خصوصی) 
  3. protected (محافظ شده)

اصلاح‌کننده‌ی پیش‌فرض برای هر پروپرتی در هر کلاس در پی‌اچ‌پی، Public است. به مثال زیر توجه کنید:

<?php
class person {
var $name;
public $height;
protected $social_insurance;
private $pinn_number;

function __construct($persons_name) {
$this->name = $persons_name;
}

function set_name($new_name) {
$this->name = $new_name;
}

function get_name() {
return $this->name;
}

}
?>

نکته: زمانی که شما یک پروپرتی را با استفاده از کلمه‌ی کلیدی var تعریف کنید، آن پروپرتی به صورت پیش‌فرض عمومی (Public) خواهد بود.

مرحله شانزدهم:

محدود کردن دسترسی به پروپرتی‌ها: بخش دوم

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

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

پروپرتی‌هایی که به صورت Public تعریف شده‌ باشند، محدودیت دسترسی نداشته و این یعنی هر کسی و هر کلاسی می‌تواند به مقدار آن‌ها دسترسی یابد.

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

<?php include(“class_lib.php”); ?>
<?php
$stefan = new person(“Stefan Mischook”);
echo “Stefan’s full name: ” . $stefan->get_name() ;

/*
Since $pinn_number was declared private, this line of code
will generate an error. Try it out!
*/

echo “Tell me private stuff: “.$stefan->pinn_number;
?>

نکته: اگر بخواهید از طریق یک کلاس دیگر به یک پروپرتی خصوصی (private) در یک کلاس دیگر دسترسی داشته باشید، با خطای PHP مواجه خواهید شد. این خطا چیزی شبیه به متن زیر خواهد بود:

‘Fatal error: Cannot access private property person::$pinn_number in …’

مرحله هفدهم:

محدود کردن دسترسی به متدها درست همانند پروپرتی‌ها، شما می‌توانید دسترسی به متدهای تعریف شده در یک کلاس را با استفاده از ۳ اصلاح‌کننده زیر کنترل کنید.

  1. public (عمومی)
  2. protected (محافظت شده)
  3. private (خصوصی)

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

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

با توجه به آنچه اشاره شد، باید بگوییم که ساختار یکپارچه‌ی برنامه‌نویسی شیءگرا باعث می‌شود تا بتوان روی پروژه‌های موجود که با این روش ساخته شده‌اند کار کرد یا پروژه‌های گروهی را به‌طور استانداردتر پیش برد. به کد زیر توجه کنید:

<?php
class person {
var $name;

public $height;
protected $social_insurance;
private $pinn_number;

function __construct($persons_name){
$this->name = $persons_name;
}

private function get_pinn_number(){
return
$this->pinn_number;
}
}
?>

نکته: از آنجا که متد ()get_pinn_number یک متد از نوع خصوصی (private) است، تنها جایی که می‌توان از این متد استفاده کرد، در همین کلاس است. اگر قصد دارید متدهای موردنظر خود را در صفحات پی‌اچ‌پی خود به‌طور مستقیم فراخوانی کنید، مسلما باید آن متدها را به صورت عمومی یا همان Public تعریف کرده باشید.

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

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

 منبع زومیت

آموزش PHP – جلسه بیست و دوم: شیء گرایی (بخش دوم)

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

در جلسه قبل مرحله به مرحله پیش رفتیم و گفتیم که بهترین روش یادگیری مبحث شیءگرایی، تمرین است. اگر جلسه قبل را هنوز مطالعه نکرده‌اید، لطفا ابتدا آن را مطالعه کرده و سپس ادامه آموزش را از این مطلب پیگیری کنید. پس از انجام مراحل یک تا پنج که در جلسه قبل توضیح داده شد، حال به سراغ گام‌های بعدی می‌رویم.

مرحله ششم:

متغیر this$ 

به کد زیر توجه کنید:

$this->name = $new_name;

در اینجا this$ در واقع یک متغیر درونی تلقی می‌شود که به شیء کنونی کلاس موردنظر اشاره دارد. به عبارت دیگر، متغیر this$ یک متغیر مخصوص برای ارجاع‌های داخلی است. به منظور دسترسی به پروپرتی‌ها که در جلسه قبل در مورد آن‌ها توضیح دادیم، می‌توانید از this$ استفاده کنید و از همین طریق اقدام به صدا زدن متدها یا همان توابع درونی یک کلاس کنید. مجددا توجه شما را به کد زیر جلب می‌کنیم:

function get_name() {
return $this->name;
}

در حال حاضر بهتر است this$ را بهعنوان یکی از کلمات کلیدی مخصوص شیءگرایی در پی‌اچ‌پی بشناسید. هنگامی که موتور پردازشی پی‌اچ‌پی به کلمه this$ برسد، می‌داند که چه کاری باید انجام دهد. خبر خوب این‌که شما هم به زودی با کمی تمرین دقیقا متوجه این ساختار خواهید شد و از آن لذت زیادی خواهید برد.

مرحله هفتم:

استفاده از کلاس ساخته شده در صفحه‌ اصلی پی‌اچ‌پی (index.php)

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

بهترین کار این است که همیشه برای هر کلاس یک فایل جداگانه php ایجاد کنید تا همه چیز بسیار با نظم و مرتب باشد. سپس در هر فایلی از پروژه پی‌اچ‌پی خود می‌توانید از کلاس‌های مدنظرتان استفاده کنید. برای استفاده از یک کلاس در سایر فایل‌های پی‌اچ‌پی، همان‌طور که احتمالا می‌دانید و بارها نیز به این موضوع اشاره کرده‌ایم، می‌توانید از دستورات include یا require بهره ببرید.

مجددا توجه شما را به کد زیر جلب می‌کنیم.

<?php include(“class_lib.php”); ?>

نکته: توجه داشته باشید که تا به این لحظه هنوز در کلاس خود هیچ چیز نداریم و در ادامه متدها و پروپرتی‌های موردنظرمان را ایجاد خواهیم کرد.

مرحله هشتم:

معرفی کردن/ساختن اشیاء

کلاس‌ها نقشه‌های کلی یا قالب‌های کلی برای اشیاء در پی‌اچ‌پی هستند. تا زمانی که شما instantiation (نمونه‌سازی) را انجام ندهید، در واقع کلاس‌های پی‌اچ‌پی به اشیاء مبدل نخواهند شد.

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

به عبارت دیگر، نمونه‌سازی را می‌توان فرآیند ساخت یک نمونه از یک شیء در حافظه تعریف کرد. اما کدام حافظه؟ منظور ما در اینجا، البته حافظه سرور است. به کد زیر دقت کنید:

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person();
?>

نکته: متغیر mojtaba$ در کد بالا یک مرجع برای شیء تازه ساخته شده‌ی person خواهد بود. در اینجا گفتیم که متغیر mojtaba$ یک مرجع است چراکه ما از همین مرجع به منظور کنترل و استفاده از اشیاء کلاس person بهره خواهیم برد.

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

مرحله نهم:

کلمه کلیدی “new”

به منظور ساختن یک شیء خارج از یک کلاس، شما باید از کلمه کلیدی new استفاده کنید. هنگام ساختن و نمونه‌سازی یک کلاس، همانند مثال زیر، شما می‌توانید به صورت اختیاری، به نام کلاس کاراکترهای پرانتز را اضافه کنید. برای فهم بیشتر این موضوع شما می‌توانید در کد زیر مشاهده کنید که چگونه می‌توان چندین شیء را از یک کلاس مشابه ایجاد کرد.

براساس روش کارکرد موتور پی‌اچ‌پی، هر شیٔ در واقع ماهیت خود را دارد. اما این منطقی به نظر می‌رسد؟ کد زیر را مشاهده و به دقت آن را بررسی کنید.

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person();
$miaad = new person;
?>

نکته: هنگام ساختن یک شیء، اطمینان حاصل کنید که نام آن کلاس را بین علامت ‘ ‘ قرار ندهید. به مثال زیر توجه کنید:

$mojtaba = new ‘person’;

کد بالا باعث ایجاد خطا خواهد شد.

مرحله دهم:

ست کردن خواص اشیاء

حال که دو شیء مجزا از کلاس person را با نام‌های mojtaba$ و miaad$ ساختیم، می‌توانیم پروپرتی‌های آن‌ها را نیز با استفاده از متدهای داخلی کلاس person که پیش از این ایجاد کرده بودیم، تنظیم کنیم.

لطفا به یاد داشته باشید که هر دو شیء mojtaba$ و miaad$ از یک کلاس مشابه ساخته شده‌اند، با این وجود پی‌اچ‌پی این دو را به عنوان دو شیء متفاوت می‌شناسد. به کد زیر توجه کنید:

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person();
$miaad = new person;
$mojtaba->set_name(“mojtaba bolhasani”);
$miaad->set_name(“miaad baferasat”);
?>

مرحله یازدهم:

دسترسی به داده‌های شیء‌ها

حال ما از متدهای دریافت‌کننده استفاده می‌کنیم تا به داده‌هایی که در شیء‌های خود داریم، دسترسی داشته باشیم. این داده‌ها همان اطلاعاتی هستند که با استفاده از متدهای تنظیم‌کننده (ست‌کننده) در اشیاء ایجاد شده (mojtaba$ و miaad$) ذخیره کردیم.

هنگام دسترسی به متدها و پروپرتی‌های یک کلاس باید از عملگر <- استفاده کنیم. به کد زیر با دقت نگاه کنید.

<?php include(“class_lib.php”); ?>
<?php
$mojtaba = new person();
$miaad = new person;

$mojtaba->set_name(“mojtaba bolhasani”);
$mihaad->set_name(“miaad baferasat”);

echo “mojtaba’s full name: ” . $mojtaba->get_name();
echo “miaad’s full name: ” . $miaad->get_name();
?>

نکته: توجه داشته باشید که عملگر <- در اینجا به عملگر <- در آرایه‌ها شباهتی ندارد.

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

  • یک کلاس پی‌اچ‌پی طراحی کردید
  • چندین شیء را براساس کلاس ساخته شده خود ایجاد کردید
  • داده‌های موردنظرتان را در اشیاء ساخته شده وارد کردید
  • به داده‌های موردنیاز در اشیاء ساخته شده دسترسی پیدا کردید

تا همین‌جا شما پایه و اساس شیءگرایی را در پی‌اچ‌پی فراگرفته‌اید. در جلسه‌ی بعدی ادامه مبحث شی‌ءگرایی را در زبان برنامه‌نویسی PHP می‌گیریم.

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

 منبع: زومیت

آموزش PHP – جلسه بیست و یکم: شیء گرایی

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

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

۶۸a3310b-b292-4c62-97a9-78a494ae332f.jpgبه جای یادگیری تئوری که در اکثر آموزش‌ها از آن استفاده شده، ما مستقیما مثل جلسات قبل شما را درگیر کدنویسی می‌کنیم تا همراه با یادگیری مطالب بتوانید کدهای موردنیاز را به صورت عملی نیز بنویسید. برای این‌که اشتیاق شما به مبحث شی‌ء‌گرایی بیشتر شود جالب است بدانید که پس از یادگیری این بخش، برنامه‌نویسی به زبان پی‌اچ‌پی برای شما بسیار لذت‌بخش‌تر و آسان‌تر و مسنجم‌تر خواهد شد. پس مثل همیشه برنامه‌ی نوت‌پد پلاس‌پلاس را اجرا کنید و هم‌زمان با توضیحاتی که می‌خوانید، کدهای موردنیاز را بنویسید.

مقدمه

با انتشار پنجمین نسخه از PHP در سال ۲۰۰۴، برنامه‌نویسان این زبان در نهایت امکان بهره بردن از قدرت برنامه‌نویسی شی‌ءگرا را به دست آوردند. این همان قدرتی است که زبان‌های دیگری چون جاوا و سی، آن را از قبل در اختیار توسعه‌دهندگان قرار داده بودند. 

در این سری آموزشی قصد داریم تا به صورت گام به گام، شما را با نحوه ساختن اشیاء در پی‌اچ‌پی و نیز استفاده کردن از آن‌ها آشنا کنیم. تمام این کارها با قابلیت‌های درونی OOP پی‌اچ‌پی امکان‌پذیر هستند و نیاز به هیچ مورد اضافه‌ی دیگری ندارید. در ادامه، خلاصه‌ای از آنچه فرا خواهید گرفت را مشاهده می‌کنید.

  • تفاوت بین ساخت یک اپلیکیشن پی‌اچ‌پی با روش معمولی (قدیمی) و روش شی‌ءگرا.
  • اصول OOP چه هستند و چگونه از آن‌ها در پی‌اچ‌پی استفاده کنیم.
  • چه زمانی از OOP در اسکریپت‌های پی‌اچ‌پی خود استفاده کنیم.

برخی از افراد هنگام برنامه‌نویسی بسیار سردرگم می‌شوند چرا که این برنامه‌نویسان احتمالا پایه و اساس مفاهیم را به خوبی یاد نگرفته‌اند. همیشه به این نکته توجه داشته باشید که پایه و اساس هر کار، بخش مهمی از آن کار به حساب می‌آید. با در نظر گرفتن این نکات قصد داریم تا آرام آرام به یکی از کلیدی‌ترین سردرگمی‌هایی که هنگام برنامه‌نویسی شی‌ءگرا با PHP وجود دارد، بپردازیم. با یادگیری این نکات، می‌توانید در آینده به خوبی در دنیای شیءگرایی فعالیت داشته باشید.

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

مرحله اول:

ایجاد فایل‌های موردنیاز

پیش از هر چیز مثل همیشه نرم‌افزار Xampp را اجرا کرده و یک پوشه جدید در پوشه‌ی htdocs بسازید. در این پوشه دو فایل جدید به نام‌های index.php و class.php را نیز بسازید.

شی‌ء‌گرایی (OOP) به معنای ساختن یک کد ماژولار است و بنابراین کدهای پی‌اچ‌پی شی‌ءگرایی که می‌نویسیم در فایل‌های مخصوص به خود قرار داده می‌شوند و سپس در صفحات پی‌اچ‌پی اصلی خود در مواقع نیاز از کدهای شی‌ءگرای نوشته شده بهره می‌بریم. همان‌طور که در جلسات قبل نیز به شما آموزش دادیم، می‌توان یک صفحه‌ی پی‌اچ‌پی را با دستور include به یک صفحه‌ی دیگر پی‌اچ‌پی اضافه کرد. حال در اینجا ما فایل‌های شیءگرای نوشته شده را به صفحات اصلی پی‌اچ‌پی خود اضافه خواهیم کرد.

محور اصلی برنامه‌نویسی شی‌ءگرا بر ساختارهایی به نام کلاس (class) می‌چرخد. کلاس‌ها قالب‌های کلی برای تعریف اشیاء در برنامه‌نویسی شیءگرا هستند.

مرحله دوم:

ساختن یک کلاس پی‌اچ‌پی در فایل class.php

به منظور طراحی اسکریپت‌های پی‌اچ‌پی خود به جای این‌که چندین تابع، متغیر و کدهای شناور مختلف داشته باشید، بهتر است کتابخانه‌های مخصوص به خود را با روش OOP ایجاد کرده و در واقع کلاس‌های خودتان را تعریف کنید.

برای تعریف کلاس خود باید از کلمه کلیدی class استفاده کنیم و به دنبال آن نامی را که قصد داریم برای کلاس تعیین شود، می‌نویسیم. به مثال زیر دقت کنید.

<?php
class person {
}
?>

نکته: محتوای هر کلاس همانند ساختار توابع، با علامت آکولاد ( { } ) احاطه می‌شود.

مرحله سوم:

کلاس‌ها را می‌توان نقشه‌هایی برای اشیاء پی‌اچ‌پی دانست. یکی از بزرگترین تفاوت‌هایی که بین توابع و کلاس‌ها وجود دارد این است که یک کلاس شامل داده‌ها (متغیرها) و توابع مختلف است. هر یک از توابع موجود در کلاس را یک شیء (object) می‌نامند.

هنگامی که شما بخواهید متغیرهای موردنظر خود را در داخل یک کلاس ایجاد کنید، به این متغیرها خاصیت یا ویژگی می‌گویند. به مثال زیر توجه کنید:

<?php
class person {
var $name;
}
?>

نکته: داده‌ها. متغیرهایی که در داخل یک کلاس تعریف شده‌اند را خواص آن کلاس می‌گویند.

مرحله چهارم:

افزودن توابع‌/متدها به کلاس

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

از متدهای یک کلاس به منظور اعمال تغییرات در داده‌ها و خواص (متغیرهای کلاس) استفاده می‌کنیم. به مثال زیر توجه کنید:

<?php
class person {
var $name;
function set_name($new_name) {
$this->name = $new_name;
}
function get_name() {
return $this->name;
}
}
?>

نکته: فراموش نکنید که در یک کلاس، متغیرها را Property (مشخصه‌ها یا ویژگی‌ها) می‌نامند و توابع نیز متدهای کلاس خوانده می‌شوند.

مرحله پنجم:

توابع ست‌کننده و دریافت کننده

ما دو تابع (متد) جالب را تعریف کرده‌ایم. یکی get_name() و دیگری set_name().

این متدها از حالت کلی و رایج برنامه‌نویسی شیءگرا (OOP) پیروی می‌کنند و شما می‌توانید این ویژگی را در سایر زبان‌های برنامه‌نویسی که از شی‌ءگرایی پشتیبانی می‌کنند (مثل جاوا و Ruby) نیز مشاهده کنید.

مورد دیگر این‌که توابع ست‌کننده و دریافت‌کننده باید با نام مشخصه‌ای (متغیر) که قصد تغییر آن را دارند، نام یکسانی داشته باشند. به مثال زیر توجه کنید:

<?php
class person {
var $name;
function set_name($new_name) {
$this->name = $new_name;
}

function get_name() {
return $this->name;
}
}
?>

نکته: توجه داشته باشید که نام توابع ست‌کننده و دریافت‌کننده، باید با نام مشخصه‌های مرتبط با آن‌ها یکسان باشد.

با استفاده از این روش، هنگامی که توسعه‌دهندگان پی‌اچ‌پی بخواهند اشیاء شما را مورداستفاده قرار دهند، می‌دانند که اگر تابعی به نام یک متغیر درون کلاسی باشد، آن تابع یا متد به منظور اعمال تغییرات روی آن متغیر به‌کار می‌رود.

در جلسات بعدی به ادامه‌ی مبحث می‌پردازیم.

 منبع: زومیت

آموزش PHP – جلسه بیستم: کار با رشته ها

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

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

تابع ()strpos

شما هنگام برنامه‌نویسی نیاز خواهید داشت تا به عنوان مثال جایگاه بخش خاصی از یک رشته متنی را بیرون بکشید. برای انجام چنین کاری می‌توانید از تابع ()strpos بهره ببرید و جایگاه بخشی از یک رشته متنی را که مدنظرتان است به‌دست آورید.

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

$numberedString = “123456789”; // 9 numbers from 1 to 9

$fivePos = strpos($numberedString, “5”);
echo $fivePos;

در مثال بالا ابتدا اعداد ۱ تا ۹ در یک متغیر قرار داده شده‌اند. سپس با استفاده از تابع strpos متغیر حاوی این اعداد را که حالا یک رشته متنی است به عنوان ورودی اول و عدد ۵ را به عنوان ورودی دوم قرار داده‌ایم. خروجی تابع را در متغیری به نام fivePos قرار داده‌ایم و آن را چاپ کرده‌ایم. خروجی این کد عدد ۶ خواهد بود. اما چرا؟ شمارش جایگاه هر کاراکتر در رشته‌ها در پی‌اچ‌پی مانند بسیاری از زبان‌های برنامه‌نویسی از ۰ شروع می‌شود. بنابراین عدد یک در رشته متنی بالا جایگاه شماره ۰ را دارد و عدد شماره ۲ جایگاه شماره ۱ و به همین ترتیب.

تابع ()str_replace

یکی دیگر از ابزارهای کلیدی در برنامه‌نویسی قابلیت جایگذاری آسان موارد دلخواه در رشته‌های متنی با مقادیر جدید است. در پی‌اچ‌پی تابعی به نام ()str_replace وجود دارد که شبیه به پردازشگر‌های کلمه کار کرده و می‌توان با استفاده از آن جای‌گذاری رشته‌ها را انجام دهید.

پارامترهای ورودی این تابع سه مورد هستند که حالت کلی آن به شکل زیر است:

str_replace(search, replace, originalString)

در ادامه توضیح مربوط به هر کدام از این ورودی‌ها را مشاهده می‌کنید:

  1. Search: این ورودی همان چیزی است که قصد دارید در رشته متنی به دنبال آن بگردید. این ورودی می‌تواند یک رشته متنی یا یک آرایه باشد.
  2. Replace: تمام یافته‌های حاصل از جستجوی رشته‌های متنی با این ورودی جایگزین می‌شوند. این ورودی در واقع مقدار جدیدی است که قصد دارید آن را با مقادیر قدیمی موردنظر جایگزین کنید.
  3. OrginalString: رشته متنی اولیه که قصد دارید در آن به جستجو و جایگزین کردن رشته‌های جدید بپردازید.

برای درک بهتر این تابع به مثال زیر توجه کنید:

<?php
//string that needs to be customized
$first= “Welcome to mehrastan”;

$sec= str_replace(“mehrastan”, “mehrastan university”, $first);

echo $sec;
?>

نتیجه اجرای کد بالا عبارت Welcome to mehrastan university خواهد بود. چرا که با استفاده از تابع str_replace کلمه mehrastan را به mehrastan university تغییر داده‌ایم و خروجی آن را در متغیری به نام sec قرار داده‌ایم. سپس این متغیر را چاپ کرده‌ایم.

تابع ()trim

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

<?php
//string that needs to be trimmed
$stringTest = ” test trim func “;
$finalString = trim($stringTest);
echo $finalString;
?>

در مثال بالا رشته متنی که دارای فاصله اضافه در ابتدا و انتهای خود است به عنوان ورودی در تابع trim وارد کرده و مقدار نهایی را در یک متغیر قرار داده‌ایم. سپس این متغیر را چاپ کرده‌ایم. نتیجه رشته‌ متنی بدون فاصله‌های اضافه اول و آخر آن خواهد بود.

از تابع ()ltrim و ()rtrim هم می‌توانید به صورت مشابه و به ترتیب برای حذف کاراکترهای خالی سمت چپ و حذف کاراکترهای سمت راست بهره ببرید.

تابع ()md5

با استفاده از این تابع می‌توانید یک رشته متنی را بدون بازگشت به صورت کدشده در بیاورید. از این تابع در پی‌اچ‌پی استفاده فراوانی می‌شود. به عنوان مثال پیش از ذخیره رمزهای عبور یا اطلاعات مهم دیگر بسیاری از برنامه‌نویسان آن‌ها را با تابع md5 به صورت رمزنگاری شده درمی‌آورند و سپس آن را در بانک‌های اطلاعاتی ذخیره می‌کنند. بدین ترتیب امنیت بیشتری در پروژه نوشته شده با PHP برقرار خواهد شد. به مثال زیر دقت کنید:

<?php
//string that needs to encrypted
$str = “mehrastan”;
$finalStr = md5($str);
echo $finalStr;
?>

نتیجه اجرای کد فوق چاپ عبارت ۵۶۴۸۷۸۶۲c6e25c640a93c75c19379391 در مرورگر کاربر خواهد بود. همان‌طور که می‌بینید این تابع فقط یک ورودی دریافت می‌کند و آن هم همان رشته متنی‌ است که قصد دارید آن را رمزنگاری کنید.

تابع ()str_word_count

از این تابع به منظور شمارش تعداد کلمات موجود در یک رشته متنی استفاده می‌شود. ساختار کلی این تابع به شکل زیر است:

str_word_count(string,return,char)

این تابع سه ورودی دارد که ورودی اول ضروری و ورودی دوم و سوم اختیاری هستند و می‌توان آن‌ها را در تابع وارد نکرد.

  1. string: رشته متنی‌ که قصد دارید تعداد کلمات آن را شمارش کنید.
  2. return: این ورودی اختیاری است. می‌توان سه مقدار برای آن تعیین کرد. اگر این ورودی ۰ باشد، خروجی تابع همان تعداد کلمات رشته متنی است که به صورت پیش‌فرض اگر وارد نشود هم همان صفر درنظر گرفته می‌شود. اگر این آرگومان ۱ باشد، خروجی تابع یک آرایه از تمام کلمات رشته متنی موردنظر خواهد بود. اگر این آرگومان ۲ باشد خروجی تابع آرایه‌ای از کلمات خواهد بود با این تفاوت که این بار کلید هر عضو از آرایه در واقع جایگاه آن در رشته متنی خواهد بود.
  3. char: این آرگومان نیز اختیاری است. می‌توان با این ورودی برخی کاراکترهای خاص را به عنوان کلمه در نظر گرفت. 

برای آشنایی بیشتر با این تابع به مثال زیر دقت کنید:

<?php
$str = “mehrastan weblog”;
$finalStr = str_word_count($str);
echo $finalStr;
?>

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

تابع ()strlen

با استفاده از این تابع می‌توانید تعداد کاراکترهای یک رشته متنی را شمارش کنید. این تابع فقط یک ورودی دارد و آن هم رشته متنی موردنظری است که قصد دارید تعداد کاراکترهایش را بشمارید. به مثال زیر دقت کنید.

<?php
$str = “mehrastan weblog”;
$finalStr = strlen($str);
echo $finalStr;
?>

نتیجه اجرای کد فوق عدد ۱۶ خواهد بود. چراکه رشته متنی ذخیره شده در متغیر str در کد بالا، شامل ۱۶ کاراکتر است. دقت کنید که فاصله هم به عنوان یک کاراکتر شناخته می‌شود.

تابع ()substr

از این تابع به منظور برش دادن بخش خاصی از یک رشته متنی می‌توان استفاده کرد. خروجی این تابع بخش موردنظر شما خواهد بود. این تابع سه ورودی دارد و ساختار کلی آن به شکل زیر است:

substr(string,start,length)

توضیحات مربوط به ورودی‌های این تابع در زیر آورده شده است:

  1. string: رشته متنی‌ که قصد دارید بخشی از آن را برش دهید.
  2. start: جایگاهی که قصد دارید از آنجا عمل برش رشته متنی انجام شود. این عدد در واقع شماره جایگاه کاراکتر اولیه‌ای است که قصد دارید برش را از آنجا آغاز کنید. اگر این مقدار ۰ باشد، عملیات برش از اولین کاراکتر شروع می‌شود.
  3. length: این ورودی در واقع اختیاری بوده و می‌توانید آن را وارد نکنید. این ورودی طول رشته متنی برش خورده نهایی را بر حسب کاراکتر نشان می‌دهد. به صورت پیشفرض اگر این آرگومان را وارد نکنید رشته متنی تا آخرین کاراکتر برش خواهد خورد.

برای درک بهتر این تابع توجه شما را به مثالی که از وب‌سایت w3schools آورده شده جلب می‌کنیم:

<!DOCTYPE html>

<html>

<body>

<?php

// Positive numbers:

echo substr(“Hello world”,10).”<br>”;

echo substr(“Hello world”,1).”<br>”;

echo substr(“Hello world”,3).”<br>”;

echo substr(“Hello world”,7).”<br>”;

echo “<br>”;

// Negative numbers:

echo substr(“Hello world”,-1).”<br>”;

echo substr(“Hello world”,-10).”<br>”;

echo substr(“Hello world”,-8).”<br>”;

echo substr(“Hello world”,-4).”<br>”;

?>

</body>

</html>

خروجی کد بالا به صورت زیر خواهد بود:

d

ello world

lo world

orld

d

ello world

lo world

orld

بدین طریق با این تابع می‌‌توانید بخش موردنظر خود را از هر رشته‌ متنی برش دهید.

امیداوریم از این جلسه از سری آموزش‌های پی‌اچ‌پی نهایت استفاده را ببرید. در جلسات آینده و مباحث پیشرفته‌تر با توابع بیشتری آشنا خواهید شد.

در پایان هرگونه سوالی در مورد مباحث این جلسه دارید آن را در بخش نظرات اعلام کنید.
منبع: زومیت

آموزش PHP – جلسه شانزدهم: Session و Cookie

ذخیره اطلاعات در متغیرها برای کاربردهای مختلفی در پی‌اچ‌پی در اختیار توسعهدهندگان قرار گرفته است. علاوه بر این با ذخیره داده‌ها در بانک داده MySql آشنا شدید. اما گاهی نیاز به نوع دیگری از ذخیره داده‌ها خواهید داشت. مثلا متغیرهایی که در تمام پروژه در دسترس باشند. از سشن (Session) و کوکی (Cookie) دقیقا به همین منظور در پی‌اچ‌پی استفاده می‌کنیم. در ادامه با ما همراه باشید.

در برنامه‌نویسی وب بسیار پیش می‌آید که شما نیاز به ذخیره اطلاعات در متغیرهایی داشته باشید که در سراسر پروژه در دسترس باشند. در این شرایط می‌توان از Sessionها و Cookieها استفاده کرد. 

تفاوت Session و Cookie در آن است که سشن‌ها در سرور ذخیره می‌شوند ولی کوکی‌ها در دستگاه کاربر ذخیره خواهند شد.

استفاده از Session

برای استفاده از سشن‌ها باید در ابتدای صفحه ابتدا آن را آغاز کنید. کد شروع یک سشن به صورت زیر است:

<?php

session_start();

?>

اما چگونه می‌توانیم در سشن‌ها اطلاعات مورد نظر را ذخیره کنیم. اگر مبحث آرایه را به یاد داشته باشید بخش سشن‌ها نیز بیشباهت به آن نیست. فرض کنید قصد ایجاد یک سشن به نام user را داریم و می‌خواهیم مقدار آن را نیز برابر mojtaba قرار دهیم. پس باید کدی به شکل زیر بنویسیم:

<?php

session_start();

$_SESSION[‘user’] = “mojtaba”;

?>

همانطور که احتمالا حدس می‌زنید برای دسترسی به مقدار ذخیره شده در یک سشن کافی است نام آن را به شکل زیر مورد استفاده قرار دهیم. درست همانند آنچه در مورد روش دسترسی به اطلاعات آرایه‌ها بکار می‌گرفتیم.

<?php

session_start();

$_SESSION[‘user’] = “mojtaba”;

echo $_SESSION[‘user’];

?>

کد بالا باعث نمایش کلمه mojtaba در مرورگر کاربر می‌شود. اما برای این‌که نوع عملکرد سشن‌ها را بهتر درک کنید، یک مثال ساده می‌زنیم. نرم‌افزار Xampp را مثل همیشه اجرا کنید. حالا در پوشه htdocs یک پوشه به اسم exam ایجاد کرده و در این پوشه نیز دو فایل به نام‌های yek.php و do.php بسازید. فایل yek.php را باز کرده و کد زیر را در آن قرار دهید:

<?php

session_start();

$_SESSION[‘isAdmin’] = true;

$_SESSION[‘username’] = “mehrastan”;

?>

حال فایل را ذخیره کنید و فایل do.php را باز کرده و کدهای زیر را در آن قرار دهید:

<?php

session_start();

if ($_SESSION[‘isAdmin’] == true){

echo “you are admin and your username is $_SESSION[‘username’]”;

}else{

echo “session is not set!”;

}

?>

پس از آغاز سشن، ما دو سشن جدید به نام‌های isAdmin و username را در فایل yek.php ایجاد کردیم و مقدار آن‌ها را به ترتیب true و mehrastan تعیین کردیم. دقت کنید که مقدار سشن isAdmin از نوع Boolean تعیین شده است. حال در فایل do.php پس از اجرای سشن با تابع ()session_start با یک دستور if مقدار سشن isAdmin را بررسی کرده‌ایم که در صورت true بودن پیامی چاپ شود و در این پیام مقدار سشن username نیز به کاربر نمایش داده می‌شود. در غیر اینصورت پیام session is not set به کاربر نمایش داده می‌شود.

همانطور که می‌بینید ما سشن‌ها را در فایل yek.php ایجاد کردیم ولی توانستیم در فایل do.php نیز به آن‌ها دسترسی داشته باشیم.

روش کارکرد کوکی‌ها نیز تقریبا به همین صورت است با این تفاوت که کوکی‌ها در سرور ذخیره نخواهند شد و در عوض در سیستم کاربران ذخیره و در مواقع نیاز از طریق مرورگر فراخوانی می‌شوند. از کوکی‌ها بیشتر به منظور شناسایی کاربران استفاده می‌کنیم. با استفاده از پی‌اچ‌پی می‌توانیم کوکی‌های جدید را ایجاد و مقداردهی و نیز فراخوانی کنیم.

برای تعریف یک کوکی جدید از تابع setcookie استفاده می‌کنیم. به کد زیر دقت کنید:

<?php

setcoockie(name, value, expire, path, domain, secure, httponly);

?>

برخی از ورودی‌های تابع فوق الزامی و برخی دیگر اختیاری هستند. در ادامه به توضیح ورودی‌های این تابع می‌پردازیم.

name: نام کوکی جدید که قصد تعریف آن را داریم

value: مقداری که میخواهیم در کوکی موردنظرمان ذخیره شود

expire: مدت زمانی که کوکی پس از آن منقضی خواهد شد (بر حسب ثانیه)

path: تعیین مسیر ذخیره کوکی در سرور

domain: تعیین این‌که کوکی در چه دامینی در دسترس باشد

secure: تعیین این‌که آیا کوکی فقط در ارتباطات امن در دسترس باشد یا خیر

httponly: اگر این مقدار true باشد کوکی فقط از طریق http در دسترس خواهد بود

در کد زیر یک کوکی جدید به نام name می‌سازیم و مقدار آن را برابر با Mojtaba قرار می‌دهیم. همچنین زمان انقضای این کوکی را ۳۰ روز می‌خواهیم تعیین کنیم و بنابراین ۸۴۰۰۰ ثانیه را در ۳۰ ضرب کرده و نتیجه را برای زمان انقضا در نظر گرفته‌ایم. کاراکتر / به معنای در دسترس بودن کوکی در سراسر دامین است. برای دسترسی به مقدار کوکی همانند سشن‌ها از COOKIE_$ استفاده کرده‌ایم. 

<?php

$value = “Mojtaba”;

setcoockie (“user”, $value, time() + (86400 * 30), ‘/’);

if (isset($_COOKIE[‘user’])

{

    echo “cookie is set and this cookie is: $_COOKIE[‘user’]”;

}

?>

در کد بالا تابع isset را در شرط if بکار برده‌ایم. این تابع بررسی می‌کند که آیا آنچه قصد بررسی‌اش را داریم حاوی مقدار است یا خیر. همچنین تابع time زمان کنونی سرور را برمی‌گرداند.

نکته مهم در مورد استفاده از تابع setcoockie این است که باید حتما پیش از تگ <html> از آن استفاده کنید. مقادر ذخیره شده در کوکی‌ها به صورت رمزنگاری شده درمی‌آیند و هنگام فراخوانی مجددا به صورت خودکار از حالت رمزنگاری شده خارج می‌شوند. با این وجود هیچگاه برای ذخیره‌سازی اطلاعات مهم از کوکی‌ها استفاده نکنید.

از سشن‌ها و کوکی‌ها برای هویت‌سنجی کاربران می‌توان استفاده کرد. تقریبا می‌توان گفت که بیشتر سایت‌هایی که با پی‌اچ‌پی ایجاد شده‌اند، از کوکی و سشن یا ترکیبی از این دو برای بخش ورود کاربران، ورود به بخش مدیریت سیستم و… استفاده می‌کنند.

در جلسه بعد قصد داریم cms نوشته و جلسات قبل را ارتقا دهیم و بخشی برای ورود مدیر ایجاد کنیم که از آن طریق بتوان فقط در صورتی که نام کاربری و رمزعبور مربوطه را داریم اقدام به ارسال مطلب و دسترسی به بخش‌های مدیریت داشته باشیم.

منبع: زومیت

آموزش PHP – جلسه پانزدهم: حذف داده ها از بانک اطلاعاتی MySQL

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

همان‌طور که می‌دانید در کار با داده‌ها و ذخیره اطلاعات ۴ عملیات اصلی را پیش رو داریم؛ درج، خواندن، ویرایش و حذف اطلاعات. گاهی نیاز پیدا می‌کنید تا یکسری از داده‌های موردنظرتان را از جداول MySQL حذف کنید. برای انجام این عملیات نیز باید از کوئری مخصوص حذف داده‌ها استفاده کنیم.

پیش از ادامه این مبحث یک مرور کلی بر بانک اطلاعاتی CMS و جدول posts خواهیم داشت. در این جدول همان‌طور که می‌دانید سه فیلد برای هر مطلب در نظر گرفتیم. فیلد id برای نگه‌داری شناسه منحصربفرد عددی هر مطلب، فیلد title به منظور نگه‌داری عنوان مطالب و فیلد text برای نگه‌داری متن مطلب. پس هر رکورد در جدول posts شامل این سه فیلد است. اما برای حذف اطلاعات نیز نیاز به id منحصربفرد رکوردها خواهید داشت. البته اگر بخواهید تمام رکوردها را با هم و به صورت یکجا حذف کنید نیازی به شناسه یکتای id نداریم. حال به ادامه آموزش می‌پردازیم.

نرم‌افزار Xampp را باز کرده و سرور آپاچی و MySQL را اجرا کنید. حالا فایل edit.php که در جلسه قبلی ایجاد کردیم را باز کرده و کدهای قبلی را پاک کرده و کد زیر را در آن قرار دهید:

<!DOCTYPE html>

<html dir=”rtl” lang=”fa-IR”>

<head>

<title>ویرایش مطلب</title>

<meta charset=”utf-8″ />

</head>

<body style=”font-family: tahoma; font-size:14px;”>

<center>

<?php

include (“config.php”);

//select all records from posts table

$get_query = mysql_query(“SELECT * FROM `posts`”);

//now using while for get each record sepratly and show it to web browser

while ($fetch_result = mysql_fetch_array($get_query))

{

$postTitle = $fetch_result[‘title’];

$postText = $fetch_result[‘text’];

$postId = $fetch_result[‘id’];

echo “<h2><a href=single.php?id=$postId>$postTitle</a> (<a href=editpost.php?id=$postId>ویرایش</a>) – (<a href=deletepost.php?id=$postId>حذف</a>)</h2>”;

}

?>

</center>

</body>

</html>

تنها تغییری که در این فایل ایجاد کردیم، اضافه کردن یک لینک ثابت جدید برای حذف هر مطلب است. همان‌طور که جلسه پیش یک لینک ثابت برای ویرایش هر مطلب ایجاد کردیم به همان صورت یک لینک دیگر با عنوان حذف برای هر مطلب ایجاد کرده‌ایم و لینک مقصد آن را deletepost.php تعیین کرده‌ایم. همچنین شناسه منحصربفرد هر پست را با متغیر id? به فایل deletepost.php ارسال کرده‌ایم تا از این طریق بتوانیم پست انتخابی را حذف کنیم. مطمئنا با توجه به توضیحات کاملی که تاکنون در این مورد ارائه داده‌ایم، می‌دانید که دلیل این کار چیست. پس از اجرای این فایل باید صفحه وب شما شبیه به زیر باشد:

bdfe2c2b-4521-4cd9-919d-af4ac5169e62

حال یک فایل جدید به نام deletepost.php ایجاد کرده و کدهای زیر را در آن قرار دهید:

<!DOCTYPE html>

<html dir=”rtl” lang=”fa-IR”>

<head>

<title>حذف پست</title>

<meta charset=”utf-8″ />

</head>

<body style=”font-family: tahoma; font-size:14px;”>

<center>

<?php

include (“config.php”);

$pid = $_GET[‘id’];

//delete query

$get_query = mysql_query(“DELETE FROM `posts` WHERE `id` = ‘$pid’ “);

if($get_query){

echo “حذف مطلب مورد نظر با شناسه $pid با موفقیت انجام شد.”;

}else{

echo “مشکلی در حذف پست مورد نظر رخ داده است.”;

}

?>

</center>

</body>

</html>

حال به بررسی کد بالا می‌پردازیم. از آنجا که شناسه پست موردنظر را از طریق آدرس URL به فایل deletepost.php ارسال کرده‌ایم، با استفاده از کد:

$pid = $_GET[‘id’];

شناسه id پست مورد نظر را در متغیر pid ذخیره کرده‌ایم. سپس کوئری مخصوص حذف داده‌ها را به صورت زیر نوشته‌ایم:

$get_query = mysql_query(“DELETE FROM `posts` WHERE `id` = ‘$pid’ “);

ابتدا کلمه کلیدی DELETE را نوشته و سپس FROM را می‌نویسم و پس از این دو کلمه نام جدولی که قصد حذف اطلاعات از آن را داریم می‌نویسیم. از آنجا که نام جدول ما posts است پس همین نام را نوشته و سپس مانند جلسات قبل از دستور WHERE استفاده می‌کنیم تا یک شرط برای اجرای این کوئری تعیین کنیم. پس از این کلمه اعلام می‌کنیم که تمام اطلاعات مربوط به رکوردی که id آن برابر مقدار ذخیره شده در pid است و در جدول posts قرار دارد را حذف کند. اگر این کوئری به درستی و با موفقیت انجام شود، متغیر get_query برابر true خواهد بود و اگر به درستی اجرا نشود و مشکلی در اجرای این کوئری پیش بیاید، مقدار ذخیره شده در متغیر get_query برابر false خواهد شد.

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

۳dd97d46-0391-450f-9124-b5dd2095a863آنچه تاکنون انجام داده‌ایم برای حذف تکی مطالب بود. گاهی نیاز است یک گزینه برای حذف همه رکورد‌ها نیز در اختیار داشته باشیم. برای انجام این کار فایل edit.php را باز کرده و آن را به صورت زیر اصلاح کنید. یک لینک در زیر تمامی مطالب قرار می‌دهیم و عنوان آن را حذف کل مطالب تعیین می‌کنیم. همچنین مقصد این لینک را deleteall.php تعیین می‌کنیم. در نهایت فایل edit.php شما باید به صورت زیر باشد:

<!DOCTYPE html>

<html dir=”rtl” lang=”fa-IR”>

<head>

<title>ویرایش مطلب</title>

<meta charset=”utf-8″ />

</head>

<body style=”font-family: tahoma; font-size:14px;”>

<center>

<?php

include (“config.php”);

//select all records from posts table

$get_query = mysql_query(“SELECT * FROM `posts`”);

//now using while for get each record sepratly and show it to web browser

while ($fetch_result = mysql_fetch_array($get_query))

{

$postTitle = $fetch_result[‘title’];

$postText = $fetch_result[‘text’];

$postId = $fetch_result[‘id’];

echo “<h2><a href=single.php?id=$postId>$postTitle</a> (<a href=editpost.php?id=$postId>ویرایش</a>) – (<a href=deletepost.php?id=$postId>حذف</a>)</h2>”;

}

?>

<hr>

<a href=”deleteall.php”>حذف همه مطالب</a>

</center>

</body>

</html>

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

۹e443629-371e-4783-bb42-2ece2439488cحال یک فایل دیگر به نام deleteall.php ایجاد کنید و کدهای زیر را در آن قرار دهید:

<!DOCTYPE html>

<html dir=”rtl” lang=”fa-IR”>

<head>

<title>حذف همه مطالب</title>

<meta charset=”utf-8″ />

</head>

<body style=”font-family: tahoma; font-size:14px;”>

<center>

<?php

include (“config.php”);

//select all records from posts table

$get_query = mysql_query(“DELETE FROM `posts`”);

if($get_query){

echo “تمامی مطالب با موفقیت جذف شدند”;

}else{

echo “مشکلی در حذف همه پست ها رخ داده است”;

}

?>

</center>

</body>

</html>

این فایل نیز دقیقا همانند فایل deletepost.php است با این تفاوت که این بار در کوئری حذف رکوردها شرط کوئری را برمی‌داریم تا همه رکوردها حذف شوند. در نتیجه کوئری زیر:

$get_query = mysql_query(“DELETE FROM `posts`”);

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

۲۳۹۴۰f84-1c29-469d-8935-c607db1f6dd7تا اینجای کار شما پایه و اساس ۴ عملیات اصلی در کار با بانک‌های اطلاعاتی را فرا گرفته‌اید. دقت کنید این آموزش‌ها فقط برای درک کلی شما از عملیات‌ حذف، درج، ویرایش و مشاهده اطلاعات بوده و قطعا می‌توانستیم به جای ایجاد یک فایل برای هر عملیات تمامی کدها را به صورت منظم‌تر در یک فایل ایجاد کنیم. اما برای درک بهتر تصمیم گرفتیم برای هر عملیات یک فایل جدید ایجاد کنیم.

اما اگر بخواهیم سیستم مدیریت محتوای ساخته شده را کاربردی‌تر کنیم باید موارد بیشتری را در آن در نظر بگیریم. مثلا بخش حذف و درج و ویرایش مطالب فقط برای مدیر سایت در دسترس باشد. این جزئیات را به مرور در جلسات آینده به سیستم اضافه خواهیم کرد و مباحث جدیدی را نیز در خلال آن به شما آموزش می‌دهیم.

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

منبع: زومیت

آموزش PHP – جلسه چهاردهم: ویرایش داده در بانک اطلاعاتی MySQL

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

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

در واقع می‌توان ویرایش اطلاعات در MySQL را ترکیبی از خواندن و درج داده دانست.

ویرایش داده‌ها در بانک اطلاعاتی MySQL

ابتدا مثل همیشه نرم‌افزار سرور مجازی Xampp را باز کرده و سرور آپاچی و مای‌اس‌کیو‌ال را اجرا کنید. پوشه cms که مربوط به پروژه ما می‌شود را باز کرده و یک فایل جدید به نام edit.php ایجاد کنید. در این فایل قصد داریم همانند روشی که اطلاعات را در فایل index به نمایش درآوردیم، لیست مطالب را نشان دهیم اما با این تفاوت که این‌بار فقط عنوان مطالب را نمایش می‌دهیم و در کنار هر مطلب یک گزینه برای ویرایش آن قرار می‌دهیم. حال کدهای زیر را در این فایل قرار داده و فایل را ذخیره کنید.

<!DOCTYPE html>

<html dir=”rtl” lang=”fa-IR”>

<head>

<title>ویرایش مطلب</title>

<meta charset=”utf-8″ />

</head>

<body style=”font-family: tahoma; font-size:14px;”>

<center>

<?php

include (“config.php”);

//select all records from posts table

$get_query = mysql_query(“SELECT * FROM `posts`”);

//now using while for get each record sepratly and show it to web browser

while ($fetch_result = mysql_fetch_array($get_query))

{

$postTitle = $fetch_result[‘title’];

$postText = $fetch_result[‘text’];

$postId = $fetch_result[‘id’];

echo “<h2><a href=single.php?id=$postId>$postTitle</a> (<a href=editpost.php?id=$postId>ویرایش</a>)</h2>”;

}

?>

</center>

</body>

</html>

حال به بررسی کد بالا می‌پردازیم. ابتدا فایل config.php را در صفحه فراخوانی کرده‌ایم تا اتصال به بانک اطلاعاتی انجام شده و سپس جدول مورد نظر ما برای انجام عملیات‌ مختلف انتخاب شود. سپس همانند آنچه در مورد خواندن اطلاعات و در فایل index.php انجام دادیم، در این فایل نیز عنوان مطالب را با یک کوئری از بانک اطلاعاتی MySQL دریافت کرده و سپس آن‌ها را نمایش می‌دهیم. تفاوت این فایل با فایل index.php در این است که اینجا متن مطلب را نمایش نمی‌دهیم و در عوض، در جلو عنوان هر مطلب یک لینک با عنوان ویرایش قرار داده‌ایم و لینک آن را به فایلی به نام editpost.php ست کرده‌ایم. همانند لینک ثابتی که برای نمایش هر مطلب در فایل index ایجاد کردیم در این فایل نیز یک لینک پویا برای ویرایش هر مطلب ایجاد کرده‌ایم. 

از آنجا که شناسه id هر مطلب منحصر به فرد است، همین مشخصه از هر پست را برای ایجاد لینک منحصر به فرد ویرایش هر مطلب بکار برده‌ایم. بنابراین با کلیک روی لینک ویرایش هر مطلب، شناسه id آن مطلب را به فایل editpost.php ارسال می‌کنیم تا در آن فایل با دستور GET و مانند آنچه در بخش آموزش فرم‌ها توضیح داده بودیم، شناسه مطلب مورد نظر را دریافت کرده و براساس آن شناسه اطلاعات پست انتخاب شده را از بانک اطلاعاتی دریافت کنیم. پس از اجرای فایل edti.php باید صفحه‌ شما شبیه به زیر باشد. 

a078f562-2738-4bcf-8c59-190d65d3be5aحال یک فایل جدید به نام editpost.php ایجاد کنید و کدهای زیر را در آن قرار دهید.

<!DOCTYPE html>

<html dir=”rtl” lang=”fa-IR”>

<head>

<title>ویرایش مطلب</title>

<meta charset=”utf-8″ />

</head>

<body style=”font-family: tahoma; font-size:14px;”>

<?php

include (“config.php”);

$pid = $_GET[‘id’];

//select post that its id = pid

$get_query = mysql_query(“SELECT * FROM `posts` WHERE `id` = ‘$pid’ “);

$fetch_result = mysql_fetch_array($get_query);

$postTitle = $fetch_result[‘title’];

$postText = $fetch_result[‘text’];

?>

<center>

<form action=”editpost2.php” method=”post”>

عنوان مطلب : <input type=”text” name=”postTitle” size=”40″ value=”<?php echo $postTitle;?>”><br>

متن مطلب: <br>

<textarea name=”postText” rows=”10″ cols=”50″>

<?php echo $postText;?>

</textarea>

<br>

<input type=”hidden” name=”postID” value=”<?php echo $pid;?>”>

<input type=”submit” value=”ثبت مطلب”>

</form>

</center>

</body>

</html>

همان‌طور که مشاهده می‌کنید باز هم ابتدا فایل config.php را فراخوانی می‌کنیم و دلیل آن را هم مطمئنا می‌دانید. سپس همانند کاری که در فایل single.php انجام دادیم، ابتدا از طریق دستور GET_$ شناسه پستی که قصد ویرایش آن را داریم دریافت کرده و با استفاده از یک کوئری شرطی، تمامی مشخصات مطلبی که شناسه آن را دریافت کرده‌ایم را از بانک اطلاعاتی بیرون می‌کشیم و عنوان و متن مطلب را در دو متغیر قرار می‌دهیم. سپس فرمی مانند فرمی که در فایل insert.php ایجاد کرده بودیم را ایجاد کرده ولی این بار بخش action را برابر editpost2.php قرار می‌دهیم زیرا قصد داریم محتویات این فرم به فایل editpost2.php ارسال شود.  

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

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

<?php echo $postTitle;?>

همان‌طور که می‌دانید این کد، متغیر postTitle را چاپ می‌کنید و هر مقداری که در مشخصه Value فیلدهای متنی قرار داده شود، به صورت پیش‌فرض در آن فیلد قرار داده خواهد شد. سپس در textarea مربوط به متن مطلب نیز به همین صورت و با استفاده از کد:

<?php echo $postText;?>

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

<input type=”hidden” name=”postID” value=”<?php echo $pid;?>”>

این فیلد به کاربر نمایش داده نمی‌شود چراکه نوع آن hidden تعیین شده است. اما سایر خواص این فیلد نیز همانند فیلدهای معمولی است. نام این فیلد postID تعیین شده و مقدار آن نیز برابر با شناسه مطلب است که قصد ویرایش آن را داریم و در بالای صفحه با استفاده از دستور GET_$ آن را در متغیری به نام pid ذخیره کرده بودیم.

حال اگر تمامی مراحل را تا اینجای کار به درستی انجام داده باشید، باید صفحه شما به صورت زیر اجرا شود.

c377b692-c983-41b1-b347-c8bbb442634b

به لینک این صفحه توجه کنید. در ادامه نام فایل id=1 است که نشان از این دارد که ما قصد ویرایش مطلبی که شناسه id آن برابر ۱ است را داریم. البته دقت کنید در نام‌گذاری متغیر URL می‌توانید به جای id از هر متغیر دیگری نیز استفاده کنید ولی در این صورت باید در فایل editpost.php نیز در محلی که با دستور GET_$ می‌خواهیم ای‌دی پست را دریافت کنیم، از نام انتخاب خود استفاده کنید.

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

<!DOCTYPE html>

<html dir=”rtl” lang=”fa-IR”>

<head>

<title>درج مطلب</title>

<meta charset=”utf-8″ />

</head>

<body style=”font-family: tahoma; font-size:14px;”>

<center>

<?php

include (“config.php”);

$newtitle = trim ($_POST[‘postTitle’]);

$newText = trim ($_POST[‘postText’]);

$pid = $_POST[‘postID’];

if($newtitle != “” && $newText != “”){

//do insert

$query_res = mysql_query(“UPDATE `posts` SET `title` = ‘$newtitle’, `text` = ‘$newText’ WHERE `id` = ‘$pid'”);

if($query_res){

echo “مطلب با موفقیت ویرایش شد.”;

}else{

echo “مشکلی در ویرایش مطلب رخ داده است. مجددا تلاش کنید”;

}

}else{

echo ‘<a href=edit.php>لیست مطالب</a>’;

}

?>

</center>

</body>

</html>

در این فایل نیز پس از فراخوانی config.php، مقادیری که از فرم editpost.php ارسال شده را با روشی که پیش از این در جلسات قبلی آموخته‌اید در متغیرهایی به نام newTitle ،newText و pid ذخیره کرده‌ایم. سپس با یک دستور شرطی if بررسی می‌کنیم که کاربر مقادیر فیلدهای عنوان و متن مطلب را حتما وارد کرده باشد. اگر فیلد عنوان و متن مطلب خالی نباشد شرط برقرار بوده و عملیات ویرایش انجام خواهد شد.

برای ویرایش مطالب باید از کوئری UPDATE استفاده کنیم. همان‌طور که در کد بالا مشاهده می‌کنید، کد بروزسانی اطلاعات در جدول post به صورت زیر است:

$query_res = mysql_query(“UPDATE `posts` SET `title` = ‘$newtitle’, `text` = ‘$newText’ WHERE `id` = ‘$pid'”);

ابتدا دستور UPDATE را نوشته و سپس نام جدولی که قصد ویرایش رکوردهای آن را داریم می‌نویسیم. نام جدول ما در اینجا posts است و سپس کلمه کلیدی SET را اضافه می‌کنیم. حالا به تعداد فیلدهایی که قصد ویرایش آن‌ها را داریم ابتدا نام فیلد رکورد موردنظر را نوشته و سپس مقدار جدید را برابر = قرار می‌دهیم. در اینجا `title` = ‘$newtitle’ است که یعنی مقدار فیلد title برابر با مقدار جدیدی که در متغیر newTitle ذخیره کرده بودیم می‌شود. به همین صورت فیلدهای دیگر را نیز در این کوئری می‌نویسیم. 

در آخر باید یک شرط نیز برای کوئری خود تعیین کنیم و به MYSQL بگوییم که فقط مطلبی را ویرایش کند که شناسه id آن برابر متغیر pid است. اگر این شرط را ننویسید، تمامی رکوردها یعنی تمامی مطالب ذخیره شده در بانک اطلاعاتی ما و در جدول posts با مقادیر جدید جایگزین خواهند شد و قطعا ما نمی‌خواهیم این اتفاق رخ دهد. پس دلیل استفاده از شرطی که در انتهای این کوئری به‌کار برده‌ایم را اکنون می‌دانید.

در نهایت همانند آنچه در فایل ثبت مطلب انجام دادیم، با یک شرط بررسی می‌کنیم که آیا کوئری به درستی انجام شده یا خیر. اگر نتیجه کوئری که در متغیر query_res ذخیره شده true باشد پیغام موفقیت‌آمیز بودن ویرایش مطلب نمایش داده می‌شود و اگر false باشد، پیغامی مبنی بر عدم موفقیت ویرایش مطلب به کاربر نشان داده خواهد شد.

اگر مراحل را تا به این قسمت به درستی انجام داده باشید پس از اعمال تغییرات در پست موردنظر خود باید با صفحه‌ای مثل تصویر زیر مواجه شوید.

۷۱b55c63-2368-41f4-b995-0349553f22eaاگر با پیغام خطا مواجه شدید مراحل را به دقت بررسی کنید تا ایراد کار خود را یافته و آن را اصلاح کنید. خب، تا به اینجای کار سه عملیات اصلی و مهم را در کار با بانک‌های اطلاعاتی MySQL با استفاده از PHP فرا گرفته‌اید. مشاهده اطلاعات، درج اطلاعات و ویرایش اطلاعات ذخیره شده قبلی.

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

در جلسه بعدی روش حذف اطلاعات دلخواه از بانک داده مای‌اس‌کیو‌ال را فرا خواهید گرفت.
منبع: زومیت

آموزش PHP – جلسه سیزدهم: خواندن داده‌ها از بانک اطلاعاتی MySQL

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

همان‌طور که گفتیم این جلسه در مورد خواندن اطلاعات از جداول بانک‌ اطلاعاتی MySQL صحبت می‌کنیم. اما این کار به چه منظور انجام می‌شود؟ انتخاب اطلاعات و خواندن آن‌ها برای نمایش این اطلاعات به کاربر یا انجام عملیات‌ دیگر انجام می‌شود.

خواندن اطلاعات از MySQL

ابتدا نرم‌افزار Xampp را مثل همیشه باز کرده و سرورهای Apache و MySQL را در حالت اجرا قرار دهید. حال  پوشه cms که جلسات قبل آن را ایجاد کرده‌اید، باز کنید.

در این پوشه یک فایل جدید به نام index.php بسازید. این صفحه قرار است به منظور نمایش اطلاعات مورد استفاده قرار گیرد. در این صفحه ما با استفاده از دستورات پی‌اچ‌پی و مای‌اس‌کیو‌ال، اطلاعات مربوط به پست‌های ثبت شده در جدول posts که در بانک اطلاعاتی cms ساخته بودیم را می‌خوانیم و آن‌ها را در مرورگر به نمایش درمی‌آوریم. کد زیر را در فایل index.php قرار دهید تا در ادامه آن را بررسی کنیم و کار هر خط از این کد را برایتان توضیح دهیم.

<!DOCTYPE html>
<html dir=”rtl” lang=”fa-IR”>
<head>
<title>صفحه اصلی</title>
<meta charset=”utf-8″ />
</head>
<body style=”font-family: tahoma; font-size:14px;”>
<center>
<?php
include (“config.php”);
//select all records from posts table
$get_query = mysql_query(“SELECT * FROM `posts`”);
//now using while for get each record sepratly and show it to web browser
while ($fetch_result = mysql_fetch_array($get_query))
{
$postTitle = $fetch_result[‘title’];
$postText = $fetch_result[‘text’];
echo “<h2>$postTitle</h2>”;
echo “<p>$postText</p><hr>”;
}
?>
</center>
</body>
</html>

همان‌طور که در کد بالا می‌بینید ابتدا با دستور inlcude فایل اتصال به بانک اطلاتی و انتخاب جدول cms که config.php نام دارد را در این فایل فراخوانی می‌کنیم. حالا می‌توانیم به جدول موردنظر که در اینجا posts است کوئری زده و عملیات موردنظرمان را انجام دهیم. با دستور SELECT جدول و فیلدهای موردنظر را انتخاب می‌کنیم و آن را در یک آرایه به نام posts_query ذخیره می‌کنیم.

کوئری موردنظر برای انتخاب داده‌ها به این صورت است که ابتدا کلمه SELECT را نوشته و سپس نام فیلد‌هایی که قصد خواندن آن‌ها را داریم وارد می‌کنیم و آن‌ها را با کاما انگلیسی از یکدیگر جدا می‌سازیم. البته اگر بخواهیم تمام فیلد‌ها را با هم بخوانیم کافی است از کاراکتر ستاره (*) یعنی همان‌طور که ما در کد بالا نوشته‌ایم استفاده کنیم. سپس کلمه کلیدی FROM و بعد از آن نام جدولی که قصد خواندن اطلاعاتش را داریم می‌نویسیم.

حال با استفاده از حلقه while تا زمانی که در جدول post رکورد وجود دارد پست‌ها را گرفته و نمایش می‌دهیم. در شرط حلقه خروجی تابع mysql_fetch_array را در یک آرایه دیگر به نام fetch_results ذخیره می‌کنیم. به‌طور هم‌زمان این شرط باعث می‌شود تا حلقه به تعداد رکوردهایی (مطالبی) که در جدول posts وجود دارد تکرار شود. در هر بار تکرار شدن این حلقه اطلاعات فیلدهای مختلف هر رکورد در آرایه fetch_results ذخیره می‌شود. برای دسترسی به اطلاعات هر فیلد از هر رکورد باید نام آن فیلد را در کروشه جلوی آرایه fetch_results بنویسیم. همان‌طور که در کد بالا می‌بینید ما فیلد‌های title و text را فراخوانی کرده‌ایم. 

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

حالا آدرس http://127.0.0.1/cms/index.php را در مرورگر اجرا کنید. اگر خاطرتان باشد نوع یونیکد فیلدهای جداول بانک اطلاعاتی را از نوع utf-8 تعیین کردیم تا بتوانیم متون فارسی را در جدول posts ذخیره کنیم. حال اگر پروژه را با آدرسی که گفتیم اجرا کنید با صفحه‌ای مانند زیر مواجه خواهید شد و کاراکترها همگی به صورت علامت سوال نمایش می‌یابند.

cbd12f2c-a3c0-49e1-b534-5b4ea7d36089اما باز هم جای نگرانی نیست. این مشکل به دلیل نوع اتصال به بانک اطلاعاتی رخ داده و برای رفع آن باید فایل config.php را کمی ویرایش کنید. در واقع باید نوع اتصال را هم utf-8 تعیین کنیم که این کار بسیار آسان است. فایل config.php را باز کنید و آن را به صورت زیر تغییر دهید. در واقع کد زیر را جایگزین کد کنونی کنید.

<?php
$dbhost = “localhost”;
$dbuser = “root”;
$dbname = “cms”;
$dbpass = “”;
$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);
mysql_set_charset(‘utf8’,$connect_db);
mysql_select_db($dbname,$connect_db);
?>

همان‌طور که می‌بینید در خط ۷ کد بالا از تابع mysql_set_charset استفاده کرده‌ایم. پس از اتصال به بانک داده و پیش از انتخاب جدول موردنظر، باید این کد را استفاده کنید. این تابع دو آرگومان ورودی دارد که ورودی اول نوع یونیکد موردنظر برای اتصال به سرور MySQL و ورودی دوم لینک تابع اتصال به بانک داده خواهد بود که در اینجا connect_db است.

حالا اگر مجددا به صفحه http://127.0.0.1/cms/index.php مراجعه کنید مشکل رفع شده و متون فارسی به درستی نمایش یافته‌اند. اگر خاطرتان باشد گفتیم که استفاده از include باعث می‌شود در صورت نیاز به انجام تغییرات، با تغییر یک فایل می‌توان این تغییرات را در تمامی فایل‌ها اعمال کرد.

۵۰۴۳۴b02-620b-4f39-a972-e7f4412163a8اگر همه چیز را به درستی انجام داده باشید نتیجه کار باید شبیه به عکس بالا باشد و متون فارسی به درستی نمایش یابند.

ایجاد صفحه اختصاصی برای هر پست

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

اگر به‌‌یاد داشته باشید گفتیم از روش GET که در ثبت فرم‌ها آن‌ را توضیح دادیم می‌توان استفاده‌های مناسبی در پی‌اچ‌پی کرد. یکی از بهترین استفاده‌ها ایجاد صفحه اختصاصی برای هر پست است. کافی است بعد از خط ۲۰ یعنی:

$postText = $fetch_result[‘text’];

یک خط جدید اضافه کنید. خط زیر را پس از خط ۲۰ اضافه کنید تا آی‌دی هر پست را با هربار اجرای حلقه مانند عنوان و متن پست‌ها دریافت کنیم و آن را در یک متغیر به نام postId ذخیره کنیم.

$postId = $fetch_result[‘id’];

حالا کد:

echo “<h2>$postTitle</h2>”;

را به:

echo “<h2><a href=single.php?id=$postId>$postTitle</a></h2>”;

تغییر دهید. به این طریق یک لینک منحصر به فرد برای هر مطلب ایجاد کرده‌ایم. به عنوان مثال اگر روی مطلب اول کلیک کنیم به لینک http://127.0.0.1/cms/singe.php?id=1 منتقل خواهیم شد. حالا به راحتی می‌توان با دستورات پی‌اچ‌پی اطلاعات پستی که آی‌دی آن ۱ است را نشان دهیم.

ابتدا یک فایل جدید در پوشه cms ایجاد کرده و نام آن را single.php بگذارید. در این فایل کدهای زیر را قرار دهید:

<!DOCTYPE html>

<html dir=”rtl” lang=”fa-IR”>

<head>

<title>مشاهده پست</title>

<meta charset=”utf-8″ />

</head>

<body style=”font-family: tahoma; font-size:14px;”>

<center>

<?php

include (“config.php”);

$pid = $_GET[‘id’];

//select all records from posts table

$get_query = mysql_query(“SELECT * FROM `posts` WHERE `id` = ‘$pid’ “);

$fetch_result = mysql_fetch_array($get_query);

$postTitle = $fetch_result[‘title’];

$postText = $fetch_result[‘text’];

echo “<h2>$postTitle</h2>”;

echo “<p>$postText</p><hr>”;

?>

</center>

</body>

</html>

این کد نیز شبیه به کد index.php است با این تفاوت که این بار در کوئری انتخاب داده از بانک اطلاعاتی تغییراتی وجود دارد و نیز دیگر نیازی به استفاده از حلقه نداریم زیرا در اینجا فقط قصد داریم یک رکورد را از جدول posts بخوانیم.

مثل همیشه ابتدا config.php را با دستور include فراخوانی کرده و سپس با دستور GET_$ همان‌طور که در جلسه آموزش فرم‌ها گفتیم، شناسه پست موردنظر را در متغیری به نام pid ذخیره می‌کنیم.

حال باید کوئری را با یک شرکت به کار ببریم. مانند کوئری فایل index.php دستور اولیه را نوشته و در ادامه آن کلمه کلیدی WHERE را می‌نویسیم. این کلمه به بانک اطلاعاتی می‌گوید که ما دقیقا دنبال چه رکورد یا رکوردهایی هستیم. در اینجا ما به دنبال رکوردی هستیم که فیلد id آن برابر با یک است پس فیلدی که باید بررسی شود id است. حال نام فیلد را هم نوشته و پس از علامت = نام متغیری که شناسه آی‌دی پست موردنظر را در خود دارد می‌نویسیم. به طور خلاصه می‌توان گفت این کوئری در جدول posts به دنبال فیلدی می‌گردد که شناسه id آن برابر با عدد ۱ است.

همان شرطی که در فایل index در حلقه به کار بردیم را این‌بار بدون حلقه مورد استفاده قرار می‌دهیم و همانند فایل index از طریق آرایه‌ها به مقادر فیلد‌های پست موردنظر دسترسی می‌یابیم.

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

فایل index.php نهایی به شکل زیر خواهید بود-

e7574165-96f2-4984-82a1-7667af6e279cهمچنین فایل single.php پس از کلیک روی عنوان اولین مطلب به شکل زیر است:

c4fefc71-2cbe-4def-99b0-08a4450875e9امیدواریم از این جلسه نیز نهایت استفاده را برده باشید. برای تمرین سعی کنید برای جدول posts فیلدهای بیشتری تعریف کنید. مثلا یک فیلد برای خلاصه متن مطلب هم ایجاد کنید و با توجه به آنچه تا‌کنون یاد گرفته‌اید هنگام درج مطلب به کاربر اجازه دهید تا سه فیلد را برای هر مطلب پر کند. سپس در صفحه index خود خلاصه و عنوان پست را نمایش دهید و در صفحه اختصاصی هر پست در فایل single.php متن کامل مطلب را به نمایش بگذارید.

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

منبع: زومیت

 

آموزش PHP – جلسه هشتم: توابع

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

توابع از جمله مهم‌ترین مباحثی است که در آموزش پی‌اچ‌پی باید یاد بگیرید. این مبحث علی‌رغم اهمیت بالا و کاربرد فراوان بسیار آسان و لذت‌بخش است. پس خود را برای یک سفر کوتاه اما به یادماندنی در دنیای PHP آماده کنید.

تابع (Function) چیست؟

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

۰aceda39-23c2-43ea-87c6-d98c6bef7bb2<?php
function MyFunc (){
//some oprates on code!
}
?>

همان‌طور که در کد بالا می‌بینید برای تعریف یک تابع ابتدا باید کلمه کلیدی function را نوشته و سپس نام موردنظر را برای تابع تایپ کنیم. سپس در صورتی که تابع ما نیاز به ورودی داشته باشد باید آن‌ها را در پرانتز مقابل نام تابع تعریف کنیم. در نهایت نیز عملیاتی که باید بر روی داده‌ها انجام شود بین } و { قرار داده می‌شود. دقت کنید در کد بالا ما نام تابع را MyFunc قرار داده‌ایم و این نام دلخواه است. فقط باید توجه داشته باشید در نامگذاری توابعی که تعریف می‌کنید، کلمات کلیدی پی‌اچ‌پی نظیر دستورات پیش‌فرض را به عنوان نام تابع نمی‌توانید انتخاب کنید.

در پی‌اچ‌پی می‌توان توابعی تعریف کرد که نیاز به ورودی نداشته باشند و این نوع توابع در واقع ساده‌ترین نوع ممکن توابع به حساب می‌آیند. به مثال زیر دقت کنید:

<?php
//define func
function bigHello()
{
echo “<h1>hello!</h1>”;
}

//call or using func
bigHello();
?>

در کد بالا ابتدا یک تابع به نام bigHello را معرفی کردیم و کد داخل آن را چاپ عبارت hello در بین تگ h1 تعیین کرده‌ایم. اما همان‌طور که اشاره شد تا زمانی که تابع را فراخوانی نکنیم هیچ اتفاقی نخواهد افتاد و به همین دلیل در خط بعدی با نوشتن نام تابع به صورتی که مشاهده می‌کنید آن را فراخوانی کرده‌ایم. نتیجه کد بالا چاپ عبارت Hello! در بین تگ h1 خواهد بود. حال شما می‌توانید به هر تعداد که می‌خواهید این تابع را فراخوانی کنید و طبیعتا به ازای هر بار فراخوانی تابع، یکبار کد داخل آن اجرا می‌شود.

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

پارامتر‌ها در توابع یا همان ورودی توابع

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

<?php

function myFunc ($name, $age)
{

echo “your name is $name and your age is $age”;

}

myFunc(“mojtaba”, “25”);

?>

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

اگر در کد بالا، به جای دو ورودی، یک ورودی را وارد کنید، با خطای پی‌اچ‌پی مواجه خواهید شد چرا که کامپایلر php در این شرایط نیاز دارد تا دو ورودی به تابع ما ارسال شود.

برای درک بهتر ورودی‌ها در توابع به مثال دیگری توجه کنید. قصد داریم یک تابع بنویسیم که دو عدد را از کاربر گرفته و آن‌ها را در هم ضرب و سپس نتیجه را چاپ کند.

<?php

function Zarb ($a, $b)
{
$c = $a * $b;
echo $c;
}

//using our Zarb Function
Zarb (3, 5);
?>

نتیجه اجرای کد بالا چاپ عدد ۱۵ در مروگر کاربر خواهد بود.  در مثال بالا ابتدا دو ورودی از کاربر گرفته و آن‌ها را در متغیرهایی به نام a و b ذخیره کرده‌ایم. سپس یک متغیر داخلی به نام c در تابع خود تعریف می‌کنیم و مقدار حاصل از ضرب a و b را در آن قرار می‌دهیم. سپس مقدار c را به عنوان خروجی تابع چاپ می‌کنیم.

استفاده از آرگومان‌های ورودی پیش‌فرض در توابع

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

به مثال زیر دقت کنید:

<?php

function myFunc ($name = “mojtaba”)
{
echo $name;
}

myFunc();

?>

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

مقادیر بازگشتی در توابع

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

در مثال زیر می‌خواهیم یک تابع تعریف کنیم که دو عدد را از ورودی گرفته و آن‌ها را در هم ضرب می‌کند. اما این‌بار به جای چاپ خروجی، مقدار نهایی حاصل‌ضرب دو عدد ورودی را به صورت یک متغیر خروجی بازگشت می‌دهد.

<?php
function Zarb($a, $b)
{
$c = $a * $b;
return $c;
}

echo Zarb(2,3);
?>

در مثال بالا برای روشن‌تر شدن موضوع ابتدا مقدار بازگشتی تابع Zarb را در متغیری به نام c ریخته‌ایم و سپس مقدار c را با دستور echo چاپ کرده‌ایم. نهایتا خروجی کد بالا عدد ۲۰ خواهد بود. حالا احتمالا به خوبی مفهوم مقدار بازگشتی در توابع را یاد گرفته‌اید.

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

در جلسه بعد اولین پروژه عملی این دوره آموزشی را با هم ایجاد خواهیم کرد و در هر جلسه علاوه بر یادگیری مباحث جدید و کاربردی، پروژه خود را کامل‌تر می‌کنیم. همچنین در صورتی که سوالی در مورد مباحث این جلسه دارید آن را در بخش نظرات اعلام کنید.

منبع: زومیت

آموزش PHP – جلسه ششم: حلقه‌ های While و For

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

گاهی در برنامه‌نویسی‌ شرایطی پیش می‌آید که نیاز داریم بخش خاصی از کد چندین مرتبه اجرا شود. در این حالت می‌توانیم از حلقه‌ها بهره ببریم. همانند سایر زبان‌های‌ برنامه‌نویسی در php هم از چند نوع حلقه پشتیبانی می‌‌شود. حلقه while و for از جمله مهمترین آن‌ها هستند.

حلقه while

با استفاده از این حلقه می‌توان کد مورد نظر را تا زمانی که شرط برقرار باشد اجرا کرد. به مثال زیر که ساده‌ترین حالت استفاده از حلقه while است توجه کنید.

<?php
while ($var < 10)
{
echo “var is now < 10”;
}
?>

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

کار را با یک مثال دیگر ادامه می‌دهیم.در مثال زیر ابتدا متغیر i را برابر با عدد ۱ قرار داده و در شرط حلقه، اعلام می‌کنیم تا زمانی‌که مقدار i از عدد ۷ کوچک‌تر است، کد داخل حلقه اجرا شود. در کد حلقه ابتدا مقدار کنونی i را چاپ کرده و سپس با استفاده از عملگر افزایشی که در جلسات پیش با آن آشنا شدید، در هربار اجرای حلقه یک واحد به مقدار کنونی متغیر i اضافه می‌کنیم. بدین صورت کد حلقه تا زمانی‌که مقدار i کوچک‌تر از عدد ۷ باشد، اجرا خواهد شد و‌ نتیجه مثال زیر چاپ اعداد ۱ تا ۶ خواهد بود.

<?php
$i = 1;
while ($i < 7)
{
echo “$i <br>”;
$i++;
}
?>

اما فرض کنید شرط حلقه به نحوی باشد که از همان ابتدا مقدار False را برگرداند. در این حالت کد داخل حلقه هیچ‌گاه اجرا نمی‌شود. اما در پی‌اچ‌پی راهی تعبیه شده تا در صورت نیاز کد موردنظر ما در حلقه حتی اگر شرط هم برقرار نباشد، حداقل یک بار اجرا شود. در این شرایط باید از دستور Do…While استفاده کنیم.

حلقه Do…While

همان‌طور که گفتیم در صورتی که می‌خواهید کد موردنظر شما حتی در حالت برقرار نبودن شرط حلقه یک‌بار اجرا شود، باید از Do … While استفاده کنید. روش کلی استفاده از این نوع حلقه در مثال زیر آورده شده است:

<?php
$i = 8;
do{
echo “meqdare i aknun $i ast”;
$i++;
}while ($i < 7);
?>

در کد بالا ابتدا مقدار متغیر i را برابر ۸ تعیین می‌کنیم. سپس با دستور Do… while ابتدا یک دستور چاپ echo را وارد کرده‌ایم که مقدار کنونی i را نمایش دهد. (دقت کنید برای این‌که قصد دارید مقدار متغییر در دستور echo چاپ شود از دابل کوتیشن استفاده کرده‌ایم.) سپس با عملگر افزایش ++ یک واحد به مقدار کنونی i اضافه کرده‌ایم. تا زمانی‌که شرط داخل While برقرار باشد کد ما نیز اجرا خواهد شد. اما از آنجا که در شرط حلقه فوق برقرار نیست، فقط یک بار شاهد اجرای دستور نوشته شده در این حلقه خواهیم بود.

پس با اضافه کردن Do به حلقه While مشاهده کردید که چگونه می‌توان کد موردنظر را حداقل یک‌بار در صورتی که شرط هم برقرار نباشد اجرا کنیم. ذکر این نکته هم ضروری به نظر می‌رسد که اگر شرط برقرار باشد باز هم کد قرار گرفته در بخش do اجرا خواهد شد.

برای درک بهتر به مثال دیگری در این مورد توجه کنید. در کد زیر ابتدا مقدار متغیر i را برابر ۵ تعیین می‌کنیم و سپس با استفاده از حلقه do…while اعلام می‌کنیم تا هنگامی که شرط ما یعنی کوچک‌تر یا مساوی بودن i با عدد ۷ برقرار است، کد حلقه که این‌بار در بخش do نوشته شده، اجرا شود.

<?php
$i = 5;
do {
echo “number is now $i <br>”;
$i++;
}while($i <= 7);
?>

در کد حلقه باز هم ابتدا مقدار کنونی i را چاپ کرده و سپس به ازای هر بار اجرا حلقه یک واحد به آن اضافه می‌کنیم. پس خروجی کد بالا در مرورگر به صورت زیر خواهد بود:

۵
۶
۷

اما در پی‌اچ‌پی برای استفاده از حلقه‌ها باز هم محدود به این دو روش نیستید. روش بعدی استفاده از حلقه For است.

حلقهFor

اگر به مثال‌هایی که در بخش توضیحات حلقه While آوردیم دقت کرده باشید، متوجه شده‌اید که در هر مثال از یک متغیر به نوعی به عنوان یک شمارشگر بهره برده‌ایم تا در هر بار اجرای حلقه بتوانیم تعداد دفعات تکرار اجرا شدن آن را کنترل کنیم. در حلقه For بر خلاف While شما حتما باید در دستور اصلی این حلقه یک شمارنده تعریف کنید. برای اینکه بهتر موضوع را درک کنید به کد زیر توجه کنید که ساده‌ترین حالت استفاده از حلقه For در پی‌اچ‌پی است:

<?php
//using for in php in simplest mode!
for (init; test; incremnet){
code to run
}
?>

در کد بالا منظور از init در واقع تعریف و مقداردهی یک شمارشگر است. test شرط حلقه خواهد بود و تا زمانی‌که این شرط برقرار باشد (یعنی true را برگرداند) حلقه اجرا خواهد شد و در نهایت incremnet مقدار اضافه شدن یا کاسته شدن شمارشگر حلقه در هربار اجرای حلقه است (دقیقا همان کار عملگر افزایش و کاهشی که در while استفاده کردیم را می‌کند). همچنین به این نکته توجه کنید که بین هر کدام از این موارد باید علامت نقطه‌ویرگول (;) را تایپ کنید. برای درک بهتر این‌بار به مثال عملی زیر توجه کنید:

<?php
for ($i = 1; $i < 7; $i++)
{
echo “$i <br>”;
}
?>

در کد بالا ابتدا شمارنده حلقه را با متغیری به نام i تعریف کرده و مقدار پیش‌فرض آن را عدد ۱ تعیین کردیم. سپس شرط حلقه را نوشته‌ایم که به پی‌اچ‌پی می‌گوید تا زمانی‌که مقدار i کوچکتر از عدد ۷ است حلقه را اجرا کند. در آخر مقدار متغیر شمارنده را به نحوی تعیین کرده‌ایم که بعد از هربار اجرای حلقه یک واحد افزایش داده شود. کد داخل حلقه نیز مقدار کنونی متغیر i را چاپ خواهد کرد. در نتیجه خروجی کد بالا در مرورگر به صورت زیر خواهد بود:

۱
۲
۳
۴
۵
۶

استفاده از حلقه For نسبت به while باعث می‌شود کدنویسی شما کمتر شود و از نظر بسیاری از توسعه‌دهندگان این حلقه به نوعی حرفه‌ای‌تر است. ولی نتیجه کار همان‌طور که متوجه شده‌اید در هر صورت یکی خواهد بود.

حلقه‌ها بسیار ساده هستند ولی در عین حال قدرت زیادی دارند. با کمی خلاقیت می‌توان استفاده‌های بسیار خوبی از این دستورات ببریم. به عنوان مثال ما با استفاده از کد ساخت جدول در HTML و حلقه‌های پی‌اچ‌پی که در این جلسه به صورت کامل با آن‌ها آشنا شدید، یک جدول ضرب بسیار ساده را تولید کرده‌ایم:

<table align=”center”>
<?php
for($i=1; $i<=10; $i++){
for($j=1; $j<=10; $j++){
echo “$i*$j”;
echo ” – “;
}
echo “</br>”;
echo “</br>”;
}
?>
</table>

تنها نکته‌ای که در مثال بالا وجود دارد، این است که همانند دستورات تو در توی if در اینجا نیز از حلقه for به صورت تو در تو استفاده کرده‌ایم. شما می‌توانید همانند IFهای تودرتو بی نهایت حلقه While یا For را هم به همان شکل مورد استفاده قرار دهید. خروجی کد بالا در مرورگر کاربر به صورت زیر خواهد بود:

۱*۱ – ۱*۲ – ۱*۳ – ۱*۴ – ۱*۵ – ۱*۶ – ۱*۷ – ۱*۸ – ۱*۹ – ۱*۱۰ –

۲*۱ – ۲*۲ – ۲*۳ – ۲*۴ – ۲*۵ – ۲*۶ – ۲*۷ – ۲*۸ – ۲*۹ – ۲*۱۰ –

۳*۱ – ۳*۲ – ۳*۳ – ۳*۴ – ۳*۵ – ۳*۶ – ۳*۷ – ۳*۸ – ۳*۹ – ۳*۱۰ –

۴*۱ – ۴*۲ – ۴*۳ – ۴*۴ – ۴*۵ – ۴*۶ – ۴*۷ – ۴*۸ – ۴*۹ – ۴*۱۰ –

۵*۱ – ۵*۲ – ۵*۳ – ۵*۴ – ۵*۵ – ۵*۶ – ۵*۷ – ۵*۸ – ۵*۹ – ۵*۱۰ –

۶*۱ – ۶*۲ – ۶*۳ – ۶*۴ – ۶*۵ – ۶*۶ – ۶*۷ – ۶*۸ – ۶*۹ – ۶*۱۰ –

۷*۱ – ۷*۲ – ۷*۳ – ۷*۴ – ۷*۵ – ۷*۶ – ۷*۷ – ۷*۸ – ۷*۹ – ۷*۱۰ –

۸*۱ – ۸*۲ – ۸*۳ – ۸*۴ – ۸*۵ – ۸*۶ – ۸*۷ – ۸*۸ – ۸*۹ – ۸*۱۰ –

۹*۱ – ۹*۲ – ۹*۳ – ۹*۴ – ۹*۵ – ۹*۶ – ۹*۷ – ۹*۸ – ۹*۹ – ۹*۱۰ –

۱۰*۱ – ۱۰*۲ – ۱۰*۳ – ۱۰*۴ – ۱۰*۵ – ۱۰*۶ – ۱۰*۷ – ۱۰*۸ – ۱۰*۹ – ۱۰*۱۰ –

با کمی خلاقیت بیشتر و اضافه کردن رنگ و حاشیه به کد HTML مربوط به ساخت جدول، می‌توانید یک جدول ضرب کاربری و زیبا را تنها با چند خط کدنویسی در php تولید کنید.

نکته دیگر این‌که حلقه‌ دیگری به نام For Each در پی‌اچ‌پی وجود دارد که کاربرد آن کمی پیشرفته‌تر از دو حلقه مورد بحث است و به دلیل این‌که قصد ما آموزش آسان و روان پی‌اچ‌پی است، ترجیح می‌دهیم در ساخت پروژه‌های عملی چنین بخش‌هایی را به شما آموزش دهیم.

این جلسه نیز در همین‌جا به پایان رسید. مثل همیشه برای شما یک تمرین در نظر داریم. سعی کنید جدول ضرب بالا را با استفاده از حلقه While در php تولید کنید. در صورتی که سوالی در مورد مباحث این جلسه برایتان پیش آمده نیز می‌توانید در بخش دیدگاه‌ها آن را اعلام کنید.

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

منبع: زومیت