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

تاریخ شمسی در php

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

ابتدا فایل jdf.php را از این لینک دانلود کنید و سپس فایل jdf.php را در کنار فایل مورد نظر خود به عنوان مثال در پوشه time که در پوشه htdocs یا www ساخته بودید قرار دهید. سپس در فایلی که قصد استفاده از تاریخ هجری شمسی را در آن دارید فایل jdf.php را include کنید.

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

<?php

include ("jdf.php");

print jdate("j of F Y, \a\\t g.i a", time());

?>

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

3 1396 بهار اردیبهشت 1396, at 10.14 ق.ظ

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

<?php

include ("jdf.php");

print jdate("j F Y - h:s", time());

?>

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

3 اردیبهشت 1396 -10.19

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

آموزش کامل 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 – قسمت 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 به منظور زیباتر شدن فرم ارسال ایمیل و حتی صفحه ارسال ایمیل و نمایش پیام‌ها بهره ببرید. در صورتی که هر گونه سوالی در این مورد برایتان پیش آمده آن را در بخش نظرات اعلام کنید.

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

آموزش کامل 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’]

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