آموزش کامل 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 – قسمت 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 – قسمت 23: حلقه foreach و خواندن فایل ها

در ادامه جلسه قبل، کار با فایل ها در php را ادامه می دهیم و ابتدا به معرفی حلقه foreach می پردازیم. سپس به خواندن فایل ها می رسیم.

حلقه foreach

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

foreach (array as $value){

    //code to run

}

//or

foreach (array as $key => $value){

    //code to run

}

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

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

<?php

$AllNames = Array("mojtaba", "hossein", "milad", "hamid", "masoud","mehdi");

foreach ($AllNames as $name)

{

    echo $name . "<br>";

}

?>

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

خواندن فایل‌ها

با استفاده از تابع ()file می‌توانیم فایل مورد نظرمان را بخوانیم. این تابع فایل مورد نظر را در قالب یک آرایه برای ما آماده می‌کند و هر المان از فایل را به عنوان یک عضو از آرایه در نظر می‌گیرد.

درادامه  جلسه قبل، فایل names.txt را در نظر بگیرید، اکنون باید شامل چند نام باشد. در واقع در هر خط از این فایل یک نام نوشته شده است. حال در پوشه files که در پوشه htdocs یا www ایجاد کرده بودید، یک فایل جدید به نام read.php ایجاد کنید. سپس کد زیر را در این فایل قرار دهید:

<?php

$read = file("names.txt");

foreach($read as $name)

{

    echo $name . " - "; 

}

?>

کد بالا تمام نام‌های موجود در فایل names.txt را که در کنار فایل read.php وجود دارد خوانده و آن‌ها را با علامت – از هم جدا می‌کند. از آنجا که در اینجا محتویات فایل در یک آرایه قرار داده شده از foreach استفاده کرده‌ایم، همانطور که گفتیم این حلقه فقط برای آرایه‌ها بکار گرفته می‌شود.

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

$read = file("names.txt");

$count = count($count);

$i = 1;

foreach ($read as $line)

{
    echo $line;

        if($i < $count){

            echo " - ";

        }

        $i++;

}

?>

در کد بالا ابتدا با تابع count اقدام به شمارش تعداد اعضای آرایه read$ کرده‌ایم. همانطور که می‌دانید آرایه یاد شده در واقع دربرگیرنده محتویات فایل names.txt است. سپس با یک حلقه for تمامی اعضای این آرایه را چاپ می‌کنیم و در هر بار اجرای حلقه یک واحد به متغیر i$ اضافه می‌کنیم. این متغیر تعداد خطوط را نگهداری می‌کند. در شرط حلقه بررسی می‌کنیم که آیا به آخرین خط فایل یعنی آخرین عضو آرایه read رسیده‌ایم یا خیر، اگر همچنان به انتهای فایل نرسیده باشیم کاراکتر – در ادامه نام‌ چاپ می‌شود و اگر به آخرین خط فایل رسیده باشیم از آنجا که در حلقه چنین شرطی را نوشته‌ایم، پس شرط برای خط آخر برقرار نیست و کاراکتر – پس از نام چاپ نمی‌شود.

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

آموزش کامل 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 – قسمت 16: خواندن داده ها از بانک

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

خواندن داده ها از mysql

در ادامه پروژه cms که در جلسات قبل ساختیم، در پوشه 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>

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

نکته: در دستور select نام فیلد هایی که قصد انتخاب آن ها را داریم در مقابل دستور می نویسیم و با کاما از هم جدا می کنیم. اگر بخواهیم تمام فیلد های جدول را فراخوانی کنیم از ستاره استفاده می کنیم.

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

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

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