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

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

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

<?php
session_start();
// Do Something
?>

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

<?php
session_start();
// Store Session Data
$_SESSION['login_user']= $username;  // Initializing Session with value of PHP Variable

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

<?php
session_start();
// Store Session Data
$_SESSION['login_user']= $username;  // Initializing Session with value of PHP Variable
echo $_SESSION['login_user'];

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

<?php
session_destroy(); // Is Used To Destroy All Sessions
//Or
if(isset($_SESSION['id']))
unset($_SESSION['id']);  //Is Used To Destroy Specified Session

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

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

فایل index.php

کد این فایل در واقع بیشتر HTML است و شامل یک فرم برای ورود اطلاعات کاربر است. این فرم دارای دو فیلد با نام username و password و یک دکمه به نام submit است. فیلد اول برای نام کاربری و فیلد دوم برای رمز عبور است. در ادامه کد این فایل را مشاهده می‌کنید:

<?php
include('login.php'); // Includes Login Script

if(isset($_SESSION['login_user'])){
header("location: profile.php");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Login Form in PHP with Session</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="main">
<h1>PHP Login - pardiswp</h1>
<div id="login">
<h2>Login Form</h2>
<form action="" method="post">
<label>UserName :</label>
<input id="name" name="username" placeholder="username" type="text">
<label>Password :</label>
<input id="password" name="password" placeholder="**********" type="password">
<input name="submit" type="submit" value=" Login ">
<span><?php echo $error; ?></span>
</form>
</div>
</div>
</body>
</html>

همانطور که در کد بالا مشاهده می‌کنید ابتدا با دستور include فایل login.php که در مرحله‌ی بعد آن را می‌سازیم به صفحه‌ی index.php اضافه شده است. سپس با دستور شرطی if بررسی می‌کنیم که آیا سشنی به نام login_user قبلا ست شده یا خیر. اگر مقدار این سشن خالی نباشد با دستور header، کاربر را به صفحه‌ای به نام profile.php منتقل می‌کنیم. در غیر این صورت کد اچ‌تی‌ام‌ال که در ادامه‌ی فایل نوشته شده اجرا خواهد شد و فرم ورود به کاربر نمایش داده می‌شود. دقت کنید که خاصیت action این فرم login.php است و این یعنی اطلاعات فرم یاد شده به فایلی به نام login.php ارسال خواهند شد.

در کد بالا خط echo $error باعث می‌شود تا مقدار متغیر error$ که در فایل login.php مقدار دهی می‌شود چاپ شود.

فایل login.php

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

<?php
session_start(); // Starting Session
$error=''; // Variable To Store Error Message
if (isset($_POST['submit'])) {
if (empty($_POST['username']) || empty($_POST['password'])) {
$error = "Username or Password is invalid";
}
else
{
// Define $username and $password
$username=$_POST['username'];
$password=$_POST['password'];
// Establishing Connection with Server by passing server_name, user_id and password as a parameter
$connection = mysql_connect("localhost", "root", "");
// To protect MySQL injection for Security purpose
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
// Selecting Database
$db = mysql_select_db("company", $connection);
// SQL query to fetch information of registerd users and finds user match.
$query = mysql_query("select * from login where password='$password' AND username='$username'", $connection);
$rows = mysql_num_rows($query);
if ($rows == 1) {
$_SESSION['login_user']=$username; // Initializing Session
header("location: profile.php"); // Redirecting To Other Page
} else {
$error = "Username or Password is invalid";
}
mysql_close($connection); // Closing Connection
}
}
?>

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

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

در خط بعدی با استفاده از دستور isset همانطور که در بخش فرم‌ها به شما آموزش داده بودیم بررسی می‌کنیم که آیا کاربر اطلاعات مورد نیاز را وارد کرده یا خیر. اگر فیلد‌های نام کاربری و رمزعبور خالی باشند، مقدار متغیر error برابر با Username or Password is invalid خواهد شد. در غیر این صورت ادامه‌ی کد یعنی کدهای بعد از else اجرا خواهند شد. حال اگر کاربر نام کاربری و رمزعبور را وارد کرده باشد، مقادیر وارد شده توسط وی در دو متغیر به نام username و password ذخیره می‌شوند.

در جلسه ی بعد به بانک اطلاعاتی‌ که اطلاعات کاربران در آن ذخیره شده می پردازیم.

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

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

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

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

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

$name = $mohammad->name;

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

<?php include("class_lib.php"); ?>		
<?php 
	$mohammad = new person();		
	$reza = new person();
 
	$mojtaba->set_name("mohammad safari");
	$reza->set_name("reza safari");	
 
	// دسترسی مستقیم به مقدار یک پروپرتی در کلاس که پیشنهاد نمی شود
	echo "mohammad's full name: ".$mohammad->name;
?>

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

سازنده ها (constructor)

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

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

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

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

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

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

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

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

$mohammad = new person("mohammad safari");

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

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

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

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

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

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

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

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

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

<?php 		
	class person {		
	var $name;		
		public $height;		
		protected $social_insurance;
		private $pinn_number;
 
		function __construct($persons_name) {		
			$this->name = $persons_name;		
		}		
 
		function set_name($new_name) {   	
			$this->name = $new_name;
		}	
 
		function get_name() {
			return $this->name;
		}		
 
	}
?>

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

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

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

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

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

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

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

<?php include("class_lib.php"); ?>
<?php  
	$stefan = new person("Stefan Mischook");   
	echo "Stefan's full name: " .  $stefan->get_name() ;  
 
	/*  
	Since $pinn_number was declared private, this line of code 
	will generate an error. Try it out!   
	*/  
 
	echo "Tell me private stuff: ".$stefan->pinn_number;  
?>

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

'Fatal error: Cannot access private property person::$pinn_number in ...'

مرحله هفدهم:

محدود کردن دسترسی به متدها

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

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

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

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

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

<?php 
	class person {  
		var $name;  
 
		public $height;  
		protected $social_insurance;  
		private $pinn_number;
 
		function __construct($persons_name){   
		   $this->name = $persons_name;  
		}       
 
		private function get_pinn_number(){
			return
			$this->pinn_number;  
		}       
	}   
?>

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

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

کار با رشته ها در php

تابع ()strpos

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

$numberedString = "123456789"; // 9 numbers from 1 to 9

$fivePos = strpos($numberedString, "5");
echo $fivePos;

خروجی مثال فوق عدد 4 است که در متغییر fivepos قرار می گیرد.

تابع ()str_replace

کارکرد این تابع مانند دستور replace در نرم افزار های واژه پرداز مانند ورد است. با استفاده از این تابع می توانیم مواردی را در رشته های متنی جایگذاری کنیم. پارامترهای ورودی این تابع 3 مورد هستند:

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

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

<?php
//string that needs to be customized
$first= "Welcome to pardiswp";

$sec= str_replace("pardiswp", "@mxsafari", $first);

echo $sec;
?>

در خروجی کد فوق کلمه pardiswp با mxsafari@ در رشته ورودی جاگزین می شود.

تابع ()trim

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

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

نتیجه رشته‌ متنی بدون فاصله‌های اضافه اول و آخر آن خواهد بود.

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

تابع ()md5

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

<?php
//string that needs to encrypted
$str = "pardiswp";
$finalStr = md5($str);
echo $finalStr;
?>

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

تابع ()str_word_count

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

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

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

<?php
$str = "pardiswp website";
$finalStr = str_word_count($str);
echo $finalStr;
?>

نتیجه اجرای کد فوق عدد ۲ خواهد بود.

تابع ()strlen

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

<?php
$str = "pardiswp website";
$finalStr = strlen($str);
echo $finalStr;
?>

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

تابع ()substr

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

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

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

<!DOCTYPE html>

<html>

<body>

<?php

// Positive numbers:

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

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

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

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

echo "<br>";

// Negative numbers:

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

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

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

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

?>

</body>

</html>

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

d

ello world

lo world

orld

d

ello world

lo world

orld

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

آموزش کامل PHP – قسمت 23: حلقه foreach و خواندن فایل ها

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

حلقه foreach

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

foreach (array as $value){

    //code to run

}

//or

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

    //code to run

}

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

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

<?php

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

foreach ($AllNames as $name)

{

    echo $name . "<br>";

}

?>

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

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

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

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

<?php

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

foreach($read as $name)

{

    echo $name . " - "; 

}

?>

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

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

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

$count = count($count);

$i = 1;

foreach ($read as $line)

{
    echo $line;

        if($i < $count){

            echo " - ";

        }

        $i++;

}

?>

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

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

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

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

کار کردن با فایل ها در php

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

تابع fopen

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

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

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

برای شروع ابتدا نرم افزار سرور مجازی خود را استارت کنید (ومپ یا زمپ). در پوشه اصلی آن (www در ومپ و htdocs در زمپ) یک پوشه جدید به نام files ایجاد کنید. سپس در این پوشه یک فایل جدید به نام testfile.php ایجاد کرده و کد های زیر را در آن قرار دهید:

<?php

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

?>

بعد از اجرای کد فوق یک فایل جدید به نام file.text در پوشه ای که فایل 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 = "milad\n";

fwrite($myfile, $name2);

$name3 = "masoud\n";

fwrite($myfile, $name3);

fclose($myfile);

?>

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

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

همانطور که گفتیم تابع ()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 باز کنید، اطلاعات جدید در آخر فایل اضافه خواهند شد.

حال قصد داریم یک مثال کاربردی‌تر را ایجاد کنیم. در پوشه files یک فایل به نام 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>

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

همچنین به خط:

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

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

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

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

کوکی ها در php

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

تفاوت session و cookie

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

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

<?php

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

?>

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

توضیح ورودی های تابع:

  • name: نام کوکی جدید که قصد تعریف آن را داریم
  • value: مقداری که می خواهیم در کوکی مورد نظرمان ذخیره شود
  • expire: مدت زمانی که کوکی پس از آن متقضی خواهد شد (بر حسب ثانیه)
  • path: تعیین مسیر ذخیره کوکی در سرور
  • domain: تعیین اینکه کوکی در چه دامینی در دسترس باشد
  • secure: تعیین اینکه آیا کوکی فقط در ارتباطات امن در دسترس باشد یا خیر
  • httponly: اگر این مقدار true باشد کوکی فقط از طریق http در دسترس خواهد بود

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

<?php

$value = "mohammad";

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 – قسمت 12: فرم ها

فرم ها در php

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

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

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

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

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

</form>

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

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

<?php

$user = $_POST ['username'];

echo "your name is:" . $user;

<?

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

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

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

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

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

آموزش کامل PHP – قسمت یازدهم: متغیرهای پیش فرض

متغیرهای پیش فرض

در قسمت های قبلی آموزش php گفتیم که در نام گذاری ها نباید از نام های رزرو شده استفاده کنیم. برخی از نام های رزرو همان متغیرهای پیش فرض php هستند. با دانستن نام این متغیر ها و استفاده از آن ها به امکانات خوبی در برنامه نویسی دسترسی خواهیم داشت. در زیر به یکی از این متغیرها اشاره شده:

متغیر SERVER_$

این متغیر در واقع یک آرایه از داده‌ها است که در آن اطلاعاتی از قبیل هدرها (Headers)، مسیرها (Paths) و … وجود دارد. همانطور که در بخش آرایه‌ها توضیح دادیم برای دسترسی به هر عضو یک آرایه باید نام آن عضو را در مقابل نام آرایه به‌کار ببرید. در مورد آرایه SERVER_$ باید از کدی شبیه به کد زیر استفاده کنید:

<?php

echo $_SERVER ['SCRIPT_NAME'];

?>

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

<?php

echo $_SERVER ['HTTP_HOST'];

<?

کد فوق هدر هاست کنونی را به شما نشان می دهد. مثلا در سرور محلی 127.0.0.1 را نشان می دهد.

 شاید این پرسش برای شما به وجود بیاید که این کدها چه کاربردی می تواند داشته باشد. فرض کنید تصاویر زیادی روی سرور شما وجود دارد و شما تصمیم می گیرید که مسیر آن ها را روی سرور تغییر بدهید. در این صورت باید هر جا که از آن تصاویر استفاده کرده اید آن ها را تغییر بدهید که این کار بسیار وقت گیر است. برای این کار کافی است تا یک فایل config.php ساخته و کد زیر را در آن قرار دهید.

<?php

$host = $_SERVER ['HTTP_HOST'];

$image_path = $host . '/images/';

<?

 در کد فوق ابتدا هدر هاست را در متغیر جدیدی به نام host قرار داده ایم، سپس مسیر جدیدی را با ترکیب متغیر host در متغیری به نام image_path به وجود آورده ایم. مسیر جدید پوشه ای به نام images است.

نکته: اگر دقت کرده باشید بین متغیر host و مسیر ‘/images/’ از یک نقطه استفاده کرده ایم. در پی‌اچ‌پی برای اتصال رشته‌های متنی به یکدیگر و نیز اتصال متغیرها به یکدیگر و همچنین اتصال متغیر‌ها به رشته‌های متنی می‌توانید از نقطه استفاده کنید.

حالا در فایل‌های پروژه خود هر کجا که بخواهیم از عکس‌های جدید استفاده کنیم کافی است ابتدا فایل Config.php که در بالا ایجاد کردیم را به صفحه include یا require اضافه کنیم و سپس از متغیر image_path در هرجا که خواستیم استفاده کنیم. به مثال زیر توجه کنید:

<?php

require ("config.php");

echo '<img src= '. $image_path . header.jpg'>';

<?

در جدول زیر لیست سایر اعضای آرایه SERVER_$ را که می توانید از آن ها استفاده کنید آورده ایم.

جدول اعضای آرایه SERVER_$ در PHP
نام فایل کنونی که در سرور اجرا شده را بر می‌گرداند $_SERVER[‘PHP_SELF’]
آدرس آی‌پی سرور کنونی را بر می‌گرداند $_SERVER[‘SERVER_ADDR’]
نام سرور کنونی را بر می‌گرداند $_SERVER[‘SERVER_NAME’]
هدر هاست کنونی را بر می‌گرداند $_SERVER[‘HTTP_HOST’]
آی‌پی سروری قبلی‌ای که کاربر از آن به سایت ما وارد شده را بر می‌گرداند $_SERVER[‘REMOTE_ADDR’]
پورت دستگاهی که کاربر از طریق آن با سرور ارتباط برقرار کرده را بر می‌گرداند $_SERVER[‘REMOTE_PORT’]
نام مسیر دقیق فایلی که فراخوانی شده را بر می‌گرداند $_SERVER[‘SCRIPT_FILENAME’]
پورتی که سرور از آن برای ارتباطات خود استفاده می‌کند را برمی‌گرداند $_SERVER[‘SERVER_PORT’]
نام دقیق فایلی که فراخوانی شده را بر می‌گرداند $_SERVER[‘SCRIPT_NAME’]
آدرس URI $_SERVER[‘REQUEST_URI’]

می توانید تک تک موارد فوق را تمرین کنید و نتیجه آن را در مرورگر خود مشاهده کنید.

آموزش کامل PHP – قسمت دهم: توابع

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

تابع (function)

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

در php دو نوع تابع داریم، یکی توابع پیش فرض که از قبل در برنامه وجود دارد و یکی توابعی که توسط کاربر نوشته می شوند. توابع پیش فرض در واقع همان دستوراتی هستند که در php وجود دارند مثلا echo که ورودی را از ما می گیرد و بدون تغییر چاپ می کند.

چند نکته

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

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

<?php

function name() {

func code

}

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

پارامتر های تابع (ورودی تابع)

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

<?php

function myfunc($name , $age){

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

}

myfunc("mohammad" , "27");

?>

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

آرگومان های ورودی پیش فرض

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

php?>

("function myfunc ($name = "mohammad

{ ;echo $name }

;()myfunc

<?

در کد فوق هنگام تعریف تابع یک مقدار پیش فرض برای پارامتر نام در نظر گرفته شده بنابراین با وجود این که در هنگام فراخوانی تابع ورودی داده نشده برنامه با خطا مواجه نمی شود.

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

برای استفاده از مقادیر بازگشتی در تابع از دستور return به صورت زیر استفاده می کنیم.

<?php

function zarb($a , $b) {

$c = $a * $b;

return $c;

}

$d = zarb(3 , 3);

echo $d;

?>

در کد فوق مقدار بازگشتی تابع ضرب را در متغیر d ریخته و آن را در خروجی نمایش داده ایم.

آموزش کامل PHP – قسمت هشتم: switch

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

دستور شرطی switch

روش استفاده از دستور switch به صورت زیر است:

<?php

$a = 1;

switch ($a){

case "1":

echo "number 1";

break;

case "2":

echo "number 2";

break:

default:

echo "number 1 & 2 not";

break;

} ?>

اگر به کد فوق توجه کنید ابتدا یک متغیر تعریف کرده ایم و مقدار یک را به آن نسبت داده ایم سپس آن متغیر را در پرانتز و در مقابل دستور switch قرار داده ایم. در ساختار سویچ هر case مانند else if عمل می کند و شرط جداگانه ای است. عملکرد برنامه به این صورت است که اگر مقدار متغیر 1 بود یعنی کیس 1، “عدد 1 است” چاپ می شود. اگر 2 بود، عدد 2 و اگر هیچکدام نبود دستور درون دیفالت اجرا می شود.

همان طور که مشاهده می کنید عملکرد این دستور دقیقا مشابه else if است و انسجام بهتری دارد. توصیه می شود برای بررسی چند شرط از این دستور استفاده کنید.

اصول کلی استفاده از switch

  1. قرار دادن آنچه قصد بررسی مقدارش را داریم در پرانتز مقابل دستور switch (متغییر یا دستوراتی که نهایتا یک خروجی داشته باشند)
  2. به ازای هر شرط یک دستور case را نوشته و علامت دو نقطه : را در مقابل قرار می دهیم
  3. کد مورد نظر را برای شرطی که در مرحله قبل نوشتیم، می نویسیم
  4. با استفاده از عبارت break و سپس قرار دادن علامت نقطه ویرگول ; شرط یاد شده را پایان می‌دهیم
  5. به ازای هر شرط دیگری که قصد بررسی آن را داریم مراحل ۲ تا ۴ را مجددا تکرار می‌کنیم
  6. همانند مثال بالا، در نهایت default را در پایین‌ترین بخش دستور switch می‌نویسیم تا در صورتی که هیچ کدام از شرط‌ های نوشته شده برقرار نبود، این دستور اجرا شود

برای درک بهتر این دستور یک مثال می زنیم. نام شهر را از کاربر گرفته و در صورتی که شیراز بود پیام خوشامد را نمایش می دهیم.

<?php

$usercity = 20;

switch ($usercity){

case "shiraz":

echo "welcome";

break;

case default:

echo "you are not from shiraz";

break;

} ?>

نکته: نوشتن بخش default اجباری نیست ولی پیشنهاد می کنیم همیشه این بخش را هم بنویسید تا شرایط را بهتر کنترل کنید.

پایان قسمت هشتم