آموزش کامل PHP – قسمت 29: شئ گرایی 2

در این جلسه به ادامه مبحث شئ گرایی در php می پردازیم.

مرحله ششم:

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

$this->name = $new_name;

this$ یک متغیر درونی است که به شئ کنونی کلاس مورد نظر اشاره دارد. به عبارت دیگر این یک متغیر ارجاع داخلی است. از این طریق اقدام به صدا زدن همان تابع یا متد درونی کلاس می کنیم. حال به کد زیر توجه کنید:

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

this را مانند یک کلمه کلیدی در نظر بگیرید که به یک متد جاری اشاره می کند.

مرحله هفتم:

استفاده از کلاس در صفحه اصلی index.php

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

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

<?php include("class_lib.php"); ?>

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

مرحله هشتم:

معرفی و ساخت اشیاء

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

<?php include("class_lib.php"); ?>
<?php 
	$mohammad = new person();
?>

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

مرحله نهم:

کلمه کلیدی new

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

<?php include("class_lib.php"); ?>
<?php 
	$ali = new person();
	$mohammad = new person;
?>

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

مرحله دهم:

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

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

<?php include("class_lib.php"); ?>
<?php 
	$ali = new person();
	$mohammad = new person;
	$ali->set_name("ali safari");
	$mohammad->set_name("mohammad safari");
?>

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

دسترسی به داده های شئ

برای دسترسی به داده هایی که در شئ داریم از متد دریافت کننده get استفاده می کنیم. هنگام دسترسی به متدها و پروپرتی‌های یک کلاس باید از عملگر <- استفاده کنیم. به کد زیر توجه کنید:

<?php include("class_lib.php"); ?>
<?php 
	$ali = new person();
	$mohammad = new person;
 
	$ali->set_name("ali safari");
	$mohammad->set_name("mohammad safari");
 
	echo "ali's full name: " . $ali->get_name();
	echo "mohammad's full name: " . $mohammad->get_name(); 
?>

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

آموزش کامل PHP – قسمت 28: شیء گرایی 1

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

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

شیء گرایی در php

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

مرحله اول:

مثل همیشه نرم افزار xampp یا wamp خود را باز کرده و در پوشه اصلی (htdocs در xampp و www در wamp) یک پوشه جدید بسازید و در آن فایل های index.php و class.php را ایجاد کنید. شیء گرایی در واقع استفاده از مفهوم کلاس در برنامه نویسی است. کلاس قالب کلی برای تعریف اشیاء است.

مرحله دوم:

کد های کلاس خود را در فایل class.php قرار می دهیم. برای تعریف کلاس از کلمه کلیدی class همراه با نام کلاس استفاده می کنیم و محتوای کلاس را مانند متد ها یا توابع در آکولاد باز و بسته قرار می دهیم.

<?php 
	class person {
 
	}
?>

از تفاوت های کلاس با توابع این است که محتوای کلاس می تواند متغیر ها یا توابع جداگانه ای باشد. هر یک از توابع موجود در کلاس را یک شیء (object) می نامند. داده ها یا متغیرها را نیز ویژگی یا خاصیت می گویند.

مرحله سوم:

افزودن متغیر

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

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

مرحله چهارم:

افزودن توابع یا متد ها

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

مرحله پنجم:

در مرحله قبل توابع set و get را به کلاس خود اضافه کردیم که جزء رایج شیء گرایی می باشند و در تمامی زبان های شیء گرا مانند جاوا و ++C نیز به همین شکل وجود دارند. بهتر است نام گذاری این توابع با نام متغیری که قصد تغییر آن را داریم یکسان باشد.

آموزش کامل PHP – قسمت 26: فیلتر ها

فیلتر ها در php

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

تابع ()filter_list

به کمک این تابع می توانیم تمامی فیلتر هایی که در php ارائه می شود را لیست کنیم. برای استفاده از تابع سرور مجازی خود را اجرا کرده و در پوشه اصلی آن پوشه ای دیگر ایجاد کنید و فایلی به نام phpfilter.php بسازید. سپس کد های زیر را در آن قرار دهید:

<!DOCTYPE html>

<html>

<head>

<style>

table, th, td {

    border: 1px solid black;

    border-collapse: collapse;

}

th, td {

    padding: 5px;

}

</style>

</head>

<body>

<table>

  <tr>

    <td>Filter Name</td>

    <td>Filter ID</td>

  </tr>

  <?php

  foreach (filter_list() as $id =>$filter) {

      echo '<tr><td>' . $filter . '</td><td>' . filter_id($filter) .'</td></tr>';

  }

  ?>

</table>

</body>

</html>

نتیجه اجرای کد زیر چیزی شبیه جدول زیر خواهد شد:

Filter Name Filter ID
int 257
boolean 258
float 259
validate_regexp 272
validate_url 273
validate_email 274
validate_ip 275
string 513
stripped 513
encoded 514
special_chars 515
full_special_chars 522
unsafe_raw 516
email 517
url 518
number_int 519
number_float 520
magic_quotes 521
callback 1024

همانطور که در جدول بالا مشاهده می‌کنید تمامی فیلترهایی که پی‌اچ‌پی ارائه می‌کند لیست شده‌اند.

تابع ()filter_var

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

بهینه‌سازی یک رشته متنی

در مثال زیر از تابع ()filter_var به منظور حذف تگ‌های اچ‌تی‌ام‌ال از رشته متنی استفاده شده است:

<?php

$str = "<h1>Hello World!</h1>";

$newstr = filter_var($str, FILTER_SANITIZE_STRING);

echo $newstr;

?>

همانطور که می‌بینید تگ‌های HTML از این رشته متنی حذف شده است. در مثال بالا ابتدا متغیر str را به عنوان ورودی تعیین کرده و پس از قرار دادن یک کاما، نوع فیلتر مورد نظر خود را به عنوان ورودی دوم تعیین می‌کنیم. با استفاده از فیلتر FILTER_SANITIZE_STRING می‌توان تگ‌های اچ‌تی‌ام‌ال اضافه را از رشته‌های متنی حذف کرد.

اعتبارسنجی عدد

در مثال زیر با استفاده از ()filter_var قصد داریم تا متغیری از نوع عددی را بررسی کنیم. اگر متغیر ما واقعا عدد صحیح باشد خروجی ما عبارت Integer is valid خواهد بود. اگر این متغیر عددی نباشد خروجی عبارت Integer is not valid است.

<?php

$int = 100;

if (!filter_var($int, FILTER_VALIDATE_INT) === false) {

    echo("Integer is valid");

} else {

    echo("Integer is not valid");

}

?>

همانطور که در مثال بالا هم می‌بینید ورودی اول متغیر int بوده و در شرط فیلتر بررسی عددی یعنی FILTER_VALIDATE_INT قرار داده شده است.

نکته‌ای در هنگام کار با تابع ()filter_var در مورد عدد صفر وجود دارد. اگر در مثال بالا مقدار متغیر int برابر با صفر باشد خروجی تابع Integer is not valid می‌شود. برای حل این مشکل باید از کدی مانند زیر استفاده کنیم:

<?php

$int = 0;

if (filter_var($int, FILTER_VALIDATE_INT) === 0 || !filter_var($int, FILTER_VALIDATE_INT) === false) {

    echo("Integer is valid");

} else {

    echo("Integer is not valid");

}

?>

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

Integer is valid

اعتبارسنجی آی‌پی

در مثال زیر با استفاده از تابع ()filter_var قصد داریم تا محتوای متغیر ip را بررسی کنیم که آیا این متغیر حاوی یک آی‌پی معتبر است یا خیر:

<?php

$ip = "127.0.0.1";

if (!filter_var($ip, FILTER_VALIDATE_IP) === false) {

    echo("$ip is a valid IP address");

} else {

    echo("$ip is not a valid IP address");

}

?>

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

127.0.0.1 is a valid IP address

اعتبارسنجی ایمیل

در مثال زیر با استفاده از تابع ()filter_var قصد دارید تا تمام کاراکترهای غیرقانونی را از متغیر email حذف کرده و سپس بررسی کنیم که آیا فرمت ایمیل صحیح است یا خیر:

<?php

$email = "pardiswp@gmail.com";

// Remove all illegal characters from email

$email = filter_var($email, FILTER_SANITIZE_EMAIL);

// Validate e-mail

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {

    echo("$email is a valid email address");

} else {

    echo("$email is not a valid email address");

}

?>

نتیجه اجرای کد فوق به صورت زیر خواهد بود:

pardiswp@gmailcom is a valid email address

همانطور که می‌بینید ابتدا با تابع فیلتر پی‌اچ‌پی و فیلتر FILTER_SANITIZE_EMAIL قصد داریم تا متغیر email را از نظر کاراکترهای غیرقانونی بررسی کرده و سپس کاراکترهای اضافه را از آن حذف کنیم. سپس با فیلتر FILTER_VALIDATE_EMAIL و یک عبارت شرطی صحیح بودن فرمت کلی ایمیل را بررسی کرده‌ایم.

اعتبارسنجی آدرس URL

در مثال زیر با استفاده از تابع ()filter_var ابتدا تمامی کاراکترهای غیرقانونی را از آدرس URL حذف کرده و سپس آن را بررسی می‌کنیم تا ببینیم یک URL معتبر است یا خیر:

<?php

$url = "http://www.pardiswp.com";

// Remove all illegal characters from a url

$url = filter_var($url, FILTER_SANITIZE_URL);

// Validate url

if (!filter_var($url, FILTER_VALIDATE_URL) === false) {

    echo("$url is a valid URL");

} else {

    echo("$url is not a valid URL");

}

?>

نتیجه اجرای کد فوق نیز به صورت زیر خواهد بود:

http://www.pardiswp.com is a valid URL

در این جلسه بیشتر فیلترهای پرکاربرد پی‌اچ‌پی را مرور کردیم. در جلسه آینده فیلترهای پیشرفته‌تری را بررسی می‌کنیم.

آموزش کامل PHP – قسمت 24: کار با تاریخ و ساعت

کار با تاریخ و ساعت در php

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

دریافت زمان با تابع ()time

این تابع تمام اطلاعات لازم برای زمان جاری را در اختیار شما قرار می دهد. تابع نیاز به هیچ آرگومان ورودی ندارد و یک رشته خروجی متنی دارد. رشته متنی که از این تابع برگردانده می‌شود تعداد ثانیه‌های سپری شده از نیمه شب ۱ ژانویه ۱۹۷۰ را به وقت GMT نشان می‌دهد. زمان حاضر به شکل UNIX نمایش داده می شود که این به معنی تعداد ثانیه‌های گذشته شده از یک زمان مرجع می باشد.

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

    <?php

    echo time();

    ?>

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

تابع ()getdate

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

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

شماره کلید و توضیح مثال
1 seconds

تعداد ثانیه‌های گذشته از دقیقه کنونی (0-59)

20
2 minutes

تعداد دقایق گذشته از ساعت کنونی (0 – 59)

29
3 hours

تعداد ساعت‌های گذشته از روز کنونی (0 – 23)

22
4 mday

روز ماه کنونی (1 – 31)

11
5 wday

روز هفته کنونی (0 – 6)

4
6 mon

ماه سال کنونی (1 – 12)

7
7 year

سال (4 رقمی)

1997
8 yday

روزکنونی در سال جاری ( 0 – 365 )

19
9 weekday

روز جاری در هفته کنونی

Thursday
10 month

ماه جاری در سال کنونی

January
11 0

Timestamp – تایم‌استامپ

948370048

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

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

    <?php
       $date_array = getdate();
       
       foreach ( $date_array as $key => $val ){
          print "$key = $val<br />";
       }
    	
       $formated_date  = "Today's date: ";
       $formated_date .= $date_array['mday'] . "/";
       $formated_date .= $date_array['mon'] . "/";
       $formated_date .= $date_array['year'];
       
       print $formated_date;
    ?>

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

seconds = 37

minutes = 49

hours = 09

mday = 23

wday = 23

mon = 4

year = 2017

yday = 157

weekday = Sunday

month = April

0 = 1876894562

Today’s date: 23/4/2017

تبدیل timestamp با تابع ()date

 منظور از timestamp خروجی تابع time است. تابع date شکل فرمت بندی شده ای از تاریخ و زمان را نشان می دهد. تعداد بسیار زیادی فرمت بر حسب خلاقیت یا نیاز خود با این تابع بدست آورید. کد استاندارد این تابع به شکل زیر است:

date(format,timestamp)

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

شماره فرمت و توضیح مثال
1 a

‘am’ یا ‘pm’ با حروف کوچک

pm
2 A

‘AM’ یا ‘PM’ با حروف بزرگ

PM
3 d

روز جاری در ماه کنونی

20
4 D

روز هفته جاری (سه کاراکتر)

Thu
5 F

نام ماه جاری

January
6 h

ساعت (فرمت ۱۲ ساعته – اعداد تک رقمی با یک صفر پیش از عدد)

12
7 H

ساعت (فرمت ۲۴ ساعته – اعداد تک رقمی با یک صفر پیش از عدد)

22
8 g

ساعت (فرمت ۱۲ ساعته  – اعداد تک رقمی بدون یک صفر پیش از عدد)

12
9 G

ساعت (فرمت ۲۴ ساعته – اعداد تک رقمی بدون یک صفر پیش از عدد)

22
10 i

دقیقه ( 0 – 59 )

23
11 j

روز ماه جاری (اعداد تک رقمی بدون یک صفر پیش از عدد)

20
12 l (حرف کوچک ‘L’)

روز هفته

Thursday
13 L

کبیسه بودن سال (‘1’ بله, ‘0’ خیر)

1
14 m

ماه جاری سال کنونی (عدد – اعداد تک رقمی با یک صفر پیش از عدد)

1
15 M

ماه جاری سال کنونی (سه کاراکتر)

Jan
16 r

فرمت RFC 2822

Thu, 21 Dec 2000 16:01:07 +0200
17 n

ماه جاری سال کنونی (عدد – اعداد تک رقمی بدون یک صفر پیش از عدد)

2
18 s

ثانیه‌های گذشته شده از دقیقه جاری

20
19 U

تایم‌استامپ

948372444
20 y

سال (دو رقم)

06
21 Y

سال (چهار رقم)

2006
22 z

روز کنونی سال جاری (0 – 365)

206
23 Z

افست ثانیه‌ها از GMT

+5

حال برای مثال کد زیر را در یک فایل وارد کرده و آن را اجرا کنید:

    <?php
       print date("m/d/y G.i:s<br>", time());
       print "Today is ";
       print date("j of F Y, \a\\t g.i a", time());
    ?>

خروجی کد بالا مانند زیر خواهد بود:

04/23/17 10.02:17<bthu, 23=”” apr=”” 2017=”” 10:02:17=”” +0000=””>Today is 23 2017s April 2017, at 10.02 am

در جلسه بعدی با شمسی سازی تاریخ در php آشنا خواهیم شد.

آموزش کامل PHP – قسمت 20: متغیر های سراسری

متغیر های سراسری در php

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

استفاده از Session

برای استفاده از سشن باید آن را به صورت زیر در ابتدای برنامه استارت کرد:

<?php

session_start();

?>

برای مثال یک سشن به نام user ایجاد کرده و نام آن را mohammad می گذاریم:

<?php

session_start();

$session[‘user’]=”mohammad”;

?>

برای دسترسی به مقدار ذخیره شده در یک سشن کافی است نام آن را به شکل زیر مورد استفاده قرار دهیم:

<?php

session_start();

$session[‘user’]=”mohammad”;

echo $session[‘user’];

?>

کد فوق mohammad را در مرورگر چاپ می کند.

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

در پوشه اصلی سرور مجازی خود یک پوشه ایجاد کرده و در آن دو فایل به نام های دلخواه مثلا one.php و two.php بسازید. کد زیر را در فایل اول قرار دهید:

<?php

session_start();

$_SESSION['isAdmin'] = true;

$_SESSION['username'] = "pardiswp";

?>

کد زیر را هم در فایل دوم قرار دهید:

<?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 را در فایل one.php ایجاد کردیم و مقدار آن‌ها را به ترتیب true و pardiswp تعیین کردیم. دقت کنید که مقدار سشن isAdmin از نوع Boolean تعیین شده است.

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

مشاهده می کنید که سشن‌ها را در فایل one.php ایجاد کرده ایم و در فایل two.php به آن‌ها دسترسی داریم.

در قسمت بعدی با کوکی آشنا خواهیم شد.

آموزش کامل PHP – قسمت 17: ایجاد صفحه اختصاصی برای هر پست

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

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

$postText = $fetch_result[‘text’];

یک دستور جدید اضافه می کنیم:

$postId = $fetch_result[‘id’];

دستور فوق id هر پست را در هر بار اجرای حلقه دریافت کرده و در متغییری به نام postId$ ذخیره می کند.

حال کد:

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 منتقل خواهیم شد که در واقع لینک مخصوص به مطلب اول در صفحه ای اختصاصی و جداگانه است.

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

<!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 است، فقط با تغییراتی در کوئری و این که دیگر نیازی به حلقه نیست. این بار قصد داریم فقط یک رکورد از جدول واکشی کنیم.

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

آموزش کامل PHP – قسمت 15: درج اطلاعات در بانک

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

عملیات درج در پایگاه داده

برای درج اطلاعات در ادامه پروژه cms که در قسمت قبلی ساختیم باید یک فرم برای درج اضافه کنید. در پوشه cms یک فایل جدید به نام insert.php بسازید. در این فایل یک فرم برای درج مطلب در جدول پست طراحی می کنیم. از آنجا که دو فیلد در جدول داریم باید در فرم نیز دو فیلد تعریف کنیم. یکی برای عنوان و یکی برای متن. حال کد زیر را در فایل 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>
<form action="sendpost.php" method="post">
عنوان مطلب : <input type="text" name="postTitle" size="40"><br>
متن مطلب: <br>
<textarea name="postText" rows="10" cols="50"></textarea>
<br>
<input type="submit" value="ثبت مطلب">
</form>
</center>
</body>
</html>

در کد بالا یک فیلد به نام postTitle برای عنوان و یک فیلد به نام postText برای متن است. همچنین محتویات فرم با متد post به صفحه ای به نام sendpost.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");
$title = trim ($_POST['postTitle']);
$text = trim ($_POST['postText']);
if($title != "" && $text != ""){
$query_res = mysql_query("INSERT INTO `posts` (`title`, `text`) VALUES ('$title','$text')");
if($query_res){
echo "مطلب شما با موفقیت در بانک داده درج شد.";
}else{
echo "مشکلی در ثبت مطلب رخ داده، لطفا مجددا تلاش کنید. <a href=insert.php>بازگشت</a>";
}
}else{
echo 'برای درج مطلب جدید باید عنوان و متن مطلب را وارد کنید. <a href=insert.php>بازگشت</a>';
}
?>
</center>
</body>
</html>

توضیح کد فوق:

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

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

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

فرم درج مطلب

پس از زدن دکمه ثبت تصویر زیر را می بینید.

پیغام درج مطلب

توضیحاتی در مورد کوئری درج:

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

INSERT INTO `TABLE_NAME` (`f1`, `f2`) VALUES ('value1', 'value2')

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

اطلاعات درج شده در جدول را می توانید از طریق آدرس http://127.0.0.1/phpmyadmin مشاهده کنید. در آن جا ابتدا روی دیتابیس cms و سپس روی جدول posts کلیک کنید.

آموزش کامل PHP – قسمت 14: ارتباط با بانک اطلاعاتی

اتصال به بانک های اطلاعاتی از مهمترین مباحث برنامه نویسی است. زبان برنامه نویسی php قابلیت اتصال به انواع بانک های اطلاعاتی را دارا می باشد. در این قسمت از آموزش ما طریقه ارتباط با یکی از محبوب ترین بانک های اطلاعاتی یعنی mysql را آموزش خواهیم داد.

در این قسمت از سری آموزش های php با پردیس وردپرس، پروژه یک سیستم مدیریت محتوا را آغاز می کنیم.

اتصال به بانک اطلاعاتی

ابتدا پوشه ای در htdocs (زمپ) یا www (ومپ) ایجاد کنید و نام دلخواهی (مثلا cms) برای آن انتخاب کنید. در داخل پوشه فایلی به نام config.php ایجاد کنید. (این فایل تنظیمات مربوط به سیستم ما را نگهداری می کند). در واقع برنامه ما از طریق همین فایل به بانک متصل می شود.

حالا باید بانک اطلاعاتی نورد نظرتان را ایجاد کنید. بعد از اجرای نرم افزار سرور مجازی سرویس mysql آن را استارت کنید و آدرس localhost/phpmyadmin را در مرورگر وارد کنید. صفحه ای مانند تصویر زیر باز می شود که شما می توانید بانک های اطلاعاتی خود را در آن ساخته و مدیریت کنید.

ساخت بانک اطلاعاتی

روی Databases کلیک کنید و بعد از وارد کردن اطلاعات، مانند تصویر زیر روی Create کلیک کنید.

ایجاد بانک اطلاعاتی

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

-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: May 28, 2016 at 02:13 PM
-- Server version: 10.1.9-MariaDB
-- PHP Version: 5.6.15

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `cms`
--

-- --------------------------------------------------------

--
-- Table structure for table `posts`
--

CREATE TABLE `posts` (
  `id` int(11) NOT NULL,
  `title` varchar(200) NOT NULL,
  `text` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `posts`
--
ALTER TABLE `posts`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `posts`
--
ALTER TABLE `posts`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

کد بالا برای ایجاد یک جدول به نام posts است که این جدول سه فیلد دارد. برای هر مطلب یک فیلد برای شماره مطلب وجود دارد که این شماره برای هر رکورد از جدول یکتا خواهد بود. همچنین یک فیلد برای عنوان و یک فیلد نیز برای متن مطلب در نظر گرفته‌ایم. یونیکد این جدول و تمامی فیلد‌های آن نیز utf8-general-ci است.

حال به بخش php بر می گردیم. کد زیر را در فایل config.php قرار دهید.

<?php
$dbhost = "localhost";
$dbuser = "root";
$dbname = "cms";
$dbpass = "";

$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);

if ($connect_db){
    echo "Connected to db successfully!";
}else{
    echo "error in connecting db";
}
?>

برای اتصال به پایگاه داده mysql در php به چهار متغیر به شرح زیر نیاز داریم:

  1. متغیری برای آدرس بانک اطلاعاتی – dbhost که localhost است
  2. متغیری برای نام کاربری یا یوزرنیم بانک – dbuser که root است
  3. متغیری برای نام بانک اطلاعاتی که cms می باشد
  4. متغیری برای رمز عبور بانک اطلاعلتی – dbpass که خالی است

با استفاده از تابع mysql_connect به دیتابیس متصل شده ایم. این تابع سه آرگومان ورودی دارد که به ترتیب آدرس میزبان بانک داده، نام کاربری بانک داده و رمزعبور کاربر بانک داده هستند. خروجی این تابع که true یا false است را در متغیری به نام connect_db قرار داده ایم. سپس به کمک if آن را کنترل و پیغام مناسب را نمایش می دهیم.

بعد از مراحل فوق یک فایل index.php در پوشه cms ایجاد کرده و کد زیر را در آن قرار می دهیم.

<?php
include ("config.php");
?>

ما فایل config.php را با کد بالا در فایل index,php فراخوانی کرده‌ایم. حالا اگر آدرس http://127.0.0.1/cms/index.php را در مروگرتان اجرا کنید، باید با عبارت !Connected to db successfully مواجه شوید. در غیر این صورت یکی از مراحل را اشتباه انجام داده‌اید.

اگر همه چیز به درستی انجام شده، می توانید بخش if را در فایل config حذف کنید یا به حالت کامنت در آورید. همچنین یک دستور دیگر برای انتخاب بانک cms به آن اضافه کنید.

<?php
$dbhost = "localhost";
$dbuser = "root";
$dbname = "cms";
$dbpass = "";

$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname,$connect_db);
?>

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

توجه داشته باشید که ما در این قسمت یک جدول برای ذخیره نوشته های سایت خود ساخته ایم. در این جدول ستون id همان کلید اصلی است و شامل شماره هر سطر در جدول می باشد.

آموزش کامل PHP – قسمت 13 : ارسال ایمیل

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

پروژه ارسال ایمیل با php

در ابتدا بخش هایی را برای پروژه خود در نظر می گیریم:

  1. یک فیلد برای وارد کردن آدرس ایمیل مقصد
  2. یک فیلد برای وارد کردن نام ارسال کننده ایمیل
  3. یک فیلد برای وارد کردن موضوع ایمیل
  4. یک فیلد برای نوشتن متن ایمیل
  5. یک دکمه برای ارسال ایمیل
  6. یک دکمه برای ریست کردن فرم
  7. یک صفحه php که عملیات ارسال ایمیل را پردازش می کند

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

  1. کاربر اطلاعات لازم را در فرمی وارد می کند
  2. اطلاعات به صفحه php که در بخش شماره 7 فوق گفتیم ارسال می شود
  3. در صفحه php چک می کنیم که آیا تمام فیلد ها، کامل پر شده اند یا خیر – اگر بله به مرحله بعد برود و اگر خیر به مرحله 1
  4. ارسال ایمیل با توجه به اطلاعات وارد شده کاربر توسط کد های php
  5. بررسی می شود که ایمیل با موفقیت ارسال شده یا خیر – اگر بله نمایش پیغام درستی به کاربر و اگر خیر پیغام نادرستی

حال پوشه ای به نام ایمیل برای پروژه ایجاد می کنیم و دو فایل به نام های index.php و send.php در آن می سازیم. فایل index فرم ارسال ایمیل و فایل send پردازشگر و ارسال کننده ایمیل می باشد. در فرم ارسال ایمیل فیلد های مورد نظر را قرار می دهیم که کد آن به شرح زیر است:

<form method="post" action="send.php">

email to: <input type="text" name="email"><br>

your name: <input type="text" name="name"><br>

subject: <input type="text" name="subject"><br>

message: <textarea name="message" rows="3" color="4"></textarea>

<input type="reset" value="reset">

<input type="submit" value="send">

</form>

سپس در فایل send.php کد های زیر را وارد کنید:

<?php

$mailto = trim ($_post ['email']);

$username = trim ($_post ['name']);

$subject = trim ($_post ['subject']);

$message = trim ($_post ['message']);

//merge name and message

$final_message = $username . ":" . $message;

 if ($mailto != "" && $username != "" && $subject != "" && $message != "") {

$email_send = mail ($mailto , $from_mail , $final_message);

if ($email_send) {

echo "your mail has been send successfully!"; }

else {

echo "sorry, there is problem in sendig mail, try again!"

} }

else {

echo "you most fill all fields!" go <a href="index.php">back</a>

} ?>

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

با استفاده از تابع mail اقدام به ارسال ایمیل می کنیم و سپس مقدار بازگشتی این تابع را در متغیر email_send قرار می دهیم. در صورتی که ارسال ایمیل موفق باشد تابع  mail، مقدار true را بر می گرداند و در غیر این صورت مقدار بازگشتی تابع false خواهد بود. بنابراین متغیر email_send نیز دارای همین دو مقدار است که با دستور if آن را بررسی کرده و پیغام مناسب را به کاربر نمایش داده ایم.

ما نام کاربر و متن ایمیل را ترکیب کرده و در متغیری به نام final_message قرار داده ایم.

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

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

همچنین می‌توانید از آنچه که در این جلسه یاد گرفتید به منظور ایجاد فرم تماس با ما برای سایت خود استفاده کنید.

آموزش کامل PHP – قسمت 12: فرم ها

فرم ها در php

به طور کلی فرم ها در برنامه نویسی وب از اهمیت و کاربرد فراوانی برخوردار هستند. در php از دو متغیر POST_$ و GET_$ برای جمع آوری اطلاعات فرم ها استفاده می کنیم. فرم ها به منظور ارتباط با کاربران استفاده می شوند.

با استفاده از تگ form در html می توانیم فرم مورد نظر را ایجاد کنیم. تمام فیلد های ورودی باید در داخل این تگ قرار گیرند. به مثال زیر توجه کنید:

<form action="send.php" method="post">

name: <input type="text" name="username">

<input type="submit" name="send" value=submit your name!">

</form>

همان طور که مشخص است در مثال فوق با استفاده از کد های html فرمی ساخته ایم. نکته مهم در مثال فوق دو خاصیت اکشن و متد می باشد. مقدار اکشن را برابر با فایل send.php قرار داده ایم که یعنی اطلاعات فرم ما بعد از ثبت به این صفحه ارسال خواهند شد. در بخش متد می توانیم یکی از حالت های post یا get را قرار دهیم که نتیجه کار هر دو یکی است و تفاوت آن ها را توضیح خواهیم داد.

کد بالا را در یک فایل به نام form.php قرار دهید و سپس این فایل را در همان پوشه new که در قسمت های قبل گفتیم قرار دهید. فایل دیگری به نام send.php بسازید و کد زیر را در آن کپی کنید.

<?php

$user = $_POST ['username'];

echo "your name is:" . $user;

<?

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

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

اگر در زمان اجرای مثال فوق به نوار آدرس توجه کنید خواهید دید که ابتدا از آدرس http://127.0.0.1/new/form.php به فرم دسترسی داریم و سپس با زدن دکمه آدرس به http://127.0.01/new/send.php تغییر خواهد کرد.

از آن جا که ما ازمتد post استفاده کرده ایم اطلاعات به صورت امن و بدون نمایش دادن به کاربر به صفحه بعدی ارسال می شوند. اگر به جای post از get استفاده کنید خواهید دید که در نوار آدرس مقدار یوزرنیم قابل رویت برای کاربران است. حتی می شود آن را عوض کرد و این یک باگ امنیتی به حساب می آید.

پایان قسمت دوازدهم