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

آموزش 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 – جلسه نوزدهم: فیلترهای پی اچ پی (مقدماتی)

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

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

تابع ()filter_list می‌تواند به منظور لیست کردن تمام فیلترهایی که پی‌اچ‌پی ارائه می‌دهد مورداستفاده قرار گیرد. نرم‌افزار Xampp را اجرا کرده و سرور آپاچی و MySQL را اجرا کنید. در پوشه htdocs یک پوشه به اسم filter ساخته و سپس یک فایل جدید ایجاد کنید. نام این فایل را 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 ۲۵۷
boolean ۲۵۸
float ۲۵۹
validate_regexp ۲۷۲
validate_url ۲۷۳
validate_email ۲۷۴
validate_ip ۲۷۵
string ۵۱۳
stripped ۵۱۳
encoded ۵۱۴
special_chars ۵۱۵
full_special_chars ۵۲۲
unsafe_raw ۵۱۶
email ۵۱۷
url ۵۱۸
number_int ۵۱۹
number_float ۵۲۰
magic_quotes ۵۲۱
callback ۱۰۲۴

 

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

چرا باید از فیلترها استفاده کنیم؟

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

  • ورودی داده‌ها توسط کاربر در فرم‌ها
  • کوکی‌ها
  • داده‌های وب‌سرویس
  • متغیرهای سرور
  • نتایج کوئری‌های بانک‌های اطلاعاتی

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

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

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

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

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

<?php

$str = “<h1>Hello World!</h1>”;

$newstr = filter_var($str, FILTER_SANITIZE_STRING);

echo $newstr;

?>

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

Hello World!

همان‌طور که می‌بینید تگ‌های 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”);

}

?>

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

۱۲۷٫۰٫۰٫۱ is a valid IP address

همان‌طور که می‌بینید از فیلتر FILTER_VALIDATE_IP در تابع ()filter_var می‌توان به منظور اعتبارسنجی آی‌پی بهره گرفت. 

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

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

<?php

$email = “john.doe@example.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”);

}

?>

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

test@example.com is a valid email address

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

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

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

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

<?php

$url = “http://www.mehrastan.ac.ir”;

// 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.mehrastan.ac.ir is a valid URL

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

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

آموزش PHP- جلسه هجدهم: کار با تاریخ و ساعت و تاریخ هجری شمسی

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

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

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

تابع ()time تمام اطلاعات لازم برای لحظه حاضر از تاریخ و ساعت را در اختیار شما قرار خواهد داد. این تابع نیاز به هیچ آرگومان ورودی ندارد اما یک رشته متنی را به خروجی می‌دهد.

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

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

<?php

echo time();

?>

اجرای کد فوق از طریق آدرس http://127.0.0.1/time/index.php باعث ایجاد نتیجه‌ای مثل عدد ۱۴۶۶۶۶۹۴۱۶ خواهد شد. 

فهمیدن این عدد قطعا کار آسانی نیست. اما PHP ابزارهای بسیار خوبی را برای تبدیل این عدد به فرمت‌های قابل فهم و معمول تاریخ و زمان ارائه می‌دهد.

تابع ()getdate

تابع ()getdate می‌تواند timstamp (خروجی‌ که از تابع ()time به دست می‌آید) را به طور اختیاری به عنوان ورودی دریافت کند. خروجی این تابع یک آرایه از اطلاعات مربوط به تاریخ است. اگر شما ورودی این تابع را تعیین نکنید از میزان خروجی کنونی ()time استفاده می‌کند.

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

شماره کلید و توضیح مثال
۱ seconds: تعداد ثانیه‌های گذشته از دقیقه کنونی (۰-۵۹) ۲۰
۲ minutes: تعداد دقایق گذشته از ساعت کنونی (۰ – ۵۹) ۲۹
۳ hours: تعداد ساعت‌های گذشته از روز کنونی (۰ – ۲۳) ۲۲
۴ mday: روز ماه کنونی (۱ – ۳۱) ۱۱
۵ wday: روز هفته کنونی (۰ – ۶) ۴
۶ mon: ماه سال کنونی (۱ – ۱۲) ۷
۷ year: سال (۴ رقمی) ۱۹۹۷
۸ yday: روز کنونی در سال جاری ( ۰ – ۳۶۵ ) ۱۹
۹ weekday: روز جاری در هفته کنونی Thursday
۱۰ month: ماه جاری در سال کنونی January
۱۱ ۰: Timestamp – تایم‌استامپ ۹۴۸۳۷۰۰۴۸

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

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

<?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 = 18

minutes = 10

hours = 8

mday = 25

wday = 4

mon = 6

year = 2016

yday = 174

weekday = Thursday

month = June

۰ = ۱۴۶۶۶۶۹۴۱۸

Today’s date: 25/6/2016

تبدیل تایم‌استامپ با تابع ()date

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

date(format,timestamp)

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

شماره فرمت و توضیح مثال
۱ a: واژه ‘am’ یا ‘pm’ با حروف کوچک pm
۲  A: واژه ‘AM’ یا ‘PM’ با حروف بزرگ PM
۳ d: روز جاری در ماه کنونی ۲۰
۴ D: روز هفته جاری (سه کاراکتر) Thu
۵ F: نام ماه جاری January
۶ h: ساعت (فرمت ۱۲ ساعته – اعداد تک رقمی با یک صفر پیش از عدد) ۱۲
۷ H: ساعت (فرمت ۲۴ ساعته – اعداد تک رقمی با یک صفر پیش از عدد) ۲۲
۸ g: ساعت (فرمت ۱۲ ساعته  – اعداد تک رقمی بدون یک صفر پیش از عدد) ۱۲
۹ G: ساعت (فرمت ۲۴ ساعته – اعداد تک رقمی بدون یک صفر پیش از عدد) ۲۲
۱۰ i: دقیقه ( ۰ – ۵۹ ) ۲۳
۱۱ j: روز ماه جاری (اعداد تک رقمی بدون یک صفر پیش از عدد) ۲۰
۱۲ l (حرف کوچک ‘L’): روز هفته Thursday
۱۳ L: کبیسه بودن سال (‘۱’ بله, ‘۰’ خیر) ۱
۱۴ m: ماه جاری سال کنونی (عدد – اعداد تک رقمی با یک صفر پیش از عدد) ۱
۱۵ M: ماه جاری سال کنونی (سه کاراکتر) Jan
۱۶ r: فرمت RFC 2822 Thu, 21 Dec 2000 16:01:07 +0200
۱۷ n: ماه جاری سال کنونی (عدد – اعداد تک رقمی بدون یک صفر پیش از عدد) ۲
۱۸ s: ثانیه‌های گذشته شده از دقیقه جاری ۲۰
۱۹ U: تایم‌استامپ ۹۴۸۳۷۲۴۴۴
۲۰ y: سال (دو رقم) ۰۶
۲۱ Y: سال (چهار رقم) ۲۰۰۶
۲۲ z: روز کنونی سال جاری (۰ – ۳۶۵) ۲۰۶
۲۳ Z: افست ثانیه‌ها از GMT

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

<?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());
?>

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

۰۶/۲۵/۱۶ ۸٫۱۰:۱۷<bthu, 25=”” jun=”” 2016=”” 08:10:17=”” +0000=””>Today is 25 2016f June 2016, at 8.10 am

اما تمام آنچه گفته شد فقط برای تاریخ‌های میلادی به‌کار می‌روند و برای استفاده از تاریخ شمسی باید از یک کلاس خارجی استفاده کنید. این‌که کلاس خارجی چیست فعلا نباید مدنظر شما باشد. اگر به خاطر داشته باشید روش include کردن فایل‌ها را در جلسات گذشته مرور کردیم. شما باید فایل مربوط به کلاس تاریخ شمسی را به فایل موردنظر خود که قصد استفاده از تاریخ شمسی را در آن دارید inlcude کرده و سپس به جای تابع ()date از ()jdate استفاده کنید. تمامی عملکرد‌های تابع ()jdate دقیقا شبیه به تابع ()date است. ابتدا فایل jdf.php را از این لینک دانلود کنید و سپس فایل jdf.php را در کنار فایل موردنظر خود به عنوان مثال در پوشه time که در پوشه htdocs ساخته بودید قرار دهید. سپس در فایلی که قصد استفاده از تاریخ هجری شمسی را در آن دارید فایل jdf.php را include کنید. به‌عنوان مثال به کد زیر دقت کنید:

<?php

include (“jdf.php”);

print jdate(“j of F Y, \a\\t g.i a”, time());
?>

در کد بالا ما فقط date را به jdate تغییر دادیم. در این‌صورت نتیجه اجرای کد فوق چیزی شبیه به زیر خواهد بود:

۳ ۱۳۹۵ تابستان تیر ۱۳۹۵, at ۱.۵۴ ب.ظ

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

<?php

include (“jdf.php”);

print jdate(“j F Y – h:s”, time());

?>

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

۳ تیر ۱۳۹۵- ۰۱:۲۸

قطعا فرمت بالا نسبت به فرمت قبلی برای کاربران فارسی زبان گویاتر است. لازم به ذکر است که در فایلی که در بالا لینک دانلود آن را قرار دادیم، راهنمای کامل تابع jdate نیز وجود دارد که از سایت رسمی سازنده آن منتشر شده و برای یادگیری عمیق‌تر این توابع jdf.php می‌توانید به راهنمای موجود در فایل دانلود شده یا وب‌سایت http://jdf.scr.ir مراجعه کنید.

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

منبع: زومیت

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

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

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

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

r: باز کردن و فقط خواندن فایل

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

a: باز کردن فایل فقط برای نوشتن در آن

x: ایجاد فایل جدید فقط برای نوشتن در آن

+r: باز کردن فایل برای نوشتن/خواندن

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

+a: باز کردن فایل به منظور نوشتن/خواندن. اگر فایل وجود نداشته باشد آن را ایجاد می‌کند.

+x: ایجاد فایل جدید برای خواندن/نوشتن

مثل همیشه نرم‌افزار Xampp را اجرا و سرور آپاچی و mysql را در حالت اجرا قرار دهید. در پوشه htdocs یک پوشه جدید به نام files ایجاد کرده و در این پوشه یک فایل به نام testfile.php ایجاد کنید. در این فایل کدهای زیر را قرار دهید:

<?php

$myfile = fopen(“file.txt”, “w”);

?>

حالا فایل بالا را با مرورگر اجرا کنید. برای این منظور باید به آدرس http://127.0.0.1/files/testfile.php مراجعه کنید. پس از اجرای این آدرس در مروگر، یک فایل جدید به نام file.txt در پوشه‌ای که فایل testfile.php وجود دارد ساخته خواهد شد.

نوشتن روی فایل‌ها

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

<?php

//open or create file

$myfile = fopen(“names.txt”, “w”);

//now write new names to that file

$name1 = “mojtaba\n”;

fwrite($myfile, $name1);

$name2 = “miaad\n”;

fwrite($myfile, $name2);

$name3 = “masoud\n”;

fwrite($myfile, $name3);

fclose($myfile);

?>

همان‌طور که احتمالا متوجه شده‌اید در انتهای کد از تابع دیگری به نام fclose استفاده کرده‌ایم. از آنجا که چندبار در کد بالا فایل names.txt را فراخوانی کرده‌ایم، با این تابع در انتهای کار فایل موردنظر را می‌بندیم.

نکته دیگری که در مورد کد بالا وجود دارد این است که در انتهای هر نام از کاراکتر n\ استفاده کرده‌ایم. افرادی که با اچ‌تی‌ام‌ال آشنایی داشته باشند قطعا مفهوم این کاراکتر را می‌دانند. از n\ به منظور ایجاد خط جدید در فایل‌ها استفاده می‌کنیم. به این ترتیب در فایل names.txt هر نام در یک خط جدید قرار خواهد گرفت. در نتیجه اگر پس از اجرای کد پی‌اچ‌پی فوق در مرورگر فایل names.txt را باز کنید به شکل زیر خواهد بود:

mojtaba

miaad

masoud

همان‌طور که گفتیم تابع ()fclose به منظور بستن یک فایل مورداستفاده قرار می‌گیرد. این تابع اگر فایل را به درستی و با موفقیت ببندد مقدار true را برمی‌گرداند و در غیر این‌صورت مقدار false برگردانده می‌شود.

نکته کاربردی: برای تمرین و نیز در انجام دادن پروژه‌های خود بهتر از همیشه پس از کار با فایل‌ها آن‌ها را با تابع ()fclose ببندید.

افزودن اطلاعات به فایل

اگر قصد دارید اطلاعات جدیدی را به فایل موردنظر خود اضافه کنید باید آن فایل را در حالت Append باز کنید. به عنوان مثال به کد زیر دقت کنید:

<?php

$myFile = “test.txt”;

$fh = fopen($myFile, “a”);

fwrite($fh, “new information to be added test file!”);

fclose($fh);

?>

در کد بالا و در تمامی مواقعی که یک فایل را در حالت a باز کنید، اطلاعات جدید در آخر فایل اضافه خواهند شد. به عنوان مثال فرض کنید محتویات فایلی به نام file.txt به صورت زیر است:

some data

line 2 of file

حال اگر با استفاده از حالت a این فایل را باز کنیم و اطلاعات جدید به آن اضافه کنیم، به عنوان مثال عبارت new data را به این فایل اضافه کنیم، این فایل به صورت زیر به‌روزرسانی خواهد شد:

some data

line 2 of file

new data

حال قصد داریم یک مثال کاربردی‌تر را ایجاد کنیم. در پوشه files که به تازگی در پوشه htdocs ایجاد کرده بودید، یک فایل به نام add.php ایجاد کنید. کد زیر را در این فایل قرار دهید:

<?php

if (isset($_POST[‘text’]))

{

$name = $_POST[‘text’] . “\n”;

$handle = fopen (“names.txt”, “a”);

fwrite($handle, $name);

fclose($handle);

}

?>

<form method=”post” action=””>

name : <input type=”text” name=”text” size=”20″>

<input type=”submit” value=”add name to file”>

</form>

حال کد بالا را با استفاده از آدرس http://127.0.0.1/files/add.php اجرا کنید. در کد بالا چند نکته مهم وجود دارد. ابتدا به بخش پی‌اچ‌پی کاری نداشته باشید و فقط فرم را در نظر بگیرید. در کد بالا خاصیت action فرم را خالی گذاشته‌ایم. در چنین شرایطی اطلاعات این فرم به همین صفحه یعنی فایل add.php ارسال خواهد شد. حال به کد پی‌اچ‌پی در بالای فایل توجه کنید. ابتدا مثل همیشه با یک دستور شرطی if بررسی می‌کنید که اگر اطلاعاتی در فیلدی که خاصیت name آن text است وارد شده، آنگاه فایل names.txt در حالت a باز شود، و سپس نام وارد شده به انتهای محتویات فایل باز شده اضافه خواهد شد. همچنین به خط:

$name = $_POST[‘text’] . “\n”;

در کد بالا توجه کنید. در این خط نام وارد شده توسط کاربر را از فرم دریافت کرده و سپس کاراکتر n\ را به انتهای نام اضافه می‌کنیم تا پس از اضافه شدن در فایل names.txt یک خط جدید ایجاد شود تا نام‌های بعدی به همین شکل در یک خط جدید در فایل درج شوند.

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

دقت کنید که 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”, “miaad”, “hami”, “masoud”,”mehdi”);

foreach ($AllNames as $name)

{

    echo $name . “<br>”;

}

?>

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

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

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

حال در پوشه files که در پوشه htdocs ایجاد کرده بودید، یک فایل جدید به نام read.php ایجاد کنید. سپس کد زیر را در این فایل قرار دهید:

<?php

$read = file(“names.txt”);

foreach($read as $name)

{

    echo $name . ” – “;

}

?>

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

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

$read = file(“names.txt”);

$count = count($read);

$i = 1;

foreach ($read as $line)

{
echo $line;

        if($i < $count){

            echo ” – “;

        }

        $i++;

}

?>

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

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

منبع: زومیت

آموزش 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 – جلسه دوازدهم: درج اطالاعات در بانک اطلاعاتی MySQL

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

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

اگر جلسه قبل را مطالعه نکرده‌اید لازم است پیش از ادامه مطالعه این مبحث، جلسه قبل را به‌خوبی فرا بگیرید. برای درج اطلاعات جدید به بانک اطلاعاتی ایجاد شده در جلسه قبل ابتدا باید یک فرم مناسب طراحی کنیم. پیش از هر چیز نرم‌افزار Xampp را اجرا و دو سرور apache و mysql را درست همانند جلسه قبل فعال کنید. یک فایل جدید در پوشه cms که جلسه قبل ساخته بودید ایجاد کنید و نام آن را insert.php بگذارید. در این فایل یک فرم برای درج مطلب جدید در جدول posts از بانک اطلاعات cms طراحی می‌کنیم. از آنجا که نیاز به دو فیلد برای درج هر رکورد جدید در جدول posts داریم پس برای فرم درج مطلب نیز باید دو فیلد را در نظر بگیریم. یک فیلد متنی برای عنوان و یک textarea برای متن مطلب. کد زیر را در فایل insert.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 ارسال می‌شود. پس یک فایل جدید به نام 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 != “”){
//do insert
$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>

حال به تحلیل کد بالا می‌پردازیم. اگر خاطرتان باشد در جلسه قبل گفتیم برای فهم بهتر این جلسه بهتر است سری به مقالات آموزش در مورد MYSQL بزنید تا آمادگی بیشتری برای این جلسه داشته باشید. همان‌طور که می‌بینید ابتدا فایل confing.php را فراخوانی کرده‌ایم. سپس مقادیر وارد شده در دو فیلد فرم درج مطلب را در دو متغیر title و text ذخیره کرده‌ایم. سپس با یک دستور if بررسی کرده‌ایم که آیا مقداری توسط کاربر در این دو فیلد وارد شده یا خیر. اگر وارد نشده باشد پیام خطای مناسب به وی نمایش داده می‌شود و اگر عنوان و متن مطلب وارد شده باشد عملیات درج در بانک اطلاعاتی را انجام می‌دهیم.

با استفاده از تابع mysql_query مقادیر وارد شده توسط کاربر را به جدول posts در بانک اطلاعاتی cms وارد می‌کنیم. خروجی این تابع یعنی مقداری که بر می‌گرداند یا true است یا false. پس با یک دستور if بررسی می‌کنیم که آیا عملیات درج انجام شده یا نه. اگر عملیات با موفقیت انجام شده باشد مقدار true برگردانده می‌شود و در نتیجه شرط ما برقرار خواهد بود و پیام درج موفقیت‌آمیز مطلب جدید به کاربر نمایش می‌یابد.

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

b8c0632f-30b2-4363-ad60-41a8237df537پس از پر کردن فیلدهای فرم بالا و ثبت فرم صفحه زیر نمایان شده که نشان از درج موفق مطلب در جدول posts می‌دهد.

e5e39d40-e2c7-44dc-bf77-49e55454b455

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

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

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

همانطور که می‌بینید ابتدا دو کلمه کلیدی INSERT INTO را باید حتما بنویسید. سپس نام جدولی که قصد دارید در آن یک رکورد جدید درج کنید را به جای TABLE_NAME جایگزین می‌کنیم. سپس به تعداد فیلد‌هایی که جدول ما برای اضافه شدن هر رکورد نیاز دارد نام فیلد‌های مورد نظر را می‌نویسیم. در پروژه ما جدول posts سه فیلد داشت، اما اگر دقت کرده باشید ما فقط دو فیلد title و text را در کوئری آن نوشتیم. چراکه همانطور که در جلسه قبل توضیح دادیم فیلد id یا شناسه منحصر به فرد هر مطلب به صورت خودکار توسط MYSQL با اضافه شدن هر رکورد یک واحد افزایش می‌یابد. پس از نام فیلد‌ها کلمه کلیدی VALUES و سپس به تعداد فیلد‌هایی که نوشته‌ایم، داده‌های موردنظرمان را برای درج در آن فیلد‌ها در کوئری وارد می‌کنیم. به عنوان مثال در پروژه ما دو فیلد title و text را با مقادیری که کاربر وارد کرده بود و آن‌ها را در متغیرهایی به نام title$ و text$  ذخیره کرده‌ بودیم پر کردیم. پس این داده‌ها هر کدام در فیلد مربوط به خود در یک سطر جدید در جدول موردنظر اضافه شده‌اند. برای درک بهتر این مطلب به آدرس http://127.0.0.1/phpmyadmin بروید. سپس در سمت چپ روی نام بانک اطلاعاتی که جلسه قبل ساختیم یعنی cms کلیک کنید. سپس در سمت راست روی تب Structure کلیک کنید. حال روی نام جدول یعنی posts کلیک کنید. حال می‌توانید لیست رکوردهای درج شده در این جدول را مشاهده کنید. همانند تصویر زیر.

۵۹ec2c0a-3b9c-4160-8582-1329b4834166

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

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

منبع: زومیت