آموزش کامل 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 – قسمت 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 – قسمت 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 کلیک کنید.