آموزشphp
ajax چیست?
AJAX (آجاکس)، هنر تبادل داده ها با سرور و بروز رسانی بخش هایی از یک صفحه وب، بدون بارگذاری مجدد کل صفحه است.
AJAX (آجاکس) چیست؟
AJAX مخفف کلمات Asynchronous JavaScript And XML است.
به طور خلاصه، AJAX در مورد بارگذاری داده ها در پس زمینه و نمایش آن بر روی صفحه وب بدون بارگذاری مجدد کل صفحه است.
مثال هایی از استفاده AJAX در برنامه ها:
- Gmail
- Google Maps
- Youtube
AJAX چگونه کار می کند
AJAX براساس استاندارهای اینترنت
AJAX براساس استاندارهای اینترنت است و ترکیبی از موارد زیر را استفاده می کند:
- شیء XMLHttpRequest - برای تبادل داده با سرور، بصورت غیرهمزمان (asynchronously) استفاده می شود.
- JavaScript/DOM - برای نمایش اطلاعات و یا تعامل با داده ها
- CSS- برای مشخص کردن نحوه نمایش داده ها
- XML - اغلب بعنوان یک فرمت برای انتقال داده ها استفاده می شود.
برنامه های کاربردی AJAX مرورگرند و مستقل از پلتفرم عمل می کنند...! امکان Google Suggest
AJAX در سال 2005 توسط Google با امکان Google Suggest این سایت معروف شد.
این امکان (Google Suggest) با استفاده از AJAX یک واسط کاربری بسیار پویا ایجاد کرده است. زمانی که در کادر جستجوی Google شروع به تایپ می کنید، یک کد JavaScriptحروف را به سرور ارسال می کند و سرور لیستی از پیشنهادات برای کلمه مورد جستجوی شما را برمی گرداند.
شروع به استفاده از AJAX
در بیاموز PHP، ما نحوه update کردن بخشی از صفحه وب، بدون بارگذاری کل صفحه را با استفاده از AJAX آموزش خواهیم داد.
اسکریبت های سمت سرور، با PHP نوشته خواهد شد.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
cookie ها در PHP
Cookie ها در php
Cookie چیست؟ cookie یک فایل کوچک است که سرور آن را درون کامپیوتر کاربر قرار می دهد. هر بار که همان کامپیوتر یک صفحه را از طریق مرورگرش درخواست می کند، مقدار cookie همراه با درخواست به سرور ارسال می شود. با php، شما می توانید هم مقادیر cookie را بسازید و هم بازیابی کنید.
توجه: یک cookie اغلب برای شناسایی یک کاربر استفاده می شود.
چگونه یک cookie ایجاد کنیم؟
تابع ()setcookie برای ایجاد cookie استفاده می شود.
نکته: تابع ()setcookie باید قبل از تگ <html> قرار گیرد.
نحوه استفاده:
setcookie(name, value, expire, path, domain);
مثال:
در مثال زیر٫ یک cookie با نام "user" ایجاد می کنیم و مقدار "Ali Ahmadi" را به آن اختصاص می دهیم. ما همچنین مشخص می کنیم که cookie پس از یک ساعت از بین برود:
<?php
setcookie("user", "Ali Ahmadi", time()+3600);
?>
<html>
.....نکته: مقدار cookie به طور خودکار هنگام ارسال کد(URLencoding) می شود و موقع دریافت رمزگشایی می شود (برای پیشگیری از رمزگذاری٫ از ()setrawcookie استفاده کنید.
مثال:
شما می توانید زمان انقضای cookie را به روشی دیگر مشخص کنید، احتمالاً این راه ساده تر از مشخص کردن ثانیه هاست:
<?php
$expire=time()+60*60*24*30;
setcookie("user", "Ali Ahmadi", $expire);
?>
<html>
.....در مثال بالا زمان انقضا با مقدار "1 ماه" پر شده است( 60sec * 60 min * 24 hours * 30 days)
چگونه مقدار یک cookie را بازیابی کنیم؟
متغیر COOKIE_$ در php برای بازیابی مقدار یک cookie مورد استفاده قرار می گیرد.
مثال:
در مثال زیر٫ مقدار cookie با نام "user" را بازیابی می کنیم و بر روی صفحه، نمایش می دهیم:
<?php
// Print a cookie
echo $_COOKIE["user"];
// A way to view all cookies
print_r($_COOKIE);
?>در مثال زیر با استفاده از تابع ()isset چک می کنیم که cookie با نام "user" قبلاً set شده است یا نه؟
<html>
<body>
<?php
if (isset($_COOKIE["user"]))
echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
echo "Welcome guest!<br />";
?>
</body>
</html>چگونه یک cookie را حذف کنیم؟
هنگامی که می خواهید یک cookie را حذف کنید باید اطمینان دهید که تاریخ انقضاء آن به پایان رسیده است.
مثال حذف:
<?php
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>اگر یک مرورگر cookieها را پشتیبانی نکند چه باید کرد؟
اگر برنامه شما با مرورگرهایی سروکار دارد که cookieها را پشتیبانی نمی کنند، باید روشهای دیگری رابرای انتقال اطلاعات از یک صفحه به صفحه ی دیگر انتخاب کنید. یک روش انتقال اطلاعات از طریق فرم ها و متغیرهای از پیش تعریف شده است(فرم ها و متغیر های از پیش تعریف شده، قبل از این توضیح داده شده اند).
در فرم زیر وقتی که کاربر دکمه ی "submit" را کلیک می کند، ورودی های کاربر را به "welcome.php" می فرستد:
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>بازیابی اطلاعات در صفحه "welcome.php" شبیه زیر خواهد بود:
<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.
include کردن فایل در PHP
درج کردن یک فایل PHP در یک فایل PHP دیگر
شما می توانید با استفاده از دو تابع include یا require محتویات یک فایل PHP را داخل یک فایل PHPدیگر درج کنید، البته قبل از اینکه فایل دوم اجرا شود.
این دو تابع در همه موارد یکسان عمل می کنند، بجز در چگونگی برخورد با خطا:
- include: پیغام خطا را تولید می کند، اما ادامه اسکریپت اجرا خواهد شد.
- require: پیغام خطا را تولید می کند و اجرای اسکریپت متوقف خواهد شد.
موارد استفاده دو تابع include و require می تواند شامل موارد زیر باشد:
- توابع
- Header
- Footer
- المانهایی که در چندین صفحه استفاده می شود مانند منوها، کامپوننت تاریخ و...
شما می توانید یک فایل استاندارد Header یا Footer و یا منو ایجاد کنید و در همه صفحات پروژه تان از آنها استفاده کنید، و موقعی که نیاز به تغییر داشت، تنها با تغییر یک فایل، کل پروژه تان را تازه سازی کنید.
دستور include_once و require_once:
دو تابع بالا دقیقاً مثل include و require عمل می کنند، با این تفاوت که اگر فایل مورد نظر قبلاً خوانده شده است، دیگر خوانده نمی شود.مثال 1:
فرض کنید یک فایل Header با نام "header.php" دارید، برای اضافه کردن آن به صفحه ای از پروژه از کد زیر استفاده کنید:
<html>
<body>
<?php include("header.php"); ?>
<h1>Welcome to my home page!</h1>
<p>Some text.</p>
</body>
</html>دستورات include, include_once, require و require_once را می توان بدون پرانتز نیز بکار برد.
مثال 2:
فرض کنید یک فایل منو طبق زیر با نام "menu.php" داریم، که باید به تمام صفحات پروژه اضافه شود:
<a href="/default.php">Home</a>
<a href="/tutorials.php">Tutorials</a>
<a href="/references.php">References</a>
<a href="/examples.php">Examples</a>
<a href="/about.php">About Us</a>
<a href="/contact.php">Contact Us</a>در زیر فایل "menu.php" را به صفحه دلخواهمان اضافه کرده ایم:
<html>
<body>
<div class="leftmenu">
<?php include("menu.php"); ?>
</div>
<h1>Welcome to my home page.</h1>
<p>Some text.</p>
</body>
</html>اگر بعد از اجرای فایل بالا در IE ، روی صفحه راست کلیک کرده و View Source را کلیک کنید، کد html شبیه زیر خواهیم داشت:
<html>
<body>
<div class"leftmenu">
<a href="/default.php">Home</a>
<a href="/tutorials.php">Tutorials</a>
<a href="/references.php">References</a>
<a href="/examples.php">Examples</a>
<a href="/about.php">About Us</a>
<a href="/contact.php">Contact Us</a>
</div>
<h1>Welcome to my home page!</h1>
<p>Some text.</p>
</body>
</html>مثال 3: خطا در تابع include:
در مثال زیر فایل wrongFile.php وجود ندارد و همان طور که مشاهده می کنید بعد از چاپ پیغام خطا ادامه اسکریپت اجرا می شود.
<html>
<body>
<?php
include("wrongFile.php");
echo "Hello World!";
?>
</body>
</html>پیغام خطا:
Warning: include(wrongFile.php) [function.include]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5
Warning: include() [function.include]:
Failed opening 'wrongFile.php' for inclusion
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5
Hello World!مثال 4:پیغام خطا در تابع require:
<html>
<body>
<?php
require("wrongFile.php");
echo "Hello World!";
?>
</body>
</html>پیغام خطا:
Warning: require(wrongFile.php) [function.require]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5
Fatal error: require() [function.require]:
Failed opening required 'wrongFile.php'
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5بعد از ایجاد خطا، ادامه اجرای اسکریپتمتوقف می شود، و در حقیقت خطی که قرار است Hello World را چاپ کند، اجرا نمی شود.
پیشنهاد می شود از تابع require بجای include استفاده شود، چون اسکریپت ها بعد از برخورد با خطا نباید ادامه پیدا کنند.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.
simplexml چیست؟
SimpleXML چیست؟
SimpleXML یک روش جدید برای خواندن خصوصیات و متن یک عنصر در PHP5 فراهم می کند. (البته اگر طرح بندی سند XML را بدانید)
SimpleXML در مقایسه با تجزیه کننده DOM یا Expat با کد کمتری به اطلاعات عناصر دسترسی پیدا می کند.
SimpleXML یک سند XML را به یک شی تبدیل می کند:
- عناصر: بوسیله شیء SimpleXMLElement به یک سری خصوصیات تنها تبدیل می شوند، زمانی که در یک سطح، بیش از یک عنصر وجود دارد، از آرایه ها استفاده می شود.
- خصوصیات: خصوصیات عناصر در یک آرایه انجمنی(PHP Arrays) قابل دسترسی است، نام خصوصیت ایندکس آرایه است.
- اطلاعات عنصر: متن اطلاعات عنصر به یک رشته تبدیل می شود، اگر یک عنصر بیش از یک متن داشت، آنها را به ترتیبی که پیدا کرده می چیند.
برای موارد پایه ای شبیه زیر، استفاده از SimpleXML بسیار ساده و سریع است:
- خواندن یک فایل XML
- استخراج اطلاعات از یک رشته XMLی
- ویرایش متن یا مشخصه های یک عنصر
نکته: زمانی که با یک فایل XML پیشرفته شبیه namespaceها سروکار دارید بهتر است که از تجزه کننده های Expat یا DOM استفاده کنید.
نصب SimpleXML
توابع تجزیه کننده SimpleXML قسمتی از هسته PHP 5.0 هستند و نیازی به نصب وجود ندارد.
چگونه از SimpleXML استفاه کنیم
لطفاً به فایل XML زیر توجه کنید:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>می خواهیم نام و متن اطلاعات هر عنصر را در خروجی چاپ کنیم.
راه حل؟
- فایل XML را لود کنید.
- نام اولین عنصر را بخوانید.
- یک حلقه روی هر نود(فرزند) ایجاد کنید و برای خواندن اطلاعات هر نود(فرزند) از تابع ()children استفاده کنید.
- برای هر نود(فرزند) نام عنصر و متن اطلاعات آنرا چاپ کنید.
مثال:
<?php
$xml = simplexml_load_file("test.xml");
echo $xml->getName() . "<br />";
foreach($xml->children() as $child)
{
echo $child->getName() . ": " . $child . "<br />";
}
?>خروجی کد بالا:
note
to: Tove
from: Jani
heading: Reminder
body: Don't forget me this weekend!برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
آرایه ها در PHP
آرایه ها در PHP
آرایه ها انواع خاصی از متغیرها به حساب می آیند که می توانند چندین داده را در قالب یک نام ذخیره کنند.
اگر لیستی از آیتمها (برای مثال یک لیست از نام ماشین ها) را داشته باشیم و بخواهیم آنها را در متغیر ها ذخیره کنیم، چیزی شبیه زیر خواهیم داشت:
$cars1="Samand";
$cars2="Volvo";
$cars3="BMW";حالا:
- اگر لیست شما بیشتر از 3 آیتم باشد مثلاً 300تا چه کار می کنید.
- اگر در این لیست به دنبال یک ماشین خاص باشید چه کار می کنید.
در اینجا بهترین راه حل استفاده از آرایه ها است.
یک آرایه می تواند مقادیر متغیرها را تحت یک نام برای شما نگه دارد. و شما از طریق نام آرایه می توانید به مقادیر دسترسی داشته باشید.
هر آیتم در آرایه ایندکس منحصر به فردی برای خود دارد که به راحتی از طریق ایندکس می توانید به مقادیر دسترسی پیدا کنید.
در PHP سه نوع آرایه وجود دارد:
- آرایه عددی (Indexed array): منظور از عددی ایندکس آرایه است، یعنی یک آرایه با ایندکس عددی
- آرایه انجمنی (Associative array): یک آرایه که بجای ایندکس عددی از یک نام یا مقدار برای ایندکس گذاری استفاده کرده است.
- آرایه چند بعدی (Multidimensional array): یک آرایه که مقادیر هر سلول آن آرایه ای دیگر است.
آرایه عددی
در یک آرایه عددی مقادیر هر سلول آرایه با یک ایندکس عددی مشخص می شود.
دو روش برای ایجاد چنین آرایه ای وجود دارد:
- در مثال زیر ایندکس به صورت اتوماتیک ساخته می شود(ایندکس از 0 شروع می شود):
$cars=array("Samand","Volvo","BMW","Toyota");
- در مثال زیر به صورت دستی می توانید ایندکس را بسازید:
$cars[0]="Samand";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";
در مثال زیر بعد از مقداردهی آرایه شما می توانید به مقادیر هر سلول به وسیله نام و ایندکس آرایه دسترسی پیدا کنید:
<?php
$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";
echo $cars[0] . " and " . $cars[1] . " are Swedish cars.";
?>خروجی کد بالا:
Saab and Volvo are Swedish cars.
توجه: با استفاده از تابع ()count، می توانید تعداد سلول های یک آرایه را تعیین نمایید.
آرایه های انجمنی
در یک آرایه انجمنی ایندکس هر سلول از آرایه، با یک نام یونیک مشخص می شود.
زمان ذخیره مقادیر سلولها باید یک نام مشخص و یونیک به آن سلول اختصاص دهید.
مثال 1: در این مثال یک آرایه ای که سن افراد مختلف را نشان می دهد، تعریف شده است:
$ages = array("Ali"=>32, "Reza"=>30, "Amir"=>34);
مثال2: این مثال مانند قبلی است اما می تواند نشان دهد که چگونه می توانیم به روش های مختلف یک آرایه را تعریف کنیم:
$ages['Ali'] = "32";
$ages['Reza'] = "30";
$ages['Amir'] = "34";در زیر نشان داده شده که چگونه از طریق نام و ایندکس آرایه، توانسته ایم به محتویات هر سلول آرایه دسترسی پیدا کنیم:
<?php
$ages['Ali'] = "32";
$ages['Reza'] = "30";
$ages['Amir'] = "34";
echo "Ali is " . $ages['Ali'] . " years old.";
?>خروجی کد بالا:
Ali is 32 years old.
آرایه های چند بعدی
هریک از عناصر آرایه در php می توانند از هر نوعی باشند پس می توانیم آرایه را نیز به عنوان عضو عناصر در نظر بگیریم. بنابراین به زبان ساده تر می توانیم یک آرایه داخل آرایه دیگر تعریف کنیم و داخل آن نیز یک آرایه دیگر و داخل آن نیز و به همین ترتیب. تعریف آرایه چندبعدی در زبان php به سادگی آرایه های معمولی است.
مثال: در این مثال یک آرایه چند بعدی تعریف شده که ایندکس آن به صورت اتوماتیک ایجاد می شود:
$families = array(array("Ali","Reza","Sara"),
array("Amir"),
array("Poya","Parniya")
);اگر مایل باشید می توانید آرایه بالا را به صورت زیر تعریف کنید: (ایندکسِ مقداری)
$families = array("Ahmadi"=>array("a"=>"Ali","b"=>"Reza","c"=>"Sara"),
"Naderi"=>array("a"=>"Amir"),
"Mohamadi"=>array("a"=>"Poya","b"=>"Parniya")
);مثال: اجازه بدهید تا با یک مثال نشان دهیم که چگونه می توان به یک سلول از آرایه های چند بعدی دسترسی پیدا کرد:
echo "Is " . $families['Ahmadi']['b'] . " a part of the Ahmadi family?";
خروجی کد بالا:
Is Reza a part of the Ahmadi family?
مرتب کردن آرایه ها در PHP
عناصر یک آرایه را می توان به صورت الفبایی یا عددی از کوچک به بزرگ (ascending) یا بزرگ به کوچک (descending) مرتب نمود.
توابع مرتب سازی آرایه ها:
- ()sort - مرتب کردن مقادیر آرایه از کوچک به بزرگ
- ()rsort - مرتب کردن مقادیر آرایه از بزرگ به کوچک
- ()asort - مرتب کردن آرایه های انجمنی از نزولی به صعودی (بر اساس مقدار)
- ()ksort - مرتب کردن آرایه های انجمنی از نزولی به صعودی (بر اساس کلید)
- ()arsort - مرتب کردن آرایه های انجمنی از صعودی به نزولی (بر اساس مقدار)
- ()krsort - مرتب کردن آرایه های انجمنی از صعودی به نزولی (بر اساس کلید)
در مثال زیر، آرایه انجمنی age$ بر اساس کلید، از کوچک به بزرگ مرتب شده است:
مثال (آرایه ها در PHP)
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
ksort($age);
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>خروجی کد بالا:
Key=Ben, Value=37
Key=Joe, Value=43
Key=Peter, Value=35در مثال زیر، آرایه انجمنی age$ بر اساس مقادیر سلول ها، از بزرگ به کوچک مرتب شده است:
مثال (آرایه ها در PHP)
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
arsort($age);
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>خروجی کد بالا:
Key=Joe, Value=43
Key=Ben, Value=37
Key=Peter, Value=35برگرداندن تعداد عناصر یک آرایه
با استفاده از تابع ()count، می توان تعداد عناصر یک آرایه را برگرداند.
مثال (آرایه ها در PHP)
برگرداندن تعداد عناصر یک آرایه:
<?php
$cars=array("Volvo","BMW","Toyota");
echo count($cars);
?>3نحوه استفاده:
count(array,mode);پارامتر توضیحات array الزامی است، نام آرایه را تعیین می کند. mode اختیاری است، در آرایه های چند بعدی، نحوه شمارش عناصر را تعیین می کند. - 0: مقدار پیشفرض، در آرایه های چند بعدی، تعداد کل عناصر را برنمی گرداند.
- 1: در آرایه های چند بعدی، تعداد کل عناصر را برمی گرداند.
نکته: پارامتر mode از php 4.2 به بعد اضافه شده است.
یک مثال دیگر از تابع ()count
مثال (آرایه ها در PHP)
تعداد عناصر، در آرایه های چند بعدی:
<?php
$cars=array
(
"Volvo"=>array
(
"XC60",
"XC90"
),
"BMW"=>array
(
"X3",
"X5"
),
"Toyota"=>array
(
"Highlander"
)
);
echo "Normal count: " . count($cars)."<br>";
echo "Recursive count: " . count($cars,1);
?>Normal count: 3
Recursive count: 8در بیاموزهای بعدی درباره ی حلقه ی foreach توضیح داده شده است.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
آموزش Namespace در PHP
در PHP 5.3 یک مفهوم دیگر به نام namespace(فضای نام) به این زبان اضافه شد. اکثر زبان های برنامه نویسی از قبل این ویژگی را داشتند، اما زبان PHP دیرتر از بقیه وارد صحنه شد. اجازه دهید تا کمی با مفهوم namespace و کاربردهای آن در phpآشنا شویم.
در زبان برنامه نویسی PHP، قادر نیستیم تا دو کلاس هم نام داشته باشیم. بعنوان مثال اگر بخواهیم از یک کتابخانه ی ثانویه در داخل کدهای خود استفاده کنیم که حاوی یک کلاس به نام User باشد، دیگر نمی توانیم در داخل کدهای خودمان، کلاسی به نام User ایجاد کنیم.
namespaceها در php به ما امکان می دهند تا این مشکل را حل کنیم. با استفاده از namespace می توانیم به هر تعداد که بخواهیم کلاس هایی با نام User (یا دیگر نام ها) ایجاد کنیم. اجازه دهید تا یک کلاس ایجاد کنیم و آن را مورد بررسی قرار دهیم:
namespace سراسری(Global)
در کدهای زیر، یک کلاس ساده را مشاهده می کنید:
<?php // app/models/Eddard.php class Eddard { }
هیچ کدی در داخل این کلاس وجود ندارد، و اگر بخواهیم این کلاس را مورد استفاده قرار دهیم، می توانیم به صورت زیر عمل کنیم:
<?php // app/routes.php $eddard = new Eddard();
به این کلاس، کلاس سراسری گفته می شود، و به این معنی است که این کلاس از هیچ namespace ای استفاده نمی کند. و یک کلاس عادی است.
استفاده از namespaceهای ساده
اجازه دهید تا در کنار کلاس سراسری Eddard، یک کلاس دیگر نیز ایجاد کنیم:
<?php namespace Stark; // app/models/another.php class Eddard { }
همان طور که مشاهده می کنید، در اینجا یک کلاس دیگر به نام Eddard (همان نام قبلی) ایجاد کرده ایم. همچنین از دستور namespace نیز در خط شماره ی 3 استفاده کرده ایم. درواقع در خط شماره 3، عبارت ;namespace Stark به php اعلام می کند که، هر کدی که می نویسیم به فضای نام Stark تعلق دارد. این یعنی هر کلاسی که در داخل این فایل php ایجاد شود، در درون فضای نام Stark قرار دارد.
اکنون اگر دوباره با استفاده از کدهای زیر بخواهیم از کلاس Stark استفاده کنیم:
<?php // app/routes.php $eddard = new Eddard();
در حقیقت از همان کلاس اولیه نمونه گیری کرده ایم(شیء ایجاد کرده ایم). یعنی از همان کلاسی که در ابتدای این مقاله ایجاد کردیم. نه آن کلاسی که در داخل فضای نام Stark آن را ایجاد کردیم. اما اکنون اجازه دهید تا از کلاس Eddard که در داخل فضای نام Stark قرار دارد، نمونه گیری کنیم(شیء ایجاد کنیم):
<?php // app/routes.php $eddard = new Stark\Eddard();
برای اینکه بتوانیم از یک کلاس که در داخل یک فضای نام قرار دارد، نمونه گیری کنیم، باید قبل از نام آن کلاس، از نامِ فضای نامی که در داخل آن قرار دارد، استفاده کنیم و بین آن دو، یک بک اسلش(\) قرار دهیم. اکنون ما توانستیم از کلاس Eddard که در داخل فضای نام Stark قرار دارد، نمونه گیری کنیم.
باید بدانید که فضاهای نام در صورت نیاز می توانند سلسله مراتب داشته باشند. بعنوان مثال داریم:
This\Namespace\And\Class\Combination\Is\Silly\But\Works
تئوری نسبی بودن
زبان برنامه نویسی php همواره به صورت نسبی به فضاهای نام واکنش نشان می دهد. اجازه دهید تا این موضوع را در عمل مشاهده کنیم:
<?php namespace Stark; // app/routes.php $eddard = new Eddard();
با اضافه کردن namespace در کدهای بالا، باعث شده ایم که php به داخل فضای نام Stark برود(در خط شماره 3). اکنون چون که در داخل فضای نام Stark هستیم، در خط شماره ی 7، در حقیقت از آن کلاس Eddard داریم نمونه گیری می کنیم که دارای فضای نام Stark است.
حالا که فضای نام را تغییر داده ایم(به Stark)، با یک مشکل کوچک مواجه خواهیم شد. مشکل این است که حالا چگونه می توانیم از کلاس Eddard اصلی(که فضای نامی ندارد) نمونه گیری کنیم؟ خوشبختانه در زبان php یک راه حل برای اشاره به کلاس هایی که در داخل فضای نام سراسری هستند، وجود دارد. تنها کافیست که از یک علامت بک اسلش(\) قبل از نام کلاس استفاده کنیم:
<?php // app/routes.php $eddard = new \Eddard();
با استفاده از علامت بک اسلش(\)، زبان php متوجه می شود که ما داریم به کلاس Eddard که در داخل فضای نام سراسری قرار دارد، اشاره می کنیم و می خواهیم از آن، نمونه گیری کنیم.
تصور کنید که یک کلاس دیگر به نام Tully\Edmure داریم. و می خواهیم از این کلاس، وقتی که در داخل فضای نام Stark هستیم، استفاده کنیم. چگونه باید این کار را انجام دهیم؟
<?php namespace Stark; // app/routes.php $edmure = new \Tully\Edmure();
دوباره می توانیم از یک بک اسلش، قبل از نام این کلاس استفاده کنیم تا به فضای نام سراسری برگردیم، قبل از اینکه از کلاس Edmure که در فضای نام Tully قرار دارد نمونه گیری کنیم.
یعنی ابتدا با استفاده از یک بک اسلش، به فضای نام سراسری می رویم، و سپس از کلاس Edmure که در فضای نام Tully قرار دارد نمونه گیری می کنیم.
اشاره به کلاس هایی که در داخل فضاهای نام متفاوتی هستند، به صورت سلسله مراتب، کمی خسته کننده است. خوشبختانه یک راه میانبر برای انجام این کار وجود دارد. و آن استفاده از دستور use است. به مثال زیر توجه کنید:
<?php namespace Stark; use Tully\Edmure; // app/routes.php $edmure = new Edmure();
با استفاده از دستور use می توانیم در داخل فضای نام جاری، از یک کلاس که در یک فضای نام دیگر قرار دارد، استفاده کنیم. این روش به ما امکان می دهد تا تنها با استفاده از نام آن کلاس، از آن نمونه گیری کنیم.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
آموزش PHP
آموزش PHP (پی اچ پی) - مقدمه
PHP (پی اچ پی) یک زبان اسکریپت نویسی سمت سرور است و می تواند، ابزاری قدرتمند برای ساخت صفحات پویا و داینامیک بحساب آید.
- گستردگی استفاده
- رایگان بودن (بدون اهمیت در ایران)
- جایگزینی مناسب برای ASP ماکروسافت
آموزش آسان PHP (پی اچ پی) با مثال های فراوان
مثال های فراوان در آموزش PHP، باعث می شود که PHP را به آسانی فرابگیرید، در این مثال ها، هم کدهای PHP و هم خروجی آن همزمان نمایش داده می شود:
مثال - آموزش PHP
<!DOCTYPE html>
<html>
<body>
<?php
echo "My first PHP script!";
?>
</body>
</html>خروجی کد بالا:
My first PHP script!پیش نیازهای آموزش PHP (پی اچ پی)
پیشنهاد می شود اگر با آموزش های زیر آشنا نیستید، قبل از ادامه آموزش PHP، آنها را مطالعه فرمایید:
آموزش PHP (پی اچ پی): PHP چیست؟
- PHP سرنام واژگان "PHP Hypertext Preprocessor" بحساب می آید.
- PHPیک نرم افزار کد باز است. (Open Source)
- PHP زبان اسكریپتی سمت سرویس دهنده می باشد. (server-side)
- PHP را می توانید بصورت رایگان دانلود و استفاده کرد.
PHP یک زبان جالب و معروف
PHP آنقدر قدرتمند هست که بتواند هسته بزرگترین سیستم محتوای وب (Joomla) را تشکیل دهد.
PHP به اندازه کافی توانایی دارد که یکی از بزرگترین جوامع مجازی (Facebook) را اجرا کند.
همچنین PHP بقدری آسان است که بتواند مورد استفاده تازه کاران قرار بگیرد.آموزش PHP (پی اچ پی): فایل PHP چیست؟
- فایل های PHP می تواند شامل متن، تگ های HTML، خصوصیت های CSS، دستورات JavaScript و دستورات PHP باشد.
- دستورات PHP سمت سرور اجرا می شوند و نتیجه بصورت HTML به مرورگر کاربر ارسال می شود.
- فایل های PHP با پسوند php. ذخیره می شوند.
آموزش PHP (پی اچ پی): قابلیت های PHP
- PHP می تواند صفحات با محتوای داینامیک را ایجاد کند.
- PHP می تواند سمت سرور فایل ها را ایجاد کند، حذف کند، باز کند، بخواند، ویرایش کند و ببندد.
- PHP می تواند داده های فرم را جمع آوری کند.
- PHP می تواند Cookieها را ارسال و دریافت کند.
- PHP می تواند داده ها را در پایگاه داده اضافه، حذف و ویرایش کند.
- PHP می تواند دسترسی کاربران وب سایتتان را به بعضی از صفحات محدود کند.
- PHP می تواند داده ها را رمزنگاری کند.
با PHP هیچ محدودیتی در تولید HTML ندارید. شما می توانید تصاویر، فایل های PDF و حتی فایل های Flash را ایجاد نمایید. همچنین می توانید هر متنی مانند XHTML و XML را در خروجی چاپ نمایید.
آموزش PHP (پی اچ پی): چرا PHP؟
- یکی از برترین مزایای PHP (پی اچ پی) سازگاری آن با اکثر سیستم عامل ها و نرم افزارهای وب سرور مانند IIS و Appache است.
- PHP (پی اچ پی) ساختار و ترکیبی بسیار شبیه C دارد.
- استفاده و دانلود PHP (پی اچ پی) رایگان است.
- PHP (پی اچ پی) یکی از سریع ترین زبان ها در نوع خود است.
در آموزش PHP از کجا شروع کنم؟
- PHP (پی اچ پی) برای اجرا نیاز به یک Web-Server دارد، ساده ترین Web-Server برای شما احتمالاً IIS خواهد بود. (PHP & IIS)
- طبیعتاً برای اجرای فایل های PHP (پی اچ پی) نیاز به یک مرورگر وب دارید که مسلماً رایجترین آن IE است.
- برای ایجاد فایل های PHP (پی اچ پی)، نیاز به یک ویرایشگر ساده متنی مثل Notpad یا Wordpad دارید.
- PHP (پی اچ پی) و در صورت نیاز MySql را نصب کنید.
در ادامه آموزش PHP،خواهید دید که با نصب بسته XAMPP، همزمان PHP و MySQL و Apache نصب خواهد شد.
توجه: شما می توانید، مطالب آموزش PHP بالا را از پنل سمت راست همین صفحه دنبال فرمایید.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
آموزش پروژه محور PHP
یکی از قابلیت های مهم این پروژه، رزرو هتل و همچنین ثبت نام کاربران است، علاوه بر این با ورود به قسمت مدیریت می توانید اطلاعات ثبت شده را مشاهده، ویرایش و یا حذف نمایید.
آموزش نصب PHP
به چه چیزی نیاز دارم؟
برای شروع کار با PHP می توانید یکی از موارد زیر را استفاده نمایید:
- می توانید از یک وب هاست که PHP و MYSQL را پشتیبانی می کند، استفاده نمایید.
- یک web server مانند Apache، روی کامپیوترتان نصب کنید و سپس PHP و MYSQL را نصب نمایید.
- می توانید از پکیج هایی مانند Xampp یا Wamp استفاده نمایید.
1- وب هاستی که PHP را پشتیبانی می کند
اگر سرور شما PHP را پشتیبانی می کند به چیز دیگری نیاز ندارید.
فقط باید یک فایل PHP ایجاد نمایید و آنرا در دایرکتوری وب قرار دهید. سرور بطور اتوماتیک آنرا ترجمه خواهد کرد.
بخاطر اینکه PHP رایگان است و اغلب سرورها آنرا پشتیبانی می کنند نیاز به کامپایل یا نصب ابزار های اضافی ندارید.
به هر حال اگر سرور شما PHP را پشتیبانی نمی کند، باید PHP را نصب نمایید.
2- نصب جداگانه Web Server و PHP و MYSQL
اگر کامپیوترتان، PHP را پشتیبانی نمی کند باید کارهای زیر را انجام دهید:
- نصب وب سرور (Apache)
- نصب PHP
- نصب بک پایگاه داده، مانند MYSQL
در لینک روبرو، آموزش چگونگی نصب PHP به خوبی توضیح داده شده است: http://php.net/manual/en/install.php
دانلود Apache Server:
برای دانلود رایگان Appache از لینک روبرو استفاده کنید: http://httpd.apache.org/download.cgi
دانلود PHP:
برای دانلود رایگان PHP از لینک روبرو استفاده کنید: http://www.php.net/downloads.php
دانلود MySQL :
برای دانلود رایگان MySQL از لینک روبرو استفاده کنید: http://www.mysql.com/downloads
توجه: به جای نصب جداگانه PHP , MySQL, Apache می توانید از پکیج هایی مانند Xampp یا Wamp استفاده نمایید که کار شما را بسیار ساده تر می نمایند، البته در مطلب PHP & IIS چگونگی اجرای فایلهای PHP روی IIS توضیح داده شده است.
3- استفاده از Xampp یا Wamp
همانطور که قبلاً گفته شد برای شروع کار با php نیاز به نصب مفسر آن داریم که پکیج Xampp برای این منظور مناسب می باشد.
مراحل نصب XAMPP:
برای دانلود رایگان XAMPP از لینک روبرو استفاده کنید: http://www.apachefriends.org/en/xampp.html
1- در اولین مرحله، خوش آمدگویی داریم، پس Next را مطابق شکل زیر کلیک کنید.
2- مسیر نصب را مطابق شکل زیر البته به صورت دلخواه مشخص کنید.
3- در صورتی که میخواهید Apache و MySQL به عنوان سرویس های ویندوز نصب بشوند گزینه های Install Apache as Service و Install MySQL as Service را تیک بزنید، در غیر این صورت اگر تیک Install as Service را نزده باشید باید هر بار که ویندوز بالا می آید Apache و MySQL را فعال کنید، یعنی باید دکمه Start کنارشون را در کنترل پانل XAMPP کلیک کنید، در نهایت کلید Install را مطابق شکل زیر کلیک کنید.
نکته1: در صورتیکه IIS روی سیستم شما نصب است و XAMPP را نصب کنید، در نهایت برای اجرای فایل های PHP به مشکل برخواهید خورد، بنابراین باید IIS را Stop کنید.
نکته2:اگر SQL Server روی سیستم شما نصب است باید سرویس Reporting Services Configuration Manager آنرا Stop کنید تا XAMPP به درستی فایلهای PHP را اجرا کند.
در شکل زیر کنترل پنل Xampp را می بینید که می توانید Apache و MySQL را Start یا Stop کنید.
حالا مرورگرتان را باز کنید و در آدرس بار مرورگر localhost یا 127.0.0.1 را تایپ کنید و یا می توانید در شکل بالا دکمه Admin را کلیک کنید اگر همه چیز خوب پیش رفته باشه صفحه زیر را خواهید دید که می توانید زبان صفحات Xampp را انتخاب کنید پس روی English کلیک کنید!
در نهایت صفحه ای مانند شکل زیر نمایش داده می شود.
ایجاد و اجرای یک فایل PHP:
- یک فایل PHP ساده ایجاد کنید، به عنوان مثال در ادیتور NOTEPAD کد زیر را تایپ کنید و با نام hello و با پسوند php ذخیره کنید(hello.php):
<?php
echo "Hello";
?> - فایل ایجاد شده در بالا را در مسیر C:\xampp\htdocs کپی کنید. (مسیر نصب XAMPP خواهد بود)
- در آدرس بار مرورگر، آدرس localhost/hello.php را وارد کنید.
- اگر همه چیز درست پیش رفته باشد، خروجی زیر را خواهید داشت:
Hello
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
اجرای PHP در iis ویندوز
بهترین راهکار برای اجرای PHP در IIS ویندوز
تا قبل از آشنایی با امکانات IIS 7 به نظر می رسید که بهترین جا برای میزبانی یک وب سایت PHP فقط و فقط یک سرور Linux می تواند باشد، چون IIS 6 خیلی خوب PHP را اجرا نمی کند و خبری از URL rewriting هم در IIS 6 نیست، اما تغییر زاویه حرکت مایکروسافت در جهتِ گرفتن بیشتر سهم بازار باعث شده امکانات جالبی به IIS7 اضافه بشود و امروز می شود گفت ویندوز به خوبی لینوکس می تواند یک وب سایت PHP را میزبانی کند.
سه دلیل اصلی که ویندوز می تواند میزبان خوبی برای PHP باشد:
- اولین و بهترین دلیل این است که، IIS7 خیلی خوب URL rewriting را پشتیبانی می کند، شما به راحتی می توانید از امکان Pretty URLs سایت وردپرسی خودتان در سرور های ویندوز که IIS7 دارن استفاده کنید.
- دلیل دوم هم اینه که مایکروسافت وقت زیادی را صرف کرده تا عملکرد Fast CGI را تا حد ممکن در IIS 7 بهبود بدهد، و کاملاً مشکل Performance پایین PHP در ویندوز حل شده.
- دلیل سوم Module اختصاصی مایکروسافت برای PHP هست که کار Output Caching صفحات PHP رو بسیار آسان می کند و در نتیجه باز هم Performance بهتر…
و حالا یک نکته مهم: تمام Performance خوبی که تا اینجا ازش صحبت شد در گرو خوب Config کردن IIS 7 برای اجرای PHP هست.
در گذشته 2 راه برای اجرای PHP در IIS وجود داشت، یعنی PHP را می شد در دو Mode مختلف روی IIS ویندوز اجرا کرد:
- CGI Application
- ISAPI Managed Handler
اما هر کدام از این دو راه حل، خوبی ها و مشکلات فراوانی را به همراه داشت.
- خوبی CGIاین است که PHP رو خوب اجرا می کند و کمتر Crash اتفاق می افتد، اما از طرفی خیلی مصرف CPU بالایی دارد چون CGI برای اجرای هر کار کوچکی یک Process جدید ایجاد می کند و سیستم باید برای اجرای یک پردازش کوچیک صفحه PHP بهای راه اندازی و بستن یک Process رو پرداخت کند.
سرورهای شلوغ هرگز نمی تونن از CGI برای اجرای PHP استفاده کنند. چون هم Ram به زودی پر می شود و هم CPU از پردازش باز می ماند و نهایتاً کار به Crash کردن ویندوز می کشه.
- اما ISAPIاین مشکل رو حل کرده، PHP در ISAPI Mode به روشی اجرا میشه که ASP و ASP.Net اجرا میشوند، به این صورت که همه صفحات توسط یک Process پرازش میشوند، اما چطوری؟ IIS توسط سرویس word wide web ویندوز همه پردازش ها را انجام می دهد. و برای اینکه بفهمد فایل های مثلا با پسوند php را چه جوری اجرا کند، از یک فایل dll کمک می گیرد. IIS برای اجرای php یا aspx یا asp از dll های مخصوص همون زبان، که بهش Managed Handler میگن، کمک می گیره و با سرویس world wide web ویندوز اجرا می شود.
ISAPI مشکل Performance اجرای PHP رو حل کرده اما مشکلات دیگه ای با خودش همراه داره. از جمله اینکه PHP در حالت ISAPI گاهی Crash می کنه و یه جورایی سایت هایی که با این روش کار می کند اعصاب صاحباشون رو خورد می کنن.
ورود Fast CGI و پایان مشکلات
مشکلات PHP در CGI و ISAPI موجب به وجود آمدن Fast CGI شد. از اسمش هم معلومه که با چه هدفی ایجاد شده. هدف Fast CGI کنار هم آوردن سرعتISAPI و کاراییCGI هست. در واقع روش کار Fast CGI مثل روش کار CGI هست. اما با تفاوتی کوچک اما کلیدی که سرعت بالایی بهش میده.
Fast CGI برای انجام هر پردازشی یک Process جدید ایجاد نمی کنه. بلکه یک Process بعد از ایجاد باز می مونه و تعدادی پردازش رو انجام میده و بعد بسته میشه. همین تغییر کوچک موجب پایین اومدن باور نکردنی مصرف منابع سیستم توسط PHP میشه.
با این حال Config کردن Fast CGI کمی سخت تر از CGI و ISAPI هست. اما بعد از اون مثل بنز کار می کنه.
خوب پس بهترین راه کار برای اجرای PHP در IIS مشخص شد:
1. قبل از همه مطمئن شوید كه CGI روی IISتون نصب هست، این رو میتونید از اینجا چك كنید:
Control Panel -> Programs and Features -> Turn Windows features on or off2. نسخه غیرنصبی PHP رو دانلود كنید و در مسیر دلخواه (مثلاً C:\PHP) كپی كنید.
3. فایل php.ini-recommended رو به php.ini تغییر نام بدید و این تغییرات رو در اون ایجاد كنید:
- كاراكتر سمیکالن ( ;) را از ابتدای خط fastcgi.impersonate = 1 بردارید. (اگر مقدارش یك نیست اون رو به یك تغییر بدید).
- برای خط cgi.fix_pathinfo = 1 هم همون كار رو انجام بدید.
- این بار خط cgi.force_redirect=0 (حتماً مقدارش صفر باشد).
- مقدار خط open_basedir رو برابر با مسیر c:\inetpub\wwwroot قرار بدید.
حالا این فایل رو Save كنید و برای تست صحت نصب در اعلان داس (Command Prompt) دستور C:\PHP>php –info رو اجرا كنید، اگه اطلاعاتی رو در مورد php نشون داد، یعنی كار تا اینجا خوب پیش رفته.
4. نوبت به تنظیمات در IIS میرسه. ابتدا IIS Manager رو اجرا كنید. سرور اصلی رو از لیست Connections سمت چپ انتخاب كنید و از قسمت میانی گزینه Handler Mapping رو دوبار كلیك كنید. این هم عكس:
از ستون سمت راست گزینه Add Module Mapping رو انتخاب كنید و اون رو مثل عكس زیر پر كنید و OK كه یه پنجره دیگه بعدش باز میشه اون رو هم Yes كنید:
6. كار تمومه اما برای تست تو پوشه c:\inetpub\wwwroot یه فایل به نام phpinfo.php بسازید با این محتوا:
<?php
echo 'Hello';
؟>و آن را با این آدرس باز كنید: http://localhost/phpinfo.php
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.
ارتباط به پایگاه داده mysql در PHP
در PHP نسخه 5 به بالا، برای کار با پایگاه داده MySQL می توانید یکی از روش های زیر را استفاده نمایید:
- افزونه MySQLi(کاراکتر i مخفف improved بمعنی بهبود یافته است)
- PDOکه سرنام واژگان PHP Data Objects است
در نسخه های قبلی PHP از افزونه MySQL استفاده می شده، اما استفاده از این افزونه، از 2012 دیگر توصیه نمی شود.
باید از MySQLi استفاده کنم یا PDO ؟
اگر بخواهیم خیلی خلاصه جواب دهیم، این انتخاب بستگی به نیاز شما دارد...!
هر کدام از گزینه های MySQLi و PDO، مزییت های خودشان را دارند.
گزینه PDO با 12 پایگاه داده مختلف کار می کند، اما MySQLi تنها با پایگاه داده MySQL کار خواهد کرد.
بنابراین اگر بخواهید زمانی به یک پایگاه داده دیگر سوییچ کنید، گزینه PDO کار را آسان تر خواهد کرد و فقط کافی است که ارتباط یا connection به پایگاه داده را تغییر دهید و احتمالاً چند تغییر کوچک در کوئری ها را خواهید داشت.
هر دو گزینه شیء گرا هستند، اما MySQLi رویه های API را نیز ارائه می دهد.
هر دو گزینه، دستورات آماده برای مقابله با تزریقات SQL یا SQL injection را پشتیبانی می کنند، که البته این موضوع، برای حفظ امنیت برنامه های کاربردی وب بسیار حیاتی است.
مثال های MySQL به هر دو روش MySQLi و PDO
در این مطلب و آموزش های بعدی، سه روش مختلف برای کار کردن با پایگاه داده را نشان خواهیم داد:
- MySQLi (شیء گرا یا Object-Oriented)
- MySQLi (رویه ای یا Procedural)
- PDO
نصب MySQLi
برای سیستم عامل Linux و Windows، افزونه MySQLi در اغلب موارد بصورت اتوماتیک بعد از نصب پکیج php5 mysql نصب خواهد شد.
برای کسب اطلاعات بیشتر به لینک روبرو مراجع فرمایید: http://php.net/manual/en/mysqli.installation.php
نصب PDO
برای کسب اطلاعات بیشتر به لینک روبرو مراجع فرمایید: http://php.net/manual/en/pdo.installation.php
ارتباط یا Connection به پایگاه داده MySQL
قبل از اینکه به داده های پایگاه داده دسترسی داشته باشید، باید یک ارتباط یا Connection تعریف کنید:
مثال (MySQLi Object-Oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>توجه داشته باشید که در مثال شیء گرای بالا، connect_error$ تا PHP 5.2.9 و 5.3.0 PHP کار نمی کند، بنابراین اگر می خواهید که کدتان با نسخه های قدیمی PHP نیز سازگار باشد، بجای آن از کد زیر استفاده نمایید: // Check connection
if (mysqli_connect_error()) {
die("Database connection failed: " . mysqli_connect_error());
}در مثال زیر با استفاده از تابع ()mysqli_connect یک connection به پایگاه داده تعریف شده است:
مثال (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>مثال(PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>توجه داشته باشید که در مثال PDO بالا، با تنظیم گزینه dbname با مقدار "myDB" نام پایگاه داده را نیز مشخص کرده ایم. اگر PDO موفق به اتصال به پایگاه داده نشود یک استثنا یا exception پرتاب (thrown) می شود. نکته: یکی از بزرگترین مزیت های PDO وجود کلاس exception برای مدیریت خطاها است. همان طور که می دانید این خطاها ممکن است در کوئری های پایگاه داده رخ دهد و اگر یک استثنا یا exception از داخل بلاک { }try پرتاب (thrown) شود، اجرای اسکریبت متوقف شده و جریان کار به اولین بلاک { }catch منتقل می شود. در واقع استثنای که در قسمت try رخ داده در قسمت catch به دام می افتد.
بستن یک ارتباط
ارتباط یا Connection به صورت اتوماتیک وقتی که اسکریبت پایان یافت، بسته می شود، اما اگر مایل باشید می توانید این کار را قبل از پایان اسکریبت انجام دهید:
مثال(MySQLi Object-Oriented)
$conn->close();مثال(MySQLi Procedural)
mysqli_close($conn);مثال(PDO)
$conn = null;برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
ارث بری در PHP
ارث بری یک کلاس از کلاس دیگر
یکی از مزیت های برنامه نویسی شی گرا، ارث بری یا Inheritance می باشد. ارث بری قابلیت توسعه کلاس را به برنامه نویس می دهد که توسط آن براحتی می توان کلاس نوشته شده را update کرد بدون آنکه بخواهیم در تعریف اصلی کلاس تغییری ایجاد نماییم.
با استفاده از کلمه کلیدی extends در جلوی نام کلاس و در ادامه نام کلاس والد، مشخص می کنیم که کلاسمان از کلاس والد خود ارثبری داشته باشد.
کلاس توسعه دهنده یک کلاس، تمام توابع و متغیرهای کلاس اول را شامل می شود.
مثال:
<?php
class a{
function test()
{
echo "Test in class a"."<br />";
}
function show($var)
{
echo "in class a: the varible is $var"."<br />";
}
}class b extends a {
function test()
{
echo "Test in class b"."<br />"; ;
}
}class c extends b {
function test()
{
parent::test();
}
}
class d extends c {
function test()
{
a::test();
}
}$a = new a();
$b = new b();
$c = new c();
$d = new d();
$a->test();
$b->test();
$b->show('Iran');
$c->test();
$d->test();
?>خروجی کد بالا:
Test in class a
Test in class b
in class a: the varible is Iran
Test in class b
Test in class aتوضیح مثال بالا:
- در مثال بالا کلاس a را تعریف کردیم و a را در b توسعه داده و b را در کلاس c و کلاس c را نیز در d توسعه دادیم.
- برای اجرای یک تابع یا یک متغیر در یک کلاس دیگر می توانیم از نام کلاس و :: استفاده نماییم.(نام تابع یا متغیر کلاس والد::نام والد کلاس فعلی)
- توجه به این نکته نیز ضروری است که با استفاده از کلمه parent میتوانیم کلاس توسعه داده شده یا به اصطلاح والد را فراخوانی کنیم.
ارسال ایمیل در PHP
ارسال ایمیل در PHP
در PHP با استفاده از تابع ()mail می توان از داخل یک اسکریپت ایمیل ارسال کرد.
نحوه استفاده:
mail(to,subject,message,headers,parameters)
پارامتر توضیحات to الزامی است، دریافت کننده یا دریافت کنندگان ایمیل را مشخص می کند.
subject الزامی است، موضوع ایمیل را مشخص می کند. توجه داشته باشید که این پارامتر Enter را قبول نمی کند(n\)
message الزامی است، متن ایمیل را مشخص می کند.
headers اختیاری است، headerهای دلخواه مانند From,CC,BCC و غیره را مشخص می کند، هر کدام از این Headerها باید با کاراکتر "n\" یا "r\" از یکدیگر جدا شوند
parameters اختیاری است، یک پارامتر اضافی برای برنامه ارسال ایمیل مشخص می کند.
توجه: برای تغییر تنظیمات پیکربندی ارسال ایمیل می توانید از فایل php.ini استفاده کنید، احتمالاً اگر می خواهید مطالب بیشتری راجع به توابع ارسال ایمیل بدانید از لینک روبرو استفاده کنید:
مثال: در مثال زیر، یک متن ساده را ارسال کرده ایم:
<?php
$to = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید ";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید ";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>فرم ارسال ایمیل
همان طور که می دانید با استفاده از دستور echo می توان هر متغیر یا رشته ای را چاپ کرد، این رشته می تواند تگ های HTML باشد، ایجاد فرم HTMLاز این طریق feedback-form نامیده می شود، به مثال زیر برای ارسال ایمیل توجه کنید:
<html>
<body>
<?php
//اگر تکس باکس ایمیل پرشده باشد،ایمیل ارسال می شود
if (isset($_REQUEST['email']))
{
//ارسال ایمیل
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید ", "$subject",
$message, "From:" . $email);
echo "Thank you for using our mail form";
}
else
//اگر تکس باکس ایمیل پرنشده باشد، فرم ارسال، نمایش داده می شود
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>مثال بالا چه طور کار می کند:
- ابتدا بررسی می کند که آیا فیلد ورودی email پر شده است یا نه
- اگر پرنشده است(مثل وقتی که صفحه تازه دیده می شود) فرم HTML را نمایش می دهد
- اگر پر شده است(بعد از اینکه فرم پر شده) email را ارسال می کند
نکته: این ساده ترین راه برای ارسال email است، اما ایمن نیست. در فصل بعد درمورد آسیب پذیری scriptهای ارسال ایمیل و اینکه چه طور ورودی کاربر را برای ایمن تر کردن آن معتبر کنیم، توضیح داده شده است.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.
استفاده از ajax در PHP
با استفاده از AJAX (آجاکس)، می توانید برنامه ها کاربری خود را تعاملی تر کنید.
مثال AJAX (آجاکس) در PHP
مثال زیر نشان خواهد داد شد که چگونه یک صفحه وب می تواند با یک وب سرور گفتگو کند (ارتباط داشته باشد). تا زمانی که کاربر در کادر ورودی، کلمه ای را تایپ می کند، این ارتباط وجود دارد:
مثال (استفاده از ajax در PHP)
لطفاً نامی را در کادر زیر تایپ نمایید:
نام:
پیشنهادها:
توضیح مثال بالا:
زمانی که کاربر در کادر ورودی بالا، کلمه ای را تایپ کند، تابع "()showHint" اجرا می شود. این تابع زمانی که رویداد "onkeyup" فیلد ورودی رخ دهد، فراخوانی می شود:
<html>
<head>
<script>
function showHint(str)
{
if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","gethint.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<p><b>لطفاً نامی را در کادر زیر تایپ نمایید:</b></p>
<form>
نام: <input type="text" onkeyup="showHint(this.value)">
</form>
<p>پیشنهادها: <span id="txtHint"></span></p>
</body>
</html>توضیح کد Javascript:
اگر فیلد ورودی خالی باشد (str.length==0)، محتوای عنصر با شناسه "txtHint" خالی و از تابع خارج می شود.
اگر فیلد ورودی خالی نباشد، تابع ()showHint کارهای زیر را انجام می دهد:
- شیء XMLHttpRequest ایجاد می شود.
- زمانی که پاسخ سرور آماده باشد، یک تابع ایجاد و اجرا می شود. (وظیفه این تابع این است که پاسخ دریافت شده از سرور را در عنصر با شناسه "txtHint" قرار دهد)
- درخواست یک فایل به سرور ارسال می شود.
- توجه داشته باشید که یک پارامتر (q) به URL اضافه شده است (با محتوای فیلد ورودی تنظیم می شود)
فایل PHP مثال بالا:
فایلی که توسط کد JavaScript بالا صدا زده می شود یک فایل PHP بنام "gethint.php" است.
در فایل "gethint.php"، یک آرایه از نام ها چک می شود، و آنهایی که با پارامتر (q) متناظر است، چاپ می شود: (پاسخ ارسال می شود)
<?php
// Fill up array with names
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";
$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";
// get the q parameter from URL
$q=$_REQUEST["q"]; $hint="";
// lookup all hints from array if $q is different from ""
if ($q !== "")
{ $q=strtolower($q); $len=strlen($q);
foreach($a as $name)
{ if (stristr($q, substr($name,0,$len)))
{ if ($hint==="")
{ $hint=$name; }
else
{ $hint .= ", $name"; }
}
}
}
// Output "no suggestion" if no hint were found
// or output the correct values
echo $hint==="" ? "no suggestion" : $hint;
?>برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
اعتبارسنجی فرم در PHP
در این بیاموز و همچنین بیاموز بعدی، نحوه ی اعتبارسنجی داده های فرم با استفاده از PHP آموزش داده خواهد شد.
اعتبارسنجی فرم در PHP
زمان پردازش فرم های PHP، به امنیت بیاندیشید!
در این بیاموز نحوه ی پردازش فرم های PHP بصورتی که حداقل موارد امنیتی که در ذهن دارید حفظ شود، نشان داده خواهد شد. اعتبار سنجی مناسب اطلاعات فرم، بمنظور جلوگیری از حمله هکرها دارای اهمیت است.
فرم HTMLی که در این بیاموز روی آن کار خواهیم کرد شامل فیلدهای مختلفی است: فیلدهای متنی الزامی و اختیاری، radio button و یک دکمه submit:
در جدول زیر قوانین اعتبارسنجی ذکر شده است:
فیلد قوانین اعتبارسنجی نام الزامی است. فقط باید شامل حروف الفبا و خط فاصله باشد. ایمیل الزامی است. باید شامل فرمت صحیح ایمیل باشد (همراه با علامت @ و .) وب سایت اختیاری است. اگر پر شد، باید شامل فرمت صحیح URL باشد. توضیحات اختیاری است. می تواند شامل چند خط متن باشد (textarea) جنسیت الزامی است. یکی از دو مورد باید انتخاب شود. اجازه دهید تا در ابتدا نگاهی به کد HTMLفرم بیاندازیم.
فیلدهای متنی
برای فیلدهای متنی "نام"، "ایمیل" و "وب سایت" از عنصر متنی <input> و برای فیلد "توضیحات" از عنصر <textarea> استفاه می کنیم:
نام: <input type="text" name="name">
ایمیل: <input type="text" name="email">
وب سایت: <input type="text" name="website">
توضیحات: <textarea name="comment" rows="5" cols="40"></textarea>فیلد "جنسیت"
برای فیلد "جنسیت" از Radio Button استفاده می کنیم: (عنصر <input> از نوع radio)
جنسیت:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Maleعنصر <form>
کد HTML فرم شبیه زیر است:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">زمانی که روی دکمه submit کلیک می شود، اطلاعات با متد "post" به سرور ارسال می شود.
متغییر SERVER_$
متغییر SERVER_$ یکی از متغییرهای عمومی از پیش تعریف شده است (آرایه). "PHP_SELF" نام فایلِ اسکریبت جاری را برمی گرداند.بنابراین زمانی که کاربر روی دکمه submit کلیک می کند، بجای اینکه داده ها به یک فایل متفاوت دیگر ارسال شود به خودش ارسال خواهد شد. در این روش، کاربر خطاها را در همان صفحه ای که فرم وجود دارد مشاهده خواهد کرد.
تابع ()htmlspecialchars
با استفاده از تابع ()htmlspecialchars، می توان کاراکترهای خاص را به HTML entity تبدیل نمود. منظور این است که کاراکترهایی مثل علامت کوچکتر(<) و بزرگتر(>) در پارامتر ورودی را به ;lt$ و ;gt$ تبدیل می کند. با این کار از حمله ی هکرهایی که می خواهند از طریق تزریق HTML یا JavaScript اخلال ایجاد کنند، جلوگیری می شود.یک تذکر مهم درباره امنیت فرم PHP
PHP_SELF می تواند توسط هکرها مورد استفاده قرار گیرد.
یک هکر می تواند در آدرس بار مرورگرش بعد از آدرس فایل، یک اسلش (/) قرار دهد و سپس دستورات XSS را برای اجرا تایپ کند.
XSS یا Cross-site scripting
XSS یک نوع قابلیت آسیب پذیری امنیت کامپوتر است. معمولاً در برنامه های کاربردی web بکار می رود. XSS، هکرها را قادر می سازد تا صفحات وب را از طریق تزریق اسکریبت سمت client هک کنند.دلیل به وجود آمدن این آسیب پذیری عدم اعتبارسنجی ورودیهای کاربر می باشد، و مهاجم می تواند با تزریق اسکریپتهای مخرب در سایت از این آسیب پذیری سو استفاده کند.
فرض کنید، فرم زیر را در یک فایل بنام "test_form.php" داریم:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">حالا اگر یک کاربر در آدرس بار مرورگرش "http://www.example.com/test_form.php" را وارد کند، کد بالا بصورت زیر ترجمه خواهد شد:
<form method="post" action="test_form.php">خوب تا اینجا همه چیز خوب است.
اما درنظر بگیرید که کاربری URL زیر را در آدرس بار وارد کند:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3Eدر این صورت کد بالا بصورت زیر ترجمه خواهد شد:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>دومین URL، باعث اضافه شدن تگ <script> و یک دستور alert در بین کدهای ما شده است. و زمانی که صفحه لود می شود، کد JavaScript اجرا می شود (کاربر یک جعبه پیغام خواهد دید). این فقط یک مثال ساده و بی ضرر است که نحوه هک کردن متغییر PHP_SELF را نشان می دهد.
توجه داشته باشید که هر کد JavaScript دیگری را می توان در تگ <script> قرار داد...! یک هکر می تواند کاربر را به یک فایل دیگر روی سروری دیگر redirect کند، و از طریق آن فایل، اطلاعات کاربر را ذخیره کند.
نحوه مقابله با هک از طریق"PHP_SELF"
با استفاده از تابع ()htmlspecialchars، می توان با هک از طریق "PHP_SELF" مقابله نمود.
کد آن شبیه زیر است:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">تابع ()htmlspecialchars، کاراکترهای خاص را به HTML entity تبدیل می کند. حالا اگر کاربر بخواهد از متغییر "PHP_SELF" سوء استفاده کند، با نتیجه زیر روبرو خواهد شد:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">و از این طریق هیچ آسیبی وارد نخواهد شد...!
اعتبارسنجی داده های فرم با PHP
اولین کاری که باید انجام دهید این است که تمام متغییرها را به تابع ()htmlspecialchars پاس دهیم.
حالا اگر کاربر تلاش کند که متنی مانند زیر را ارسال کند:
<script>location.href('http://www.hacked.com')</script>
در اینصورت اسکریپت بالا اجرا نخواهد شد، چونکه کاراکترهای خاص در متن بالا به HTML entity معادلاشان تبدیل شده اند:
<script>location.href('http://www.hacked.com')</script>
حالا این کد برای نمایش در یک صفحه یا داخل یک ایمیل، امن شده است.
همچنین ما دو کار دیگر را هنگام ارسال داده ها به سرور انجام می دهیم:
- با استفاده از تابع ()trim کاراکترهای غیرضروری (مثل: فاصله های اضافی، tab و خطوط خالی) را حذف می کنیم.
- با استفاده از تابع ()stripslashes، بک اسلش ها (\) را حذف می کنیم
گام بعدی، ایجاد یک تابع، برای انجام تمام کارهای بالاست (بجای اینکه کدهای مربوط به این قسمت را بارها و بارها بنویسیم، مناسب تر است که از یک تابع استفاده کنیم)
ما این تابع را ()test_input می نامیم.
حالا ما می توانیم به ازای هر متغییر POST_$ مقدار آنرا با تابع ()test_input چک کنیم و کد آن شبیه زیر است:
مثال (اعتبارسنجی فرم در PHP)
<!DOCTYPE HTML>
<html>
<head>
<style>
span{min-width: 200px;float: right;}
</style>
</head>
<body style="direction:rtl;">
<?php
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>مثال اعتبارسنجی فرم ها در PHP</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<div><span>نام:</span><input type="text" name="name"></div>
<div><span>ایمیل:</span><input type="text" name="email"></div>
<div><span>وب سایت:</span><input type="text" name="website"></div>
<div><span>توضیحات:</span><textarea name="comment" rows="5" cols="40"></textarea>
</div>
<div><span>جنسیت:</span>
<input type="radio" name="gender" value="female">زن
<input type="radio" name="gender" value="male">مرد
</div>
</div><input type="submit" name="submit" value="ارسال اطلاعات"></div>
</form>
<?php
if (isset($name) || isset($email) || isset($gender) || isset($comment) || isset($website))
{
echo "<br /><h2>خروجی کدتان</h2>";
echo "نام :$name";
echo "<br />";
echo "ایمیل: $email";
echo "<br />";
echo "وب سایت: $website";
echo "<br />";
echo "توضیحات: $comment";
echo "<br />";
echo "جنسیت: $gender";
}
?>
</body>
</html>خروجی کد بالا:
مثال اعتبارسنجی فرم ها در PHP
توجه داشته باشید که در ابتدای اسکریپت، با استفاده از متغییر "REQUEST_METHOD" نحوه ارسال داده های فرم را چک می کنیم. اگر نحوه ی ارسال داده های فرم، از طریق متد "POST" است، اطلاعات فرم پردازش خواهد شد وگرنه با یک صفحه خالی روبرو خواهیم شد.
توجه: برای بار اول که کاربر درخواست مشاهده فایل مثال بالا را به سرور ارسال می کند، بدلیل اینکه متد پیش فرض برای مشاهده صفحات از نوع get است، بنابراین شرط "$_SERVER["REQUEST_METHOD"] == "POST درست نخواهد بود و دستورات داخل شرط اجرا نخواهد شد. اما بعد از اینکه کاربر اطلاعات فرم را پر کرده و روی دکمه ارسال (submit) کلیک کرد، چون ویژگی method فرم را با مقدار "post" تنظیم کرده ایم، شرط ذکر شده درست خواهد بود و دستورات داخل آن اجرا خواهد شد.
اما در مثال بالا، تمام فیلدهای ورودی اختیاری است. حتی اگر کاربر هیچ کدام از فیلدها را پر نکند، اسکریپت بالا باز هم کار خواهد کرد.
در بیاموز بعدی برای فیلدهای الزامی، یک پیغام مناسب نمایش خواهیم داد.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
اعتبارسنجی فیلد ایمیل در PHP
در این آموزش، نحوه ی اعتبارسنجی فیلدهای "نام"، "ایمیل" و "وب سایت" نشان داده خواهد شد.
اعتبارسنجی فیلد "نام" در PHP
کد زیر، یک روش ساده برای چک کردن اینکه آیا فیلد "نام" معتبر است یا نه را نشان می دهد. (فیلد نام فقط شامل حروف و خط فاصله است)
اگر فیلد "نام" معتبر نباشد، در متغیر nameErr$ یک متن مناسب، تنظیم می شود:
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name))
{
$nameErr = "فیلد نام فقط شامل حروف و خط فاصله است";
}تابع ()preg_match
با استفاده از تابع ()preg_match، می توانید یک الگوی خاص را در یک رشته جستجو کنید. اگر الگوی مورد نظر در رشته وجود داشت مقدار true و اگر وجود نداشت مقدار false را برمی گرداند.اعتبارسنجی فیلد "ایمیل" در PHP
روش اول: استفاده از تابع ()preg_match
کد زیر، یک روش ساده برای چک کردن اینکه آیا فیلد "ایمیل" معتبر است یا نه را نشان می دهد. (باید شامل فرمت صحیح ایمیل باشد، همراه با علامت @ و .)
اگر فیلد "ایمیل" معتبر نباشد، در متغیر emailErr$ یک متن مناسب، تنظیم می شود:
$email = test_input($_POST["email"]);
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
{
$emailErr = "فرمت فیلد ایمیل صحیح نیست";
}روش دوم: استفاده از تابع ()filter_var
یکی دیگر از روش های چک کردن اعتبار ایمیل، استفاده از تابع ()filter_var در PHP است. برای کسب اطلاعات بیشتر درباره تابع ()filter_var به لینک آموزش PHP-فیلتر ورودی ها مراجعه نمایید.
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr ="فرمت فیلد ایمیل صحیح نیست";
}در این آموزش، از روش اول یعنی تابع ()preg_match استفاده شده است.
اعتبارسنجی فیلد "وب سایت" در PHP
کد زیر، یک روش ساده برای چک کردن اینکه آیا فیلد "وب سایت" معتبر است یا نه را نشان می دهد. (باید شامل فرمت صحیح URL باشد، همچنین عبارت منظم زیر اجازه می دهد که در URL علامت dash "-" نیز استفاده شود)
اگر فیلد "وب سایت" معتبر نباشد، در متغیر websiteErr$ یک متن مناسب، تنظیم می شود:
$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
{
$websiteErr = "فرمت فیلد وب سایت صحیح نیست";
}اعتبارسنجی فیلدهای "نام"، "ایمیل" و "وب سایت" در PHP
تا اینجا، اسکریپت مان شبیه زیر شده است:
مثال (اعتبارسنجی فیلد ایمیل در PHP)
<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
span{min-width: 200px;float: right;}
</style>
</head>
<body>
<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
if (empty($_POST["name"]))
{$nameErr = "Name is required";}
else
{
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name))
{
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["email"]))
{$emailErr = "Email is required";}
else
{
$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
{
$emailErr = "Invalid email format";
}
}
if (empty($_POST["website"]))
{$website = "";}
else
{
$website = test_input($_POST["website"]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
{
$websiteErr = "Invalid URL";
}
}
if (empty($_POST["comment"]))
{$comment = "";}
else
{$comment = test_input($_POST["comment"]);}
if (empty($_POST["gender"]) || $_GET["gender"]=="undefined")
{$genderErr = "Gender is required";}
else
{$gender = test_input($_POST["gender"]);}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>مثال اعتبارسنجی فرم ها در PHP</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<div>
<span>نام:</span><input type="text" name="name">
<span class="error">*</span>
</div>
<div>
<span>ایمیل:</span><input type="text" name="email">
<span class="error">*</span>
</div>
<div>
<span>وب سایت:</span><input type="text" name="website">
<span class="error"></span>
</div>
<div>
<span>توضیحات:</span><textarea name="comment" rows="5" cols="40"></textarea>
<span class="error">*</span>
</div>
<div>
<span>جنسیت:</span>
<input type="radio" name="gender" value="female">زن
<input type="radio" name="gender" value="male">مرد
</div>
</div><input type="submit" name="submit" value="ارسال اطلاعات"></div>
</form>
<?php
if ($nameErr!="" || $emailErr!="" || $genderErr!="" || $websiteErr!="")
echo "<span style='color:red' >
$nameErr <br /> $emailErr <br /> $genderErr <br /> $websiteErr
</span>";
else
{
echo "<br /><h2>خروجی کدتان</h2>";
echo "نام :$name";
echo "<br />";
echo "ایمیل: $email";
echo "<br />";
echo "وب سایت: $website";
echo "<br />";
echo "توضیحات: $comment";
echo "<br />";
echo "جنسیت: $gender";
?>
}
</body>
</html>خروجی کد بالا:
مثال اعتبارسنجی فرم ها در PHP
در آموزش بعدی نحوه ی جلوگیری از خالی شدن فیلدهای فرم، زمانی که کاربر روی دکمه submit کلیک می کند را نشان خواهیم داد.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
امنیت در کد ارسال ایمیل
امنیت در کد ارسال ایمیل
یک ضعف در اسکریپت e-mail فصل قبل وجود دارد. ابتدا، به کد آن نگاهی می اندازیم:
<html>
<body>
<?php
//اگر تکست باکس ایمیل پرشده باشد،ایمیل ارسال می شود
if (isset($_REQUEST['email']))
{
//ارسال ایمیل
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید ", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
else
//اگر تکست باکس ایمیل پرنشده باشد، فرم ارسال، نمایش داده می شود
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>مشکل کد بالا این است که کاربران غیرمجاز می توانند از طریق فرم ورودی، درون header نامه، داده درج کنند.
توضیح بیشتر: چه اتفاقی خواهد افتاد اگر کاربر متن زیر را در فیلد ورودی email در فرم اضافه کند؟
این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید %0ACc:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
%0ABcc:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید ,این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید ,این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید ,این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
%0ABTo:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید تابع ()mail طبق معمول متن بالا را درون header نامه قرار می دهد و اکنون header فیلدهای اضافی cc و Bcc و to را دارد. وقتی که کاربر بر روی دکمه submit کلیک می کند ٫email به تمام آدرس های بالا ارسال خواهد شد!
متوقف کردن تزریقات E-mail در php
بهترین راه برای متوقف کردن تزریقات email، معتبر کردن ورودی است.
کد زیر مانند کد فصل قبل است، اما حالا ما یک معتبرساز وروردی که فیلد email را در فرم چک می کند اضافه کرده ایم:
<html>
<body>
<?php
function spamcheck($field)
{
$field=filter_var($field, FILTER_SANITIZE_EMAIL);
if(filter_var($field, FILTER_VALIDATE_EMAIL))
{
return TRUE;
}
else
{
return FALSE;
}
}
//اگر تکست باکس ایمیل پرشده باشد،ایمیل ارسال می شود
if (isset($_REQUEST['email']))
{
//چک می کنیم که آدرس ایمیل معتبر است یا نه
$mailcheck = spamcheck($_REQUEST['email']);
if ($mailcheck==FALSE)
{
echo "Invalid input";
}
else
//ارسال ایمیل
{
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید ", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
}
else
//اگر تکست باکس ایمیل پرنشده باشد، فرم ارسال، نمایش داده می شود
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>در کد بالا ما از فیلترهای php زیر، برای معتبرسازی ورودی استفاده کرده ایم:
- فیلتر FILTER_SANITIZE_EMAIL: تمام کاراکترهای غیرمجاز ایمیل را از رشته حذف می کند.
- فیلتر FILTER_VALIDATE_EMAIL: آدرس ایمیل را معتبر می کند.
برای اطلاعات بیشتر درمورد فیلتر های PHP می توانید به بخش PHP Filter مراجعه کنید.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.
انواع داده ها در PHP
رشته ها، اعداد صحیح، اعداد با ممیز شناور، بولین، آرایه ها، اشیاء، تهی (NULL)
رشته ها در PHP
رشته، یک توالی از کاراکترهاست، مانند "!Hello world"
هر متنی داخل کوتیشن، می تواند رشته باشد. می توانید از کوتیشن (') یا دابل کوتیشن (") استفاده کنید:
مثال (انواع داده ها در PHP)
<?php
$x = "Hello world!";
echo $x;
echo "<br>";
$x = 'Hello world!';
echo $x;
?>خروجی کد بالا:
Hello world!
Hello world!اعداد صحیح در PHP
اعداد بدون ممیز، صحیح هستند.
قوانین اعداد صحیح:
- یک عدد صحیح، حداقل باید یک رقم داشته باشد.
- یک عدد صحیح، نمی تواند شامل کاما یا فاصله باشد.
- یک عدد صحیح، نباید ممیز داشته باشد.
- یک عدد صحیح، می تواند منفی یا مثبت باشد.
- یک عدد صحیح، می تواند در سه فرمت مشخص شود: decimal (بر مبنای 10)، hexadecimal (بر مبنای 16 - با پیشوند 0x) و octal (بر مبنای 8 - با پیشوند 0)
در مثال زیر، فرمت های مختلف اعداد صحیح نشان داده شده است. با استفاده از تابع ()var_dump، می توانید مقدار و نوع متغیر را مشخص نمایید:
مثال (انواع داده ها در PHP)
<?php
$x = 5985;
var_dump($x);
echo "<br>";
$x = -345; // negative number
var_dump($x);
echo "<br>";
$x = 0x8C; // hexadecimal number
var_dump($x);
echo "<br>";
$x = 047; // octal number
var_dump($x);
?>خروجی کد بالا:
int(5985)
int(-345)
int(140)
int(39)اعداد با ممیز شناور در PHP
اعداد با ممیز شناور، اعدادی هستند که شامل یک ممیز هستند یا اعدادی که در قالب نماد ریاضی نشان داده می شوند.
در مثال زیر، اعداد اعشاری در فرمت های مختلف، نشان داده شده است. با استفاده از تابع ()var_dump، می توانید مقدار و نوع متغیر را مشخص نمایید:
مثال (انواع داده ها در PHP)
<?php
$x = 10.365;
var_dump($x);
echo "<br>";
$x = 2.4e3;
var_dump($x);
echo "<br>";
$x = 8E-5;
var_dump($x);
?>خروجی کد بالا:
float(10.365)
float(2400)
float(8.0E-5)داده های Boolean در PHP
مقدار داده های Boolean می تواند TRUE یا FALSE باشد.
$x=true;
$y=false;داده ی Boolean، معمولاً در تست مشروط استفاده می شود. در بیاموزهای بعدی درباره ی تست مشروط بیشتر خواهید آموخت.
آرایه ها در PHP
آرایه ها انواع خاصی از متغیرها به حساب می آیند که می توانند چندین داده را در قالب یک نام ذخیره کنند.
در مثال زیر، ابتدا یک آرایه ایجاد شده و سپس با استفاده از تابع ()var_dump، مقدار و نوع هر سلول آرایه مشخص شده است:
مثال (انواع داده ها در PHP)
<?php
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>خروجی کد بالا:
array(3) { [0]=> string(5) "Volvo" [1]=> string(3) "BMW" [2]=> string(6) "Toyota" }درباره آرایه ها در بیاموزهای بعدی توضیحات بیشتری را خواهید دید.
اشیاء (object) در PHP
یک شیء نوع داده ای است که هم داده ها و هم اطلاعات مربوط به نحوه پردازش آنها را ذخیره می کند.
یک شیء در PHP، باید بطور صریح اعلان شود.
ابتدا باید کلاس شیء اعلان شود، برای این کار، از کلمه کلیدی class استفاده نمایید. یک کلاس، ساختاری است که می تواند شامل چندین property و method باشد.
برای دسترسی به property و methodهای یک کلاس، باید از آن کلاس یک نمونه بسازید:
مثال (انواع داده ها در PHP)
<?php
class My_class
{
public $name="Amir";
function SayHello()
{
print "Hello My Name is $this->name";
}
}
$obj=new My_Class();
$obj->SayHello();
?>خروجی کد بالا:
Hello My Name is Amirدر بیاموزهای بعدی، درباره ی اشیاء بیشتر توضیح داده خواهد شد.
مقدار NULL در PHP
با استفاده از مقدار NULL، می توان نشان داد که یک متغیر مقدار ندارد. NULL تنهامقدار ممکن از نوع داده NULL است.
مقدار NULL، خالی یا پر بودن یک متغیر را نشان می دهد. همچنین بهتر است بدانید که در پایگاه داده بین NULL و رشته خالی تفاوت وجود دارد.
می توان متغیرها را با تنظیم مقدار NULL خالی کرد:
مثال (انواع داده ها در PHP)
<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>خروجی کد بالا:
NULLبرای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
ایجاد پایگاه داده در PHP
پایگاه داده شامل یک یا جند جدول است.
باید بدانید که برای ایجاد یا حذف پایگاه داده، باید دسترسی لازم را داشته باشید.
ایجاد پایگاه داده با استفاده از MySQLi و PDO
دستور CREATE DATABASE برای ایجاد یک پایگاه داده در MySQL استفاده می شود.
نحوه استفاده:
CREATE DATABASE database_name
در مثال زیر یک پایگاه داده به نام "myDB" ایجاد کرده ایم:
مثال (MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Create database
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
echo "Database created successfully";
} else {
echo "Error creating database: " . $conn->error;
}
$conn->close();
?>توجه: زمانی که می خواهید یک پایگاه داده جدید ایجاد کنید، در شیء mysqli تنها سه آرگومان اول را باید مشخص نمایید. (servername و username و password)
نکته: اگر برای اتصال به پایگاه داده باید از یک Port مشخص استفاده نمایید، برای تنظیم این آرگومان در شیء mysqli باید آرگومان چهارم یعنی database-name را با یک رشته خالی تنظیم نمایید و سپس آرگومان پنجم را برای تنظیم Port استفاده نمایید:mysqli("localhost", "username", "password", "", port)
مثال (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Create database
$sql = "CREATE DATABASE myDB";
if (mysqli_query($conn, $sql)) {
echo "Database created successfully";
} else {
echo "Error creating database: " . mysqli_error($conn);
}
mysqli_close($conn);
?>در مثال زیر یک پایگاه داده به نام "myDBPDO" ایجاد کرده ایم:
مثال(PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE DATABASE myDBPDO";
// use exec() because no results are returned
$conn->exec($sql);
echo "Database created successfully<br>";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>نکته: یکی از بزرگترین مزیت های PDO وجود کلاس exceptionبرای مدیریت خطاها است. همان طور که می دانید این خطاها ممکن است در کوئری های پایگاه داده رخ دهد و اگر یک استثنا یا exceptionاز داخل بلاک { }try پرتاب (thrown) شود، اجرای اسکریبت متوقف شده و جریان کار به اولین بلاک { }catch منتقل می شود. در واقع استثنای که در قسمت try رخ داده در قسمت catch به دام می افتد. در بلاک catch، با استفاده از دستور echo، دستور SQL و متن خطای تولید شده را چاپ می کنیم.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
ایجاد سربرگ فروشگاه
جلسه اول بسته آموزشی طراحی یک فروشگاه اینترنتی-ایجاد سربرگ فروشگاه
در قسمت اول از این بسته، به آموزش 'ایجاد سربرگ فروشگاه' و همچنین نحوه ی ساخت پروژه از صفر، می پردازیم.
طرح اولیه ی وب سایت
طرح اولیه ی وب سایتی که قرار است آن را در مجموعه ی آموزشی 'ایجاد یک فروشگاه اینترنتی' ایجاد کنیم به صورت زیر می باشد:
قابلیت های وب سایت
قابلیت های این وب سایت شامل موارد زیر می باشد:
- قسمت منوی باز شونده
- قسمت سبد خرید
- قسمت ورود کاربران
- قسمت ثبت نام در سایت
- قسمت اسلاید شو و...
مباحث برنامه نویسی مطرح شده در پروژه ی 'ایجاد یک فروشگاه اینترنتی'
در مجموعه ی آموزشی 'ایجاد یک فروشگاه اینترنتی' قصد داریم که از مباحث مختلف طراحی سایت از قبیل HTML و CSS و PHP و AJAX و JQUERY استفاده کنیم. در این مجموعه حتی مباحث آشنایی با فتوشاپ نیز در حد لازم برای طراحان وب، گنجانده شده است.
مباحث برنامه نویسی مطرح شده درقسمت 'ایجاد سربرگ فروشگاه'
در قسمت 'ایجاد سربرگ فروشگاه' صرفاً به کدنویسی HTML این قالب می پردازیم و در مراحل بعدی، بعد از اینکه کد نویسی های HTML و همچنین کدنویسی های جاوا اسکریپت و جی کوئری تمام شدند، سایت را به یک سایت پویا و داینامیک تبدیل خواهیم کرد. به عبارت دیگر، برای این سایت، یک پنل مدیریتی طراحی خواهیم کرد، که قابلیت اضافه و یا حذف کردن و یا کنترل مطالب را برای مدیریت این سایت فراهم می کند.
شروع طراحی قالب
در ابتدای طراحی قالب، قصد داریم یک خط را به رنگ بنفش، در بالای سایت، همان طور که در تصویر زیر می بینید ایجاد کنیم:
برای طراحی این سایت، ما از نرم فزار Dreamweaver استفاده می کنیم، پس بعد از نصب این نرم افزار آن را باز کنید. سپس از منوی 'site' گزینه ی 'new site' را انتخاب کنید:
بدین وسیله می توانیم یک سایت جدید را ایجاد کنیم.
در جعبه ی گفتگوی باز شده، مقدار sitename را برابر با eshop قرار می دهیم و سپس در فیلد بعدی، مسیر سایت را درون پوشه ی ریشه ی خود(root) مشخص می کنیم:
پس از انجام مراحل بالا، بر روی گزینه ی 'save' کلیک کنید.
سپس مراحل زیر را انجام دهید:
- از جعبه ی سمت راست، در زیر قسمت 'local files'، بر روی پوشه ی ایجاد شده راست-کلیک کنید.
- گزینه ی 'new file' را انتخاب کنید.
- نام فایل ایجاد شده را 'index.php' قرار دهید.
همان طور که ذکر شد، فایل مورد نظر را با پسوند php ایجاد کردیم. به این دلیل که سایت مورد نظر قرار است به صورت یک سایت داینامیک باشد. به طوری که دارای یک پنل مدیریت باشد تا مدیر سایت بتواند مطالب سایت را کنترل کند. و همچنین بتوانیم اطلاعات را از Database بخوانیم و یا اطلاعات را در آن ذخیره کنیم.
توجه کنید که، نام این فایل را index قرار دادیم، زیرا صفحه ی پیش فرضی که، تمام مرورگرها آن را باز می کنند، صفحه ی index می باشد. و در ادامه این فایل را باز می کنیم و شروع به نوشتن کدهای مورد نظر می کنیم...
در ادامه ی آموزش 'ایجاد سربرگ فروشگاه' خواهید دید...!
با خرید بسته ی آموزشی "ایجاد سربرگ فروشگاه" موارد زیر را خواهید دید:
- نحوه ی وسط قرار دادن عناصر div با استفاده از دستور margin
- نحوه ی ایجاد قسمت بالایی منو با استفاده از HTML و CSS
- نحوه ی اضافه کردن لوگو به بالای سایت و تراز کردن آن
- نحوه ی استفاده از دستور float در شناور کردن عناصر
دسترسی به موارد آموزشی بالا در بسته خریداری شده
- شماره جلسه: 1
- نام فایل ویدئو: 01
- فرمت فایل: mp4.
نقطه ی شروع بحث بالا (ایجاد سربرگ فروشگاه) در ویدئو: 00:20