آموزش کامل 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 – قسمت 20: متغیر های سراسری

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

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

استفاده از Session

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

<?php

session_start();

?>

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

<?php

session_start();

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

?>

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

<?php

session_start();

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

echo $session[‘user’];

?>

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

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

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

<?php

session_start();

$_SESSION['isAdmin'] = true;

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

?>

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

<?php

session_start();

if ($_SESSION['isAdmin'] == true){

echo "you are admin and your username is $_SESSION['username']";

}else{

echo "session is not set!";

}

?>

همان طور که می بینید، دو سشن جدید به نام‌های isAdmin و username را در فایل one.php ایجاد کردیم و مقدار آن‌ها را به ترتیب true و pardiswp تعیین کردیم. دقت کنید که مقدار سشن isAdmin از نوع Boolean تعیین شده است.

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

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

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

آموزش کامل PHP – قسمت 19: حذف داده ها از بانک

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

حذف داده ها از بانک

ابتدا پوشه پروژه cms را که در جلسات قبل ایجاد کردیم را باز کرده و پروژه را اجرا کنید. فایل edit.php را باز کرده کد های زیر را جایگزین کد های قبلی کنید:

<!DOCTYPE html>

<html dir="rtl" lang="fa-IR">

<head>

<title>ویرایش مطلب</title>

<meta charset="utf-8" />

</head>

<body style="font-family: tahoma; font-size:14px;">

<center>

<?php

include ("config.php");

//select all records from posts table

$get_query = mysql_query("SELECT * FROM `posts`");

//now using while for get each record sepratly and show it to web browser

while ($fetch_result = mysql_fetch_array($get_query))

{

$postTitle = $fetch_result['title'];

$postText = $fetch_result['text'];

$postId = $fetch_result['id'];

echo "<h2><a href=single.php?id=$postId>$postTitle</a> (<a href=editpost.php?id=$postId>ویرایش</a>) - (<a href=deletepost.php?id=$postId>حذف</a>)</h2>";

}

?>

</center>

</body>

</html>

تنها تغییری که در این فایل ایجاد کرده ایم این است که یک لینک ثابت برای حذف هر مطلب در کنار آن اضافه کرده ایم. لینک مقصد آن را نیز فایل deletepost.php قرار داده ایم. همچنین شناسه هر پست را نیز با متغیر id? به این فایل ارسال کرده تا به این صورت بتوانیم پست انتخاب شده را حذف کنیم.

حال یک فایل به نام deletepost.php ایجاد کرده و کد های زیر را در آن قرار دهید:

<!DOCTYPE html>

<html dir="rtl" lang="fa-IR">

<head>

<title>حذف پست</title>

<meta charset="utf-8" />

</head>

<body style="font-family: tahoma; font-size:14px;">

<center>

<?php

include ("config.php");

$pid = $_GET['id'];

//delete query

$get_query = mysql_query("DELETE FROM `posts` WHERE `id` = '$pid' ");

if($get_query){

echo "حذف مطلب مورد نظر با شناسه $pid با موفقیت انجام شد.";

}else{

echo "مشکلی در حذف پست مورد نظر رخ داده است.";

}

?>

</center>

</body>

</html>

کوئری مخصوص حذف داده‌ها را به صورت زیر نوشته‌ایم:

$get_query = mysql_query(“DELETE FROM ‘posts’ WHERE ‘id’ = ‘$pid’ “);

ابتدا کلمه کلیدی DELETE را نوشته و سپس FROM را می‌نویسم و پس از این دو کلمه نام جدولی که قصد حذف اطلاعات از آن را داریم می‌نویسیم. از آنجا که نام جدول ما posts است پس همین نام را نوشته و سپس مانند جلسات قبل از دستور WHERE استفاده می‌کنیم تا یک شرط برای اجرای این کوئری تعیین کنیم. پس از این کلمه اعلام می‌کنیم که تمام اطلاعات مربوط به رکوردی که id آن برابر مقدار ذخیره شده در pid است و در جدول posts قرار دارد را حذف کند. اگر این کوئری به درستی و با موفقیت انجام شود، متغیر get_query برابر true خواهد بود و اگر به درستی اجرا نشود و مشکلی در اجرای این کوئری پیش بیاید، مقدار ذخیره شده در متغییر get_query برابر false خواهد شد.

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

 

آموزش کامل PHP – قسمت 18: ویرایش داده های بانک

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

ویرایش داده ها در بانک اطلاعاتی mysql

در ادامه پروژه ای که در قسمت های قبل ساختیم، پوشه cms را باز کرده و فایل جدیدی به نام edit.php در آن ایجاد می کنیم. در این فایل قصد داریم مانند روشی که اطلاعات را در فایل ایندکس به نمایش در آوردیم، لیست مطالب را نشان دهیم؛ با این تفاوت که این بار فقط عنوان مطالب را نمایش می دهیم و در کنار هر مطلب گزینه ای برای ویرایش آن قرار می دهیم. کد های زیر را در فایل edit قرار دهید:

<!DOCTYPE html>

<html dir="rtl" lang="fa-IR">

<head>

<title>ویرایش مطلب</title>

<meta charset="utf-8" />

</head>

<body style="font-family: tahoma; font-size:14px;">

<center>

<?php

include ("config.php");

//select all records from posts table

$get_query = mysql_query("SELECT * FROM `posts`");

//now using while for get each record sepratly and show it to web browser

while ($fetch_result = mysql_fetch_array($get_query))

{

$postTitle = $fetch_result['title'];

$postText = $fetch_result['text'];

$postId = $fetch_result['id'];

echo "<h2><a href=single.php?id=$postId>$postTitle</a> (<a href=editpost.php?id=$postId>ویرایش</a>)</h2>";

}

?>

</center>

</body>

</html>

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

از آنجا که id هر مطلب منحصر به فرد است، از آن برای ایجاد لینک ویرایش هر مطلب استفاده کرده‌ایم. بنابراین با کلیک روی لینک ویرایش هر مطلب، id آن مطلب را به فایل editpost.php ارسال می‌کنیم تا در آن با دستور GET، شناسه مطلب مورد نظر را دریافت کرده و بر اساس آن شناسه اطلاعات پست انتخاب شده را از بانک اطلاعاتی دریافت کنیم. بعد از اجرای فایل edti.php صفحه‌ ای مانند تصویر زیر مشاهده می کنید:

php 18 - پردیس وردپرس

یک فایل جدید دیگر به نام  editpost.php ایجاد کنید و کد های زیر را در آن قرار دهید:

<!DOCTYPE html>

<html dir="rtl" lang="fa-IR">

<head>

<title>ویرایش مطلب</title>

<meta charset="utf-8" />

</head>

<body style="font-family: tahoma; font-size:14px;">

<?php

include ("config.php");

$pid = $_GET['id'];

//select post that its id = pid

$get_query = mysql_query("SELECT * FROM `posts` WHERE `id` = '$pid' ");

$fetch_result = mysql_fetch_array($get_query);

$postTitle = $fetch_result['title'];

$postText = $fetch_result['text'];

?>

<center>

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

عنوان مطلب : <input type="text" name="postTitle" size="40" value="<?php echo $postTitle;?>"><br>

متن مطلب: <br>

<textarea name="postText" rows="10" cols="50">

<?php echo $postText;?>

</textarea>

<br>

<input type="hidden" name="postID" value="<?php echo $pid;?>">

<input type="submit" value="ثبت مطلب">

</form>

</center>

</body>

</html>

همانطور که مشاهده می‌کنید باز هم ابتدا فایل config.php را فراخوانی می‌کنیم. سپس همانند کاری که در فایل single.php انجام داده بودیم، ابتدا از طریق دستور GET_$ شناسه پستی که قصد ویرایش آن را داریم دریافت کرده و با استفاده از یک کوئری شرطی، تمامی مشخصات مطلبی که شناسه آن را دریافت کرده‌ایم را از بانک اطلاعاتی استخراج می کنیم و عنوان و متن مطلب را در دو متغیر قرار می‌دهیم. سپس فرمی مانند فرمی که در فایل insert.php ایجاد کرده بودیم، ایجاد کرده ولی این بار بخش action را برابر editpost2.php قرار می‌دهیم؛ زیرا قصد داریم محتویات این فرم به فایل editpost2.php ارسال شود. سپس در فرم خود برای فیلد عنوان یک خاصیت جدید به نام Value را تعریف کرده‌ایم تا مقدار عنوان دریافت شده از بانک اطلاعاتی را در آن قرار دهیم.

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

<?php echo $postTitle;?>

همانطور که می‌دانید این کد، متغیر postTitle را چاپ می‌کند و هر مقداری که در مشخصه Value فیلدهای متنی قرار داده شود، به صورت پیش‌فرض در آن فیلد قرار داده خواهد شد. سپس در textarea مربوط به متن نیز به همین صورت و با استفاده از کد زیر عمل می کنیم:

<?php echo $postText;?>

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

<input type=”hidden” name=”postID” value=”<?php echo $pid;?>”>

این فیلد به کاربر نمایش داده نمی‌شود چراکه نوع آن hidden تعیین شده است. اما سایر خواص این فیلد نیز همانند فیلدهای معمولی است. نام این فیلد postID تعیین شده و مقدار آن نیز برابر با شناسه مطلب است که قصد ویرایش آن را داریم و در بالای صفحه با استفاده از دستور GET_$ آن را در متغیری به نام pid ذخیره کرده بودیم.

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

php 18-2 - پردیس وردپرس

به لینک این صفحه توجه کنید. در ادامه نام فایل id=1 است که نشان می دهد ما قصد ویرایش مطلبی که شناسه id آن برابر ۱ است را داریم. البته دقت کنید در نام‌گذاری متغیر URL می‌توانید به جای id از هر متغییر دیگری نیز استفاده کنید ولی در این صورت باید در فایل editpost.php نیز در محلی که با دستور GET_$ می‌خواهیم id پست را دریافت کنیم، از نام انتخابی خود استفاده کنیم.

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

<!DOCTYPE html>

<html dir="rtl" lang="fa-IR">

<head>

<title>درج مطلب</title>

<meta charset="utf-8" />

</head>

<body style="font-family: tahoma; font-size:14px;">

<center>

<?php

include ("config.php");

$newtitle = trim ($_POST['postTitle']);

$newText = trim ($_POST['postText']);

$pid = $_POST['postID'];

if($newtitle != "" && $newText != ""){

//do insert

$query_res = mysql_query("UPDATE `posts` SET `title` = '$newtitle', `text` = '$newText' WHERE `id` = '$pid'");

if($query_res){

echo "مطلب با موفقیت ویرایش شد.";

}else{

echo "مشکلی در ویرایش مطلب رخ داده است. مجددا تلاش کنید";

}

}else{

echo '<a href=edit.php>لیست مطالب</a>';

}

?>

</center>

</body>

</html>

در این فایل نیز پس از فراخوانی config.php، مقادیری که از فرم editpost.php ارسال شده را با روشی که پیش از این در جلسات قبلی آموخته‌اید در متغیرهایی به نام newTitle، newText و pid ذخیره کرده ایم. سپس با یک دستور شرطی if بررسی می‌کنیم که کاربر مقادیر فیلدهای عنوان و متن مطلب را حتما وارد کرده باشد. اگر فیلد عنوان و متن مطلب خالی نباشد شرط برقرار بوده و عملیات ویرایش انجام خواهد شد.

برای ویرایش مطالب باید از کوئری UPDATE استفاده کنیم. همانطور که در کد بالا مشاهده می‌کنید، کد بروزسانی اطلاعات در جدول post به صورت زیر است:

$query_res = mysql_query(“UPDATE ‘posts’ SET ‘title’ = ‘$newtitle’, ‘text’ = ‘$newText’ WHERE ‘id’ = ‘$pid'”);

مشاهده می کنید که ابتدا دستور UPDATE را نوشته و سپس نام جدولی که قصد ویرایش رکوردهای آن را داریم می‌نویسیم. نام جدول ما در اینجا posts است و سپس کلمه کلیدی SET را اضافه می‌کنیم. حالا به تعداد فیلدهایی که قصد ویرایش آن‌ها را داریم ابتدا نام فیلد رکورد مورد نظر را نوشته و سپس مقدار جدید را بعد از = قرار می‌دهیم. در اینجا ‘title’ = ‘$newtitle’ است که یعنی مقدار فیلد title برابر با مقدار جدیدی که در متغیر newTitle ذخیره کرده بودیم شود. به همین صورت فیلدهای دیگر را نیز در این کوئری می‌نویسیم.

در آخر باید یک شرط نیز برای کوئری خود تعیین کنیم و به MYSQL بگوییم که فقط مطلبی را ویرایش کند که شناسه id آن برابر متغیر pid است. اگر این شرط را ننویسید، تمامی رکوردها یعنی تمامی مطالب ذخیره شده در بانک اطلاعاتی ما و در جدول posts با مقادر جدید جایگزین خواهند شد و قطعا ما نمی‌خواهیم این اتفاق رخ دهد. پس دلیل استفاده از شرطی که در انتهای این کوئری بکار برده‌ایم را اکنون می‌دانید.

در نهایت همانند آنچه در فایل ثبت مطلب انجام دادیم، با یک شرط بررسی می‌کنیم که آیا کوئری به درستی انجام شده یا خیر. اگر نتیجه کوئری که در متغییر query_res ذخیره شده true باشد پیغام موفقیت آمیز بودن ویرایش مطلب نمایش داده می‌شود و اگر false باشد، پیغامی مبنی بر عدم موفقیت ویرایش مطلب به کاربر نشان داده خواهد شد.

اگر مراحل را تا به این قسمت به درستی انجام داده باشید پس از اعمال تغییرات در پست مورد نظر خود باید با صفحه‌ای مثل تصویر زیر مواجه شوید:

php 18-3 - پردیس وردپرس

 

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

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

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

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

$postText = $fetch_result[‘text’];

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

$postId = $fetch_result[‘id’];

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

حال کد:

echo “<h2>$postTitle</h2>”;

را به به صورت زیر تغییر می دهیم.

echo “<h2><a href=single.php?id=$postId>$postTitle</a></h2>”;

به این ترتیب یک لینک منحصر به فرد برای هر پست ایجاد می شود. حالا اگر مثلا روی مطلب اول کلیک کنیم به لینک http://127.0.0.1/cms/singe.php?id=1 منتقل خواهیم شد که در واقع لینک مخصوص به مطلب اول در صفحه ای اختصاصی و جداگانه است.

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

<!DOCTYPE html>

<html dir="rtl" lang="fa-IR">

<head>

<title>مشاهده پست</title>

<meta charset="utf-8" />

</head>

<body style="font-family: tahoma; font-size:14px;">

<center>

<?php

include ("config.php");

$pid = $_GET['id'];

//select all records from posts table

$get_query = mysql_query("SELECT * FROM `posts` WHERE `id` = '$pid' ");

$fetch_result = mysql_fetch_array($get_query);

$postTitle = $fetch_result['title'];

$postText = $fetch_result['text'];

echo "<h2>$postTitle</h2>";

echo "<p>$postText</p><hr>";

?>

</center>

</body>

</html>

کد فوق تقریبا شبیه به فایل index.php است، فقط با تغییراتی در کوئری و این که دیگر نیازی به حلقه نیست. این بار قصد داریم فقط یک رکورد از جدول واکشی کنیم.

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

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

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

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

در ادامه پروژه cms که در جلسات قبل ساختیم، در پوشه cms در فایل index.php کد های زیر را قرار دهید.

<!DOCTYPE html>
<html dir="rtl" lang="fa-IR">
<head>
<title>صفحه اصلی</title>
<meta charset="utf-8" />
</head>
<body style="font-family: tahoma; font-size:14px;">
<center>
<?php
include ("config.php");
//select all records from posts table
$get_query = mysql_query("SELECT * FROM `posts`");
//now using while for get each record sepratly and show it to web browser
while ($fetch_result = mysql_fetch_array($get_query))
{
$postTitle = $fetch_result['title'];
$postText = $fetch_result['text'];
echo "<h2>$postTitle</h2>";
echo "<p>$postText</p><hr>";
}
?>
</center>
</body>
</html>

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

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

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

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

حالا آدرس http://127.0.0.1/cms/index.php را در مرورگر اجرا کنید خواهید دید که کاراکترها همگی به صورت علامت سوال نمایش می‌یابند. اگر خاطرتان باشد نوع یونیکد فیلدهای جداول بانک اطلاعاتی را از نوع utf-8 تعیین کردیم تا بتوانیم متون فارسی را در جدول posts ذخیره کنیم. این مشکل به دلیل نوع اتصال به بانک اطلاعاتی رخ داده و برای رفع آن باید فایل config.php را کمی ویرایش کنید. در واقع باید نوع اتصال را هم utf-8 تعیین کنیم. فایل config.php را باز کنید و آن را به صورت زیر تغییر دهید.

<?php
$dbhost = "localhost";
$dbuser = "root";
$dbname = "cms";
$dbpass = "";
$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);
mysql_set_charset('utf8',$connect_db);
mysql_select_db($dbname,$connect_db);
?>

در خط ۷ کد بالا از تابع mysql_set_charset استفاده کرده‌ایم که پس از اتصال به بانک داده و پیش از انتخاب جدول مورد نظر، باید این کد را استفاده کنید. این تابع دو آرگومان ورودی دارد که ورودی اول نوع یونیکد مورد نظر برای اتصال به سرور MySQL و ورودی دوم لینک تابع اتصال به بانک داده خواهد بود.

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

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

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

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

<!DOCTYPE html>
<html dir="rtl" lang="fa-IR">
<head>
<title>درج مطلب</title>
<meta charset="utf-8" />
</head>
<body style="font-family: tahoma; font-size:14px;">
<center>
<form action="sendpost.php" method="post">
عنوان مطلب : <input type="text" name="postTitle" size="40"><br>
متن مطلب: <br>
<textarea name="postText" rows="10" cols="50"></textarea>
<br>
<input type="submit" value="ثبت مطلب">
</form>
</center>
</body>
</html>

در کد بالا یک فیلد به نام postTitle برای عنوان و یک فیلد به نام postText برای متن است. همچنین محتویات فرم با متد post به صفحه ای به نام sendpost.php ارسال می شود. این فایل را ایجاد کرده و کد زیر را در آن قرار دهید.

<!DOCTYPE html>
<html dir="rtl" lang="fa-IR">
<head>
<title>درج مطلب</title>
<meta charset="utf-8" />
</head>
<body style="font-family: tahoma; font-size:14px;">
<center>
<?php
include ("config.php");
$title = trim ($_POST['postTitle']);
$text = trim ($_POST['postText']);
if($title != "" && $text != ""){
$query_res = mysql_query("INSERT INTO `posts` (`title`, `text`) VALUES ('$title','$text')");
if($query_res){
echo "مطلب شما با موفقیت در بانک داده درج شد.";
}else{
echo "مشکلی در ثبت مطلب رخ داده، لطفا مجددا تلاش کنید. <a href=insert.php>بازگشت</a>";
}
}else{
echo 'برای درج مطلب جدید باید عنوان و متن مطلب را وارد کنید. <a href=insert.php>بازگشت</a>';
}
?>
</center>
</body>
</html>

توضیح کد فوق:

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

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

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

فرم درج مطلب

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

--
-- Database: `cms`
--

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

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

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

--
-- Indexes for dumped tables
--

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

--
-- AUTO_INCREMENT for dumped tables
--

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

</form>

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

<?php

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

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

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

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

//merge name and message

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

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

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

if ($email_send) {

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

else {

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

} }

else {

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

} ?>

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

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

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

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

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

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