تاريخ : سه شنبه هشتم بهمن ۱۳۹۲ | 0:18 | نویسنده : عدنان بوعذار
درس چهارم- آشنایی با آرایه ها
تا اینجا در زمانی که خواستیم مقداری برای مان نگهداری شود تا در طول برنامه از آن استفاده کنیم٬ این مقدار را درون متغیرها که خانه های خالی حافظه هستند، قرار دادیم. اما این متغیرها تنها قادرند که یک مقدار را برایمان ذخیره کنند؛ پس اگر خواستیم چندین مقدار را ذخیره کنیم چی؟
اینجاست که آرایه ها به کمک ما می آیند. در این درس به شرح آرایه ها و چگونگی استفاده از آنها برای ذخیره چندین متغیر می پردازیم.
آرایه هاآرایه ها یک نوعی از متغیرها هستند که می توانند چند داده را در قالب یک نام ذخیره کنند. فرض کنید که می خواهید اسامی کارمندان یک شرکت را به طور موقت ذخیره کنید تا در طول برنامه از آنها بتوانید استفاده کنید.
اگر برای این کار از متغیرهای آرایه ای استفاده نکنیم، باید برای هر کدام از این اسامی یک متغیر معمولی تعریف کنیم که اگر تعداد آنها زیاد باشد، چه بسا که کار نشدنی شود. حال آن که با آرایه، تمام این اسامی تحت یک نام آرایه ای ذخیره می شوند و در زمان نیاز با یک اندیس و نام آرایه به آن دسترسی پیدا می کنیم.
هر آرایه از دو بخش تشکیل شده: نام آرایه و اندیس.
نام آرایه که مشخص است و در زمان ایجاد آن٬ خود برنامه نویس انتخاب می کند. اما اندیس، کلید یا مقداری است که به یکی از مقادیر ذخیره شده در آرایه اشاره می کند. مثلا وقتی که پنج مقدار را در آرایه ریختیم، برای شناختن هر کدام از این مقادیر یک اندیس منحصر به فرد وجود دارد که به مقدار خاصی اشاره می کند.
ساختار آرایهپی اچ پی دو نوع آرایه را حمایت می کند٬ یکی آرایه با اندیس عددی٬ یعنی اندیس اشاره گر به مقدار عدد است و دیگری آرایه با اندیس کاراکتری یا کلمه ای که اندیس خود یک کاراکتر یا کلمه تعریف می شود. در زیر نمونه هایی از این دو نوع را می بینید:
$name[2]$name[ ' staff ' ];
نکته ۱: قوانینی که برای نام گذاری متغیرها بیان شدند، برای آرایه ها هم برقرار هستند.
نکته ۲: به خاطر اینکه یک آرایه، مقادیر بیشماری را در خود نگه می دارد، طریقه چاپ آن با یک متغیر معمولی فرق دارد.
نکته ۳: پی اچ پی خود از آرایه های از قبل تعریف شده به نام متغیرهای فرا جهانی یا Super Global Variables استفاده می کند. نمونه هایی از این دست آرایه های از پیش تعریف شده را قبلا دیده اید. مثلا:
$_GET, $_POST, $_REQUEST ...
طرز ساخت آرایهدر زبان پی اچ پی راه های متفاوتی برای ایجاد یک آرایه وجود دارد، اما در کل دو راه اصلی است که این کار را برایمان مشخص می کند که با مثال برایتان شرح داده خواهد شد.
نوع اولتعریف و دادن مقدار به آرایه در زمان ایجاد آن. به مثال زیر توجه کنید که ابتدا آرایه تعریف و همزمان بدان مقدار داده می شود:
$name[] = ' حمید ' ;$name[] = ' سعید ' ;$name[ ' staff3 ' ] = ' پیمان ' ;
در این حالت اندیس بطور خودکار از 0 تا ... به آرایه اضافه می شود، یعنی مقادیر برای فراخوانی باید با کلید خود خواسته شوند، و یا می توان از کلید کلمه ای استفاده کرد. توجه کنید:
$name[0] // حمید $name[1] // سعید $name[' staff3 '] // پیمان
حال مقدار نخستین آرایه با کلید 0 می شود 'حمید'، دومی می شود 'سعید' و سومی هم 'پیمان'. برای چاپ کردن این مقادیر هم می توانید به صورت یکی از روش های زیر عمل کنید:
echo $name[0] ;echo $name[1] ;echo $name[' staff3 '] ;echo $name[0] . ' ' . $name[1] . ' ' . $name[' staff3 '] ;
نوع دومدر نوع دوم به جای تعریف یک آرایه به طور یکی یکی، می توانید با کمک تابع array() کل مقادیر را یکجا در آرایه قرار دهید که این قابلیت هم به چند شیوه قابل اجرا است. مانند:
$name = array ( ‘حمید ’ , ‘ سعید ’ , ‘ پیمان ’) ;
خوب مقادیر به ترتیب با کلیدهای 0 و 1 و 2 وارد آرایه می شوند.
$name = array ( 1 => ‘حمید ’ , ‘ سعید ’ , ‘ پیمان ’) ;
در این حالت ما عدد کلید شروع شونده را از 0 به 1 تغییر دادیم تا مقادیر با کلید 1 شروع به ذخیره شدن کنند. پس مقادیر به ترتیب با کلیدهای 1 و 2 و 3 وارد آرایه می شوند.
$name = array (' staff1' => 'حمید ' , ' staff2' => ' سعید ' , 'staff3' => ' پیمان ' ) ;
در این حالت ما از کلید کلمه ای استفاده کردیم که به جای عدد، مقادیر با کلیدهایی که تعریف می کنیم وارد شوند. توجه کنید که در این حالت برای فراخوانی مقداری از آرایه باید نام کلید را بدانید؛ مثلا فرض کنید ما می خواهیم نام سعید را چاپ کنیم که باید به شیوه زیر باشد:
echo $name[ ' staff2 ' ] ;
نکته ۱: از تابع array() می توانیم برای تعریف نخستین یک متغیر آرایه ای استفاده کنیم مانند:
$name = array();$name[] = ' سعید ' ;
همانطور که می بینید در جمله ابتدایی، متغیر $name را به صورت یک آرایه تعریف کردیم و در جمله دوم بدان مقدار دادیم.
نکته ۲: از تابع range() می توانیم برای ایجاد آرایه ای متشکل از یک سری اعداد پشت سر هم استفاده کنیم.
$number = range ( 1 , 20 );
در این حالت ما آرایه ای تعریف کردیم که اعداد 1 تا 20 را با کلید 0 تا 19 در خود جا داده است.
echo $number [0] ; // خروجی می شود 1echo $number [10] ; // خروجی می شود 11echo $number [19] ; // خروجی می شود 20
به خاطر شروع شدن کلید از 0، پس عدد 1 در آرایه ای با کلید 0 ذخیره می شود.
دسترسی به آرایه هادر استفاده کردن از آرایه و چاپ آن دیدیم که این عمل چطور با دانستن کلید آرایه انجام شد. اما این راه فقط برای دسترسی به یک آرایه است. راه دیگری برای دسترسی همزمان به همه آرایه ها وجود دارد که از تابع foreach() استفاده می شود. ساختار این تابع به شکل زیر است:
foreach ( $array as $value ) {// دستورات برای انجام و استفاده از مقادیر}
این تابع دارای دو پارامتر است که ابتدایی به نام آرایه شما اشاره دارد و دومی به تک تک مقادیر در آرایه. مثلا اگر بخواهیم اعدادی از 1 تا 20 را چاپ کنیم، می توانیم بنویسیم:
$number = range ( 1 , 20 ) ;foreach ( $number as $num ) {echo $num . ' ' ;} // 1 2 3 4 5 ........ 20
دقت کنید که در زمان چاپ اعداد، بعد از هر عدد یک فاصله با کمک . ' ' گذاشتیم. علاوه بر این می توانیم در داخل ' ' بگذاریم که اعداد را در حالت ستونی چاپ کند:
echo $num . ' ' ;
نوع دیگر استفاده از این تابع گذاشتن کلید در آن است. توجه کنید:
$name = array (' staff1' => 'حمید ' , ' staff2' => ' سعید ' , 'staff3' => ' پیمان ' ) ;foreach ( $name as $key => $num ) {echo $num . ' ' ;}
مرتب کردن آرایه هابرای مرتب کردن آرایه ها براساس حروف الفبا از تابع sort() استفاده می شود. ما در پی اچ پی قادر هستیم که آرایه ها را براساس چند فاکتور مرتب کنیم.
ابتدا اینکه آرایه را براساس مقدار داخل آن یا براساس کلیدهای آن مرتب کنیم.
$name = array (' staff1' => 'حمید ' , ' staff2' => ' سعید ' , 'staff3' => ' پیمان ' ) ;sort($name);foreach ( $name as $key => $num ) {echo $num . ' ' ;}
نکته: در این حالت مرتب سازی با استفاده کردن از تابع sort()، این تابع کلیدهای وارد شده برای آرایه را پاک کرده و مجددا خود از 0 تا... کلیدگذاری می کند. پس اگر برای آرایه خود کلید کلمه ای انتخاب کردید، هرگز از این تابع استفاده نکنید. برای دیدن این تغییرات کافیست که مطابق زیر عمل کنید:
$name = array ('staff1' => 'سعید' , 'staff2' => ' حمید ' , 'staff3' => ' پیمان ' ) ;sort($name);foreach ( $name as $key => $num ) {echo $key . ' => ' . $num . ' ' ;}
مشاهده می کنید که کلیدهای چاپی آنهایی که تعریف کردیم نیستند؟
مرتب کردن با حفظ کلیدهابرای مرتب کردن آرایه و نگهداشتن کلیدها می توانید از تابع asort() استفاده کنید به گونه ای که این تابع کلیدهای شما را دست نخورده باقی می گذارد.
$name = array ('staff1' => 'سعید' , 'staff2' => ' حمید ' , 'staff3' => ' پیمان ' ) ;asort($name);foreach ( $name as $key => $num ) {echo $key . ' => ' . $num . ' ' ;}
مرتب کردن براساس کلیدهااین حالت زمانی استفاده می شود که ما بخواهیم آرایه را براساس کلیدها و نه براساس مقادیر مرتب کنیم:
$name = array ('staff' => 'سعید' , 'manager' => ' حمید ' , 'customer' => ' پیمان ' ) ;ksort($name);foreach ( $name as $key => $num ) {echo $key . ' => ' . $num . ' ' ;}
نکته: برای نمایش یک جای یک آرایه در زمان هایی که می خواهید رفع اشکال کنید، می توانید مانند زیر از توابع اشاره شده استفاده کنید.
$name = array ( 'staff1' => 'سعید' , 'staff2' => ' حمید ' , 'staff3' => ' پیمان ' ) ;print_r($name);echo "";var_dump($name);
ساختار for و whileحلقه ها ساختاری در زبان برنامه نویسی هستند که به شما اجازه دسترسی به همه مقادیر را به طور مرتب می دهند. در قسمت قبلی ما از یک نوع این حلقه ها استفاده کردیم: foreach() یادتان هست!
دو نوع دیگر از حلقه ها که در اینجا معرفی می کنیم for و while هستند.
حلقه forاین نوع حلقه دارای سه پارامتر است که شامل نقطه شروع حلقه٬ شرط پایانی حلقه و شمارش اندیس یا کلید حلقه می شود.
for ( نقطه شروع ; شرط پایانی ;شمارش اندیس ){// دستور}
اجازه بدهید با یک مثال کارکرد for را بیشتر شرح دهیم. فرض کنید می خواهیم که از شماره ۱ تا ۱۰ را چاپ کنیم:
for ($i = 1 ; $i {echo $i . ' ' ;}
جمله ابتدایی پارامتر این حلقه 1 = i است که همان اندیس شمارشگر ماست٬ بعد از آن شرط پایانی حلقه است که می گوید تا زمانی که اندیس کوچک تر یا برابر ۱۰ شود. در آخر هم شمارشگر که هر بار که حلقه اجرا می شود یکی به آن اضافه می کند.
نکته: مورد استفاده از این نوع حلقه زمانی است که ما تعداد تکرار حلقه را می دانیم. به طور مثال در قسمت قبل ما می دانستیم که می خواهیم از شماره 1 تا 10 را چاپ کنیم.
حلقه whileاین حلقه هم مانند حلقه قبلی همان کار تکرار براساس شرط را انجام می دهد، ولی با یک تفاوت بزرگ و آن این است که در این نوع حلقه تعداد یا میزان تکرار را نمی دانیم. پس بر این اساس جایگاه استفاده از این نوع حلقه تغییر می کند. اجازه بدهید ابتدا مثال قبلی را توسط این حلقه بنویسیم تا تفاوت این دو مشخص تر شود.
$i =1;while ( $i print $i . ' ' ;$i++;}
نکته: پی اچ پی نوع دیگری از حلقه دارد به نام do...while که شیوه کار آن درست مثل حلقه while است. با این تفاوت که در حلقه while در صورت درست نبودن شرط، دستورات داخل حلقه اجرا نمی شود اما در do...while حتی در صورت نادرستی شرط، باز هم اجرا می شود اما تنها برای یکبار.
$i = 1 ;do {print $i . ' ' ;$i++;} while ( $i
اگر در این مثال متغیر $i = 11 شود، یکبار این عدد چاپ می شود و بعد در شرط به خاطر برقرار نبودن شرط که باید کمتر از ۱۰ باشد٬ حلقه متوقف می شود.
$i = 11 ;do {print $i . ' ' ;$i++;} while ( $i
با به پایان رساندن این بخش ما مقدمات یادگیری اصول ابتدایی برای برنامه نویسی در زبان پی اچ پی را به پایان بردیم.
نکته ای که لازم می دانیم در اینجا ذکر کنیم این است که شما نیازی ندارید در این زمان تمام قسمت های قبلی را حفظ کنید، بلکه در طول دوره و با انجام مثال های بهتر و عملی و نزدیک تر به شیوه برنامه نویسی، در دنیای بیرون این اصول به طور خود به خود به مغز شما راه می یابند.
پس نگران نباشید، فقط تلاش کنید که مطالب را بفهمید و با تمرین لازم، خروجی های داده شده را بدست آورید که نشانه درستی عملکرد شما از دید برنامه نویسی است.
در درس بعدی ما به سراغ طراحی و ساخت تارنمای پویا رفته و از تکنیک های پی اچ پی در آن یاد خواهیم کرد. این تکنیک ها شامل چگونگی استفاده از چندین فایل برای ساخت یک تارنما و... می شود.
درس پنجم- استفاده از فایل های متفاوت (فایل های خارجی)
با اطلاعاتی که تا به اینجا کسب کردیم٬ حال زمان آن رسیده تا با مفاهیم مهمتر و جالب تر پی اچ پی آشنا شویم.
یکی از این مفاهیم٬ استفاده کردن یا وارد کردن فایل هایی خارجی به درون فایل اصلی خود، در پی اچ پی است. عبارت تارنمای پویا در اصل با بکارگیری این مفاهیم معنی پیدا می کند. حال اگر بخواهیم به طور حرفه ای تر تارنمای پویا را شرح دهیم٬ می گوییم: یک تارنمای پویا سیستمی است که از نظر نگهداری و تولید محتوا راحت تر و در مقابل کاربر به صورت تعاملی عمل می کند. این بدین معنی است که شما می توانید محتوا را براساس پاسخی به درخواست کاربر تعیین کنید.
قرار دادن چند فایل در یک فایلتا به امروز همه کدها چه اچ تی ام ال و چه پی اچ پی در یک فایل قرار داشت. اما امروزه برای توسعه تارنماهای پیچیده تر این کار کمی اشتباه و نادرست است. شما با تقسیم فایل بزرگ تر به قسمت های کوچک تر می توانید کار را برای خود ساده تر و حرفه ای تر انجام دهید. اجازه بدهید با یک مثال این را بیشتر شرح دهیم:
فرض کنید شما سیستمی شامل ۱۰۰ برگه دارید که سیستم به صورت ایستا ساخته شده است٬ حال می خواهید یک قسمت در سربرگ صفحه ها را تغییر دهید. چه باید کرد؟ باید این کار را در تمام ۱۰۰ برگه انجام داد در صورتی که در سیستم پویا شما یک فایل برای سربرگ می سازید و آن را در بدنه فایل های دیگر وارد می کنید. حال برای تغییر تنها کافی است که آن فایل را تغییر دهید. البته در ادامه خودتان با انجام این کار، راز این نوع برنامه نویسی را کشف خواهید کرد.
نحوه قرار دادن فایلکلا چهار تابع برای وارد کردن یک فایل در فایل دیگر وجو ددارند که شامل:include()include_once()require()require_once()
برای استفاده از این توابع و وارد کردن فایلی با آنها باید به طریق زیر عمل کرد:
include('نام فایل / نشانی فایل');include(' files/header.html');
همانطور که مشاهده می کنید در داخل پرانتز ابتدا آدرس و بعد نام فایل آمده است. در اصل file پوشه ای است که شما فایل header.html را در آن قرار داده اید.
تمام توابع بالا عملیات قرار دادن را برای شما انجام می دهند اما با کمی تفاوت. فرق include() با require() این است که در هنگام بروز خطایی در برنامه، با استفاده کردن از include()، یک پیغام نشان داده می شود اما ادامه کدها اجرا و نشان داده می شوند در حالی که در require() ابتدا پیغام خطا نمایان و بعد اجرای کد قطع می شود.
نکته: معمولا در زمان هایی که می خواهیم اطلاعات مهمی را توسط این توابع وارد فایل دیگری کنیم، از تابع require() استفاده می کنیم. این بدین معنی است که ما می خواهیم فایل مورد نظر حتما وارد شده و در صورت بروز خطا یا درست وارد نشدن آن به ما هشدار دهد و از اجرای باقی کدها جلوگیری شود.
هر دوی این توابع نوع دیگری دارند که همراه با _once می آید. این توابع ضمانت می کنند که حتی در صورت دوباره فراخوانی فایل، آن فایل فقط یک بار وارد شود. once در زبان پارسی «یک بار» معنی می شود.
برای نوشتن نشانی فایل در قسمت ابتدایی پرانتز تابع، ما می توانیم به دو صورت عمل کنیم، یکی «مطلق» و دیگری «نسبی».
آدرس دهی مطلق: آدرس دهی مطلق نشانی فایل را از ریشه فهرست رایانه محاسبه و فراخوانی می کند. به طور مثال:
include (‘ C:/php/includes/header.html ’);
همان طور که می بینید نشانی از فهرست C: آغاز شده و به خود فایل header.html رسیده است.
آدرس دهی نسبی: در این نوع آدرس دهی، نشانی از خود فایلی که در آن هستید و تقاضای قرار دادن فایل را می کند آغاز می شود. مثلا:
include(' ../includes/header.html ');
فرض کنید فایل فراخوان کننده در داخل پوشه scripts با آدرس
C:/php/scripts/
قرار دارد و می خواهد فایل header.html را فراخوانی کند. در این صورت ابتدا باید از پوشه scripts بیرون رفته و بعد وارد include شود و باقی آدرس ها.
علامت /.. کار به عقب رفتن از پوشه کنونی را انجام می دهند و بعد به پوشه دلخواه باید راهنمایی شوند. به این شیوه آدرس دهی که نشانی از خود فایل فراخوان کننده آغاز می شود، آدرس دهی نسبی می گوییم. حال زمان آن رسیده که از اندوخته های یادگرفته استفاده کنیم.
قرار دادن فایل خارجیابتدا به داخل پوشه php که قبلا ساخته اید بروید و پوشه جدیدی با نام including files بسازید. وارد آن شوید و فایلی با نام index.php و پوشه ای با نام includes بسازید. در داخل پوشه includes هم فایل هایی با نام های header.html و footer.htmlو style.css بسازید. حال ما پوشه ای به نام including files داریم که در داخل آن فایل index.php و پوشه includes قرار دارند.
سربرگ یا header: در داخل این فایل کدهای زیر را بنویسید:
http://www.w3.org/1999/xhtml"> فایل های خارجی قسمت سربرگ خانه
همان طور که مشاهده می کنید در این فایل قسمتی از کدهای اچ تی ام ال که شامل برچسب ها می شوند، قرار دارد. این بدین خاطر است که این فایل در داخل فایل اصلی فراخوانی می شود و در بالای باقی کدها قرار می گیرد. سربرگ را بسته و محتوای آن را ثبت کنید.
footer یا پایین برگ: فایل footer.html را باز کنید و کدهای زیر را در داخل آن قرار دهید:
قسمت پایین برگه
در داخل این فایل برچسب های بستن html و body به همراه دیگر کدها قرار دارند. این فایل هم همانند فایل سربرگ در داخل فایل اصلی قرار داده می شود.
index.php: در این فایل ما باید دو فایل دیگر را فراخوانی کنیم و این کار را به صورت زیر انجام می دهیم:
قرار دادن فایل های دیگر در فایل اصلی
در این قسمت محتوای تارنما قرار می گیرد. این قسمت همان فایل ایندکس است.
همانطور که می بینید در ابتدا و پایان این صفحه دو برگه header و footer توسط تابع include وارد شده اند و هر آنچه در میان این دو تابع گذاشته شوند به صورت محتوا در داخل کادر اصلی نمایان می شوند.
حال فرض کنید شما ۱۰۰ برگه دارید که نیاز دارند این دو قسمت سربرگ و پایین برگ را نمایش بدهند. تنها کار وارد کردن این دو برگه به صورت بالا در داخل آنها است.
شیوه نمایش محتوا از طریق Style: بخش آخر که شیوه نمایش محتوا را تعیین می کند، مطابق معمول در فایل style.css قرار می گیرد.
body { background:#fafafa; color:#555; font:12px Tahoma,Arial, Helvetica, "bitstream vera sans", sans-serif;}/* header */#header { border:1px solid #bbb; height:130px; margin:10px auto; width:751px;}#header h1 { color:#888; font-size:24px; text-align:right;}/* navigation */#navigation { border-top:1px solid #ccc; margin:auto; width:740px;}#navigation ul{ overflow:hidden; list-style:none; margin:0px;}#navigation li { border-left:1px solid #bbb; float:right; width:130px; height:40px; list-style:none; margin:0 auto;} #navigation a { color:#555; display:block; line-height:40px; text-align:center; font-size:18px; text-decoration:none;}#navigation a:hover { background:#e3e3e3; color:#333;}#navigation .active { background:#e3e3e3; color:#777;}/* content */#content { border:1px solid #ccc; height:auto; min-height:400px; margin:10px auto; padding:0 0 20px; width:751px; text-align:right;}
#content h1 { font-size:16px; padding:20px 0 0;}#content p { padding:20px 20px 0;}/* footer */#footer { border:1px solid #ccc; height:100px; margin:0 auto; padding:10px 0; text-align:center; width:751px;}
این شیوه گذاری به ما اجازه می دهد که محتوا را هر طور که دوست داریم نمایش دهیم.
حال یک نگاه به خروجی کار بیاندازیم:
اتفاقی که در صورت استفاده از فایل های متفاوت در ساخت تارنما می افتد این است که مرورگر شما ابتدا به طور پیش فرض به سراغ فایل index می رود و شروع به خواندن کدهای داخل این فایل از بالای صفحه می کند.
نخست به تابع include() که فایل سربرگ را وارد می کند، برخورد می کند که با اجرای این تابع، محتوای فایل سربرگ در داخل فایل index آورده می شود.
سپس مرورگر محتوای زیرین این تابع را به نمایش می گذارد تا به تابع دیگر که باز هم include() است برسد.
این بار این تابع محتوای داخلی فایل پایین برگ را آورده و در فایل اصلی می گذارد. کاربر به هیچ عنوان از این انتقال ها با خبر نمی شود، چیزی که او می بیند همان چیزی است که در صورت داشتن تارنمای ایستا مشاهده می کرد.
فکر می کنیم که اکنون به معنی قرار دادن فایل های متفاوت در داخل یک فایل در طراحی یک تارنما آگاهی پیدا کرده اید.
نکته قابل توجه این است که شما می توانید به تعداد دلخواه از این شیوه استفاده کنید. مثلا فایل دیگری به نام ستون کناری ساخته و در داخل فایل اصلی آنرا وارد کنید. البته باید توجه داشته باشید که برای درست به نمایش در آمدن ستون کناری در صفحه، باید در فایل شیوه CSS، انتخابگرها و کدهای لازم را قرار دهید.
در ادامه دوره تلاش می کنیم که از این فن به صورت های متفاوتی استفاده کنیم. اما چیزی که شما باید در آخر این درس یاد گرفته باشید در ابتدا فهم دلیل این کار و درک چگونگی راحتی و مدیریت بهتر سیستم بعد از استفاده از این فن است.
در درس بعدی ما باز به سراغ ساخت فرم می رویم اما این بار کل روند کار را در داخل یک فایل انجام می دهیم. علاوه بر آن با فن های جدیدی در مورد کار با فرم ها آشنا می شویم که فرم های ما را به صورت حرفه ای تری در خواهند آورد.
درس ششم- ساخت و کار با فرم ها (پیشرفته)
در درس های قبلی با ساخت فرم آشنا شدیم و دیدیم که چطور می شود داده های فرم را به برگه دیگری انتقال داد.
در درس امروز می خواهیم این کار را به طور پیشرفته تری و با انجام این عمل در یک فایل انجام دهیم. منظور این است که گاهی شما نیاز دارید که داده ها را به برگه دیگری بفرستید اما زمانی هم است که بخواهید در یک برگه این داده ها را گرفته و نسبت به آن واکنشی نشان دهید. مهمتر از داشتن یک برگه یا دو برگه، شیوه واکنش به این داده ها براساس خود داده ها است و این هم می تواند تعریف دیگری از داشتن تارنمای پویا باشد.
کار با فرم در یک برگهمنظور از این نوع عملکرد در ساخت فرم، داشتن «فرم» و «بررسی کننده» آن در یک برگه است. این عمل فوایدی در بر خواهد داشت که در ادامه با آنها آشنا می شویم. نکته مهم در داشتن هر دو فاکتور در یک برگه استفاده از یک تابع شرطی برای ارزیابی عملکرد و نحوه کار با آن است. مثلا این تابع انتخاب می کند که داده ها را نمایش دهد یا خود فرم را و این انتخاب را تحت چه شرایطی بگیرد. در زیر به ساختار این تابع شرطی توجه کنید:
if ( /* فرم ارسال شد */){// دستورات بررسی کننده فرم} else {// نمایش فرم}
همانطور که مشاهده می کنید این شرطی، دو گزینه دارد. نخست اینکه آیا فرم ارسال شده که اگر ارسال شده باشد آن را بررسی می کند و دستورات داخل قطعه ابتدایی را انجام می دهد؛ دوم در صورت عمل ارسال فرم، به سراغ قطعه دوم رفته و فرم را نمایش می دهد. داشتن این شرطی برای ساخت فرم در یک برگه همراه بررسی و نمایش داده ها ضروری است.
شرط «فرم ارسال شد»اگر یادتان باشد در درس های قبلی فرمی داشتیم که داده ها را به برگه دیگر انتقال می داد، اما چه زمانی این انتقال صورت می گیرد؟
در داخل هر فرم «دکمه ای» با نام ارسال یا Submit وجود دارد. «اگر فرم ارسال شد» یعنی اگر کاربر دکمه «ارسال» را بعد از پر کردن فرم فشار داد.
مثلا شرط مقابل را در نظر بگیرید:
if ( isset( $_POST['submit'] ) ) {// دستورات کار با داده های فرم} else {// نمایش فرم }
تابع isset( $_POST['submit'] ) بررسی می کند که آیا دکمه ارسال یا Submit فشار داده شده است یا نه. از این تابع برای بررسی انتخاب یا عدم انتخاب دکمه ارسال فرم استفاده می شود.
بهتر است با ساخت فرمی این مفهوم را بیشتر بررسی کنیم. این فرم درست مانند فرم های درس های قبلی است با این تفاوت که از این فن جدید در آن استفاده می کنیم.
برای اینکه از داشته هایمان تا به امروز هم استفاده کنیم، ساخت این فرم را در ادامه درس قبلی و در قالب اضافه کردن یک برگه که حامل فرم است انجام می دهیم. فرم ثبت نام در تارنما را حتما قبلا دیده اید؛ بیایید در اینجا یک فرم ثبت نام ساده بسازیم و به تارنمایی که در درس قبل داشتیم اضافه کنیم.
در درس قبل تارنمایی درست کردیم از چند بخش به شرح زیر:سربرگ header.htmlپایین برگ footer.htmlصفحه اصلی index.phpفایل شیوه style.css
حال به این تارنما یک برگه دیگر به نام «ثبت نام» اضافه می کنیم و در آن برگه فرم ثبت نام را نمایش می دهیم. در کنار آن، بررسی کننده فرم ثبت نام را هم در همان برگه می گنجانیم تا پاسخ ها یا هشدارها در همان برگه ثبت نام در بالا یا پایین فرم، به نمایش درآیند.
پوشه جدیدی به نام ثبت نام = register بسازید و محتوای پوشه ای که در درس قبل با نام Including Files ساختیم را در آن رونویسی و بازنویسی کنید.
حال باید در پوشه register یک پوشه به نام include شامل سربرگ، پایین برگ و فایل شیوه، و فایلی به نام index داشته باشید. فایل جدیدی در کنار فایل index به نام register.php بسازید. در ادامه با کدهایی که باید در آن قرار دهیم و همین طور تغییراتی که باید به باقی فایل ها بدهیم، اشاره می کنیم.
برگه ثبت نامابتدا کدهای زیر را در داخل این فایل رونویسی و بازنویسی کنید:
include ('includes/header.html'); ?> ثبت نام if (isset($_POST['submit'])) {$name = $_POST['name'] ;$username = $_POST['username'];$password = $_POST['password'];$email = $_POST['email'];if ( !empty($name) && !empty($username) && !empty($password) && !empty($email) ){$respond = 'ثبت نام شما با موفقیت انجام شد'; }else { $respond = ' لطفا تمام گزینه ها را پر کنید'; }echo $respond ; }?> لطفا فرم زیر را پر کنید نام کامل شناسه رمز رایانامه
شرح کدهای این برگهاکنون این برگه شامل هر دو بخش فرم و بررسی کننده آن است.
در ابتدا با ساختن متغیری نام هر برگه را در آن ذخیره کردیم تا در زمان وارد کردن سربرگ از آن استفاده کنیم. این کار به ما اجازه می دهد که نام هر برگه را با توجه به عملکرد آن برای تیتر برگه در مرورگر بفرستیم. این متغییر در سربرگ استفاده خواهد شد، تنها نکته این است که باید قبل از وارد کردن سربرگ در این برگه، این متغییر مقداردهی شود.
بعد از آن سربرگ را وارد کردیم که از تابع include استفاده شده است.
حال نوبت شرطی است که بررسی انتخاب یا عدم انتخاب دکمه ارسال از طرف کاربر را برایمان انجام می دهد. در داخل این شرط ابتدا داده های ارسالی را به داخل متغیرهایی می ریزیم که استفاده کردن از آنها را در ادامه برایمان راحت تر کنند.
حال شرط دیگری را در داخل شرط قبلی می گذاریم که از پر بودن تمام متغیرها مطمئن شویم. اگر تمام متغیرها پر بود، این یعنی تمام موارد توسط کاربر نوشته شده است و پیام «ثبت نام شما با موفقیت انجام شد» را در متغیری دیگری بنام respond می گذاریم.
در غیر این صورت در آن متغیر پیام «لطفا تمام گزینه ها را پر کنید» گذاشته می شود تا به کاربر هشدار دهد که باید تمام موارد را بنویسد و بعد از آن متغیر را چاپ می کنیم که بسته به نسبت به پر بودن یا نبودن موارد، مقدارش متفاوت است.
حال نوبت خود فرم است، البته این فرم مانند همان فرم های قبلی است با این تفاوت که مقدار گزینه action به نام همین فایل است. چرا که ما می خواهیم بررسی داده ها توسط همین فرم انجام شود.
در آخر هم فایل بالای برگه را وارد کردیم.
برگه سربرگ headerبرای اینکه برگه جدید «ثبت نام» در تارنما قابل دیدن باشد، باید پیوند آن را به قسمت ناوبری تارنما «navigation bar» اضافه کنیم. پس تغییراتی در این فایل می دهیم.
http://www.w3.org/1999/xhtml"> درسنامه خانه ثبت نام
شرح برگهاین برگه درست مانند برگه درس قبلی است البته با چند تغییر.
ابتدا که در از متغییری که در قسمت قبلی شرح دادیم استفاده کردیم تا تیتر در مرورگر با توجه به عمل برگه نمایش یابد.
نکته بعدی اضافه کردن پیوند به برگه «ثبت نام» است که به صورت زیر انجام می شود.
ثبت نام
این تکه کد یک دکمه دیگر به ناوبری تارنما اضافه می کند که مقصد این گزینه به برگه ثبت نام ختم می شود.
بعد از انجام این تغییرات اگر به تارنما نگاه کنید این دکمه را خواهید دید.
برگه شیوهبرچسب های لازم در این برگه قبلا در درس های دیگر آورده شده است. کافی است که آنها را در این برگه وارد کنید. برای این کار کدهای درس Including Files و کدهای درس Form را وارد این برگه کنید. البته تنها تغییر در انتخابگر ارسال است که در زیر می بینید.
.submit {text-align:center; border:1px solid #ddd; color:#039; width:20%; margin:auto 20px auto auto;}
از آنجایی که هدف این درس آموزش سی اس اس نیست و پیش فرض ما هم دانش این شیوه نویسی از طرف کارآموزان است، در اینجا بیشتر به این بخش نمی پردازیم. اما شما می توانید شیوه نمایش را به سلیقه خود تغییر دهید. تنها کافیست که مقادیر انتخابگرها را تغییر دهید.
نتیجه کار باید چیزی شبیه تصویر زیر گردد.
فرم (چسبنده) حفظ کننده مقدار Sticky Formفرم چسبنده در همان فرم استاندارد در اچ تی ام ال است منتها با این تفاوت که در این فرم قابلیت نگهداری مقادیر نوشته شده در کادر اضافه می شود.
فرض کنید که کاربر تارنمای شما در هنگام ثبت نام دچار خطا شود و سیستم پیغام بازگشت و درست کردن آن مقدار را بدهد. خب کاربر باید دوباره تمام موارد را بنویسد اما با استفاده از فرم چسبنده سیستم می تواند موارد را در خود حفظ کرده و در قسمت های نوشته شده دوباره نمایش دهد. آنگاه در صورت بروز خطا، کاربر فقط قسمت های مشکل دار را دوباره نویسی می کند.
بهتر است این کار را با فرم ساخته شده در همین درس انجام دهیم. به کدهای زیر توجه کنید:
لطفا فرم زیر را پر کنید نام کامل " /> شناسه " /> رمز رایانامه " />
این قسمت فرم در برگه ثبت نام است. اگر توجه کنید می بینید که در داخل برچسب های input المان جدیدی با نام value وارد شده است. value در اصل مقدار پیش فرض است که در داخل کادر نمایان می شود. با کمک value و شرطی که داخل آن می گذاریم ما می توانیم در صورت نوشته شدن کلمه ای، آن را دوباره در داخل کادر نمایش دهیم تا کاربر نیاز به دوباره نویسی نداشته باشد.
نکته: معمولا این کار در مورد قسمت «رمز» به دلیل رعایت نکات امنیتی انجام نمی شود.
اجازه بدهید یک نگاه دقیق تری به یکی از این المان ها بی اندازیم.
" />
همانطور که مشاهده می کنید، در این کد که یک کادر متنی اضافه می کند، المان جدیدی اضافه شده است: value
در داخل این المان یک شرط نیز گذاشته شده است:
if ( isset($_POST['name']) ) { echo $_POST['name']; }
که می گوید: اگر نوشته ای وارد این کادر شد، آن نوشته را در همین کادر چاپ کن. فکر می کنیم حال به قدرت و کاربری شرطی ها بیشتر اعتقاد پیدا کرده اید، نه؟
در اینجا این درس هم به پایان می رسد. در درس آینده به سراغ توابع و چگونگی ساخت آنها می رویم.
:
function نام تابع () {// دستورات}
ابتدا کلمه تابع (function) نوشته و بعد از آن نام تابع را می نویسید. دستورات تابع در داخل بلوک آن قرار می گیرند. به تابع زیر توجه کنید:
function add(){$X = 3 + 2 ;print $x ; // 5}
همان طور که می بینید تابعی با نام add() نوشته شده که در آن اعداد ۲ و ۳ با هم جمع و در متغیر $X ریخته می شوند، در آخر تابع هم متغییر $x چاپ می شود. تا اینجا تابعی نوشته شده است اما این تابع تا زمانی که فراخوانی نشود، به تنهایی کاری نمی کند.
فراخوانی تابعهمانطور که گفته شد تابع این توانایی را به ما می دهد که از دوباره نویسی کدها جلوگیری کنیم و یک بار با نوشتن، آن را در زمان های مورد نیاز استفاده کنیم. قسمت دوم تعریف تابع به استفاده از تابع در زمان های مورد نیاز به هر تعدادی که خواستیم اشاره می کند، این کار را فراخوانی تابع می گوییم. به مثالی که در بالا زدیم دوباره توجه کنید:
function add() {$X = 3 + 2 ;print $x ; // 5}add(); // فراخوانی تابع => 5?>
فراخوانی تابع با عبارت add() که همان نام تابع است انجام گرفت و با فراخوانی آن کدهای تابع عمل کرده و نتیجه را چاپ می کند. نکته قابل توجه این است که شما می توانید به هر تعدادی که خواستید از این تابع استفاده کنید و یا به تعبیر دیگر آن را فراخوانی کنید و هیچ محدودیتی در آن نیست.
حال فکر می کنیم که به قدرت تابع پی بردید، یعنی نوشتن یک بار و استفاده کردن به تعداد دلخواه در هر زمان که خواستیم.
فرستادن پارامتر به تابعپارامتر مقداری است که به تابع فرستاده می شود تا تابع در درون بلوک کدهای خود از آن استفاده کند. تابعی که در قسمت قبلی نوشتیم هیچ مقداری را به صورت پارامتر دریافت نمی کرد و فقط با مقادیر تعریف شده در داخل کدها کار می کرد، خروجی این تابع ثابت است و همیشه مقدار 5 را خواهد نوشت.
حال اگر بخواهیم تابع را طوری بنویسیم که مقادیر را به صورت پارامتر از ما بگیرد و بعد عملیات جمع را انجام دهد، ما می توانیم خروجی های متفاوت و با توجه به پارامترهای ارسالی بگیریم. مثلا به تابع زیر دقت کنید:
function add( $x , $y ) {$z = $x + $y ;print $z ; // خروجی با توجه به پارامترهای ارسالی است}add(۵ , ۶); // فراخوانی تابع با ارسال دو مقدار به صورت پارامتر ?>
در زمان فراخوانی تابع هر مقداری که به صورت پارامتر به تابع ارسال کنیم، حاصل جمع آن دو عدد را خواهیم داشت. این به ما اجازه می دهد که تابعی مستقل از مقادیر و تنها متمرکز به عملیات خاصی داشته باشیم. به طور مثال می توانیم فراخوانی را به شکل های زیر انجام دهیم:
add(۱ , ۲); // ۳add(۳ , ۹); // ۱۲add(۱۱ , ۶۸); // ۷۹
نکته: در هنگام فراخوانی تابع حتی می توان پارامترها را به صورت متغیر به تابع ارسال کرد:
add( $a , $b );
در این حالت این دو پارامتر می توانند هر عددی را ارسال کنند. خوبی این کار به این است که پارامترها می توانند نتیجه یک عمل دیگر باشند و یا اعدادی باشند که توسط کاربر در کادرهای فرم نوشته شده باشند.
تارنمایی که در درس های قبلی درست کردیم، یادتان هست؟ بیایید برگه دیگری به آن اضافه کنیم و در آن برگه با تابعی که می نویسیم چند عملیات انجام دهیم.
پوشه جدیدی با نام function بسازید و محتوای پوشه register را در آن قرار دهید. این کار برای این انجام می شود که شما در حین یادگیری مفاهیم، قدم به قدم یک تارنما داشته باشید با نسخه های متفاوت که در هر نسخه به مفهومی اشاره شده باشد.
برگه تابع function.phpدر داخل پوشه function فایلی با نام function.php بسازید و کدهای زیر را در داخل آن بنویسید:
$page_title = 'تابع';include ('includes/header.html'); ?> تاریخ تولد /* انگلیسی به فارسی */function convert($string) { $persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'); $num = range(0, 9); return str_replace($num, $persian, $string);}function calendar() { echo ''; for ($year = 1300; $year echo "" . convert($year) . " "; }
echo ''; $months = array (1 => 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'); echo ''; foreach ($months as $key => $value) { echo "$value "; }
echo ''; echo ''; for ($day = 1; $day echo "" . convert($day) . " "; } echo '';} // End of the function definition.echo '';// Call the function.calendar();echo '';?>
اتفاقی که در اینجا می افتد این است که این برگه برای شما یک کادر تاریخ به همراه روز، ماه و سال می سازد. در درس قبلی ما یک فرم ثبت نام نوشتیم. خوب فرم ثبت نام نیاز به تاریخ زادروز هم دارد:
برای پیچیده نشدن امر ما این قسمت را به طور مجزا گذاشتیم اما در آینده در درس های پایانی به ساخت یک فرم کامل ثبت نام خواهیم پرداخت.
توضیح کدهابا قسمت بالای برگه قبلا آشنا شده ایم، پس یک راست سراغ کدهای داخل می رویم. در ابتدای این برگه تابعی نوشته شده که یک پارامتر را دریافت می کند.
(function convert($string کاری که این تابع می کند این است که با گرفتن یک عبارت اعدادی که به زبان انگلیسی نوشته شده اند را به زبان فارسی تبدیل می کند. این تابع از سه قسمت تشکیل شده است:
$persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
این خط کد، یک متغیر می سازد که به صورت آرایه تعریف می شود و در داخل آن اعداد را از ۰ تا ۹ قرار می دهد.
$num = range(0, 9);
این دقیقا همان کار بالا را برای اعداد انگلیسی انجام می دهد اما با کمک تابع range() یادتان هست؟ در قسمت آرایه ها در مورد این تابع حرف زدیم.
return str_replace($num, $persian, $string);
در این قسمت از یکی از توابع از پیش تعریف شده پی اچ پی استفاده شده است. تابع str_replace() سه پارامتر را قبول می کند. اعداد انگلیسی، اعداد فارسی و عبارتی که به تابع convert فرستاده شده و بعد اعداد انگلیسی را در عبارت فرستاده شده با اعداد فارسی عوض می کند. در اصل ما تابعی ساخته ایم که از تابع دیگری که از قبل تعریف شده، درون آن استفاده کرده ایم.
بعد از این تابع به تابع دیگری می رسیم با نام calendar(). این تابع هیچ ورودی به عنوان پارامتر دریافت نمی کند و فقط خروجی برای ما چاپ می کند. برای ساختن یک کادر زادروز نیاز به سه قسمت است: روز، ماه و سال؛ که در این تابع به طور مجزا هر کدام تعریف شده اند.
echo ''; for ($year = 1300; $year echo "" . convert($year) . " "; }
echo '';
این قسمتی است که با استفاده از حلقه for، بخش سال را برای مان چاپ می کند. این سال ها از ۱۳۰۰ شروع و به ۱۳۹۰ ختم می شود. دقت کنید که این اعداد به زبان انگلیسی هستند پس در زمان چاپ آن از تابع تبدیل کننده convert که قبلا نوشتیم استفاده می کنیم تا کار تبدیل را انجام دهد.
$months = array (1 => 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند');echo ''; foreach ($months as $key => $value) { echo "$value "; }echo '';
در این قسمت به کمک تابع array() ماه های ایرانی را در آرایه ای قرار داده و با کمک حلقه آنها را چاپ می کنیم.
echo ''; for ($day = 1; $day echo "" . convert($day) . " "; }echo '';
این قسمت شبیه سال است که روز را برایمان چاپ می کند.
خب تا به اینجا تابع نوشته شده و آماده استفاده است، پس با یک فراخوانی از آن استفاده می کنیم:
echo '';calendar();echo '';
نکته: برای ساخت این زاد روز انگار، ما از برچسب های اچ تی ام ال با نام select استفاده کردیم که یک کادر با قابلیت نگهداری مقادیر و به صورت کشویی به پایین درست می کند.
توابع با پارامتر پیش فرضکار دیگری که در هنگام ساخت یک تابع می توانید انجام دهید، دادن یک مقدار پیش فرض به یک پارامتر یا متغیر است. با این کار در صورتی که هنگام فراخوانی، مقداری را به پارامتر نفرستید، از مقدار پیش فرض استفاده می کند و اگر مقداری را به عنوان پارامتر بفرستید، از مقدار شما استفاده می کند.
function say_hello( $name , $message = ' درود '){echo "$message, $name" ; }say_hello('پیمان'); // درود ، پیمانecho '';say_hello('پیمان' , 'سلام' ); // سلام ، پیمان
در زمان فراخوانی ابتدایی فقط یک پارامتر فرستاده می شود و پیغام همراه مقدار پیش فرض چاپ می شود. اما در فراخوانی دوم که با دو مقدار تابع را می خواند، در زمان چاپ از این دو مقدار استفاده می کند و مقدار پیش فرض را در نظر نمی گیرد.
بازگشت مقدار از تابعدر توابعی که تا به اینجا مثال زدیم، به جز تابع convert()، همه آنها مقدار خروجی را چاپ می کردند. حال شرایطی مانند تابع convert() را در نظر بگیرید که نیاز داریم تابع، عملیاتی انجام دهد و بعد خروجی را به ما باز گرداند تا در جای دیگری از آن استفاده کنیم. برای این کار از عبارت return استفاده می کنیم. به مثال زیر توجه کنید:
function add ( $x , $y ){$z = $x + $y ;return $z ;}$num = add( 2 , 3 ) ;echo $num * 3 ;
اینجا ابتدا مقدارهایی فرستاده شده، بعد در تابع آنها جمع و در درون متغیر دیگری $z ریخته می شوند. در آخر هم تابع مقدار را توسط متغیر باز می گرداند.
بعد از فراخوانی تابع، مقدار بازگردانده شده به داخل متغیر $num ریخته شده و در ادامه از آن استفاده می شود.
نکته ۱: برای اینکه چند مقدار را به عنوان خروجی باز گردانیم، باید از آرایه برای بازگرداندن استفاده کنیم:
return array ($x , $y );
نکته ۲: در ساخت توابع باید به این نکته توجه کرد که توابع برعکس متغیرها به بزرگی و کوچکی نام تابع اهمیت نمی دهند. مثلا همه این فراخوانی ها یک تابع را صدا می زنند:
add( $x , $y);ADD( $x , $y);Add( $x , $y);
خب این هم از توابع؛ در درس های بعدی به سراغ پایگاه داده ها MySQL می رویم تا خود را به این فن هم مجهز کنیم. بعد از یادگیری پایگاه داده ها موضوع از این هم جالب تر خواهد شد
برچسبها: پی اچ پی, php
تا اینجا در زمانی که خواستیم مقداری برای مان نگهداری شود تا در طول برنامه از آن استفاده کنیم٬ این مقدار را درون متغیرها که خانه های خالی حافظه هستند، قرار دادیم. اما این متغیرها تنها قادرند که یک مقدار را برایمان ذخیره کنند؛ پس اگر خواستیم چندین مقدار را ذخیره کنیم چی؟
اینجاست که آرایه ها به کمک ما می آیند. در این درس به شرح آرایه ها و چگونگی استفاده از آنها برای ذخیره چندین متغیر می پردازیم.
آرایه هاآرایه ها یک نوعی از متغیرها هستند که می توانند چند داده را در قالب یک نام ذخیره کنند. فرض کنید که می خواهید اسامی کارمندان یک شرکت را به طور موقت ذخیره کنید تا در طول برنامه از آنها بتوانید استفاده کنید.
اگر برای این کار از متغیرهای آرایه ای استفاده نکنیم، باید برای هر کدام از این اسامی یک متغیر معمولی تعریف کنیم که اگر تعداد آنها زیاد باشد، چه بسا که کار نشدنی شود. حال آن که با آرایه، تمام این اسامی تحت یک نام آرایه ای ذخیره می شوند و در زمان نیاز با یک اندیس و نام آرایه به آن دسترسی پیدا می کنیم.
هر آرایه از دو بخش تشکیل شده: نام آرایه و اندیس.
نام آرایه که مشخص است و در زمان ایجاد آن٬ خود برنامه نویس انتخاب می کند. اما اندیس، کلید یا مقداری است که به یکی از مقادیر ذخیره شده در آرایه اشاره می کند. مثلا وقتی که پنج مقدار را در آرایه ریختیم، برای شناختن هر کدام از این مقادیر یک اندیس منحصر به فرد وجود دارد که به مقدار خاصی اشاره می کند.
ساختار آرایهپی اچ پی دو نوع آرایه را حمایت می کند٬ یکی آرایه با اندیس عددی٬ یعنی اندیس اشاره گر به مقدار عدد است و دیگری آرایه با اندیس کاراکتری یا کلمه ای که اندیس خود یک کاراکتر یا کلمه تعریف می شود. در زیر نمونه هایی از این دو نوع را می بینید:
$name[2]$name[ ' staff ' ];
نکته ۱: قوانینی که برای نام گذاری متغیرها بیان شدند، برای آرایه ها هم برقرار هستند.
نکته ۲: به خاطر اینکه یک آرایه، مقادیر بیشماری را در خود نگه می دارد، طریقه چاپ آن با یک متغیر معمولی فرق دارد.
نکته ۳: پی اچ پی خود از آرایه های از قبل تعریف شده به نام متغیرهای فرا جهانی یا Super Global Variables استفاده می کند. نمونه هایی از این دست آرایه های از پیش تعریف شده را قبلا دیده اید. مثلا:
$_GET, $_POST, $_REQUEST ...
طرز ساخت آرایهدر زبان پی اچ پی راه های متفاوتی برای ایجاد یک آرایه وجود دارد، اما در کل دو راه اصلی است که این کار را برایمان مشخص می کند که با مثال برایتان شرح داده خواهد شد.
نوع اولتعریف و دادن مقدار به آرایه در زمان ایجاد آن. به مثال زیر توجه کنید که ابتدا آرایه تعریف و همزمان بدان مقدار داده می شود:
$name[] = ' حمید ' ;$name[] = ' سعید ' ;$name[ ' staff3 ' ] = ' پیمان ' ;
در این حالت اندیس بطور خودکار از 0 تا ... به آرایه اضافه می شود، یعنی مقادیر برای فراخوانی باید با کلید خود خواسته شوند، و یا می توان از کلید کلمه ای استفاده کرد. توجه کنید:
$name[0] // حمید $name[1] // سعید $name[' staff3 '] // پیمان
حال مقدار نخستین آرایه با کلید 0 می شود 'حمید'، دومی می شود 'سعید' و سومی هم 'پیمان'. برای چاپ کردن این مقادیر هم می توانید به صورت یکی از روش های زیر عمل کنید:
echo $name[0] ;echo $name[1] ;echo $name[' staff3 '] ;echo $name[0] . ' ' . $name[1] . ' ' . $name[' staff3 '] ;
نوع دومدر نوع دوم به جای تعریف یک آرایه به طور یکی یکی، می توانید با کمک تابع array() کل مقادیر را یکجا در آرایه قرار دهید که این قابلیت هم به چند شیوه قابل اجرا است. مانند:
$name = array ( ‘حمید ’ , ‘ سعید ’ , ‘ پیمان ’) ;
خوب مقادیر به ترتیب با کلیدهای 0 و 1 و 2 وارد آرایه می شوند.
$name = array ( 1 => ‘حمید ’ , ‘ سعید ’ , ‘ پیمان ’) ;
در این حالت ما عدد کلید شروع شونده را از 0 به 1 تغییر دادیم تا مقادیر با کلید 1 شروع به ذخیره شدن کنند. پس مقادیر به ترتیب با کلیدهای 1 و 2 و 3 وارد آرایه می شوند.
$name = array (' staff1' => 'حمید ' , ' staff2' => ' سعید ' , 'staff3' => ' پیمان ' ) ;
در این حالت ما از کلید کلمه ای استفاده کردیم که به جای عدد، مقادیر با کلیدهایی که تعریف می کنیم وارد شوند. توجه کنید که در این حالت برای فراخوانی مقداری از آرایه باید نام کلید را بدانید؛ مثلا فرض کنید ما می خواهیم نام سعید را چاپ کنیم که باید به شیوه زیر باشد:
echo $name[ ' staff2 ' ] ;
نکته ۱: از تابع array() می توانیم برای تعریف نخستین یک متغیر آرایه ای استفاده کنیم مانند:
$name = array();$name[] = ' سعید ' ;
همانطور که می بینید در جمله ابتدایی، متغیر $name را به صورت یک آرایه تعریف کردیم و در جمله دوم بدان مقدار دادیم.
نکته ۲: از تابع range() می توانیم برای ایجاد آرایه ای متشکل از یک سری اعداد پشت سر هم استفاده کنیم.
$number = range ( 1 , 20 );
در این حالت ما آرایه ای تعریف کردیم که اعداد 1 تا 20 را با کلید 0 تا 19 در خود جا داده است.
echo $number [0] ; // خروجی می شود 1echo $number [10] ; // خروجی می شود 11echo $number [19] ; // خروجی می شود 20
به خاطر شروع شدن کلید از 0، پس عدد 1 در آرایه ای با کلید 0 ذخیره می شود.
دسترسی به آرایه هادر استفاده کردن از آرایه و چاپ آن دیدیم که این عمل چطور با دانستن کلید آرایه انجام شد. اما این راه فقط برای دسترسی به یک آرایه است. راه دیگری برای دسترسی همزمان به همه آرایه ها وجود دارد که از تابع foreach() استفاده می شود. ساختار این تابع به شکل زیر است:
foreach ( $array as $value ) {// دستورات برای انجام و استفاده از مقادیر}
این تابع دارای دو پارامتر است که ابتدایی به نام آرایه شما اشاره دارد و دومی به تک تک مقادیر در آرایه. مثلا اگر بخواهیم اعدادی از 1 تا 20 را چاپ کنیم، می توانیم بنویسیم:
$number = range ( 1 , 20 ) ;foreach ( $number as $num ) {echo $num . ' ' ;} // 1 2 3 4 5 ........ 20
دقت کنید که در زمان چاپ اعداد، بعد از هر عدد یک فاصله با کمک . ' ' گذاشتیم. علاوه بر این می توانیم در داخل ' ' بگذاریم که اعداد را در حالت ستونی چاپ کند:
echo $num . ' ' ;
نوع دیگر استفاده از این تابع گذاشتن کلید در آن است. توجه کنید:
$name = array (' staff1' => 'حمید ' , ' staff2' => ' سعید ' , 'staff3' => ' پیمان ' ) ;foreach ( $name as $key => $num ) {echo $num . ' ' ;}
مرتب کردن آرایه هابرای مرتب کردن آرایه ها براساس حروف الفبا از تابع sort() استفاده می شود. ما در پی اچ پی قادر هستیم که آرایه ها را براساس چند فاکتور مرتب کنیم.
ابتدا اینکه آرایه را براساس مقدار داخل آن یا براساس کلیدهای آن مرتب کنیم.
$name = array (' staff1' => 'حمید ' , ' staff2' => ' سعید ' , 'staff3' => ' پیمان ' ) ;sort($name);foreach ( $name as $key => $num ) {echo $num . ' ' ;}
نکته: در این حالت مرتب سازی با استفاده کردن از تابع sort()، این تابع کلیدهای وارد شده برای آرایه را پاک کرده و مجددا خود از 0 تا... کلیدگذاری می کند. پس اگر برای آرایه خود کلید کلمه ای انتخاب کردید، هرگز از این تابع استفاده نکنید. برای دیدن این تغییرات کافیست که مطابق زیر عمل کنید:
$name = array ('staff1' => 'سعید' , 'staff2' => ' حمید ' , 'staff3' => ' پیمان ' ) ;sort($name);foreach ( $name as $key => $num ) {echo $key . ' => ' . $num . ' ' ;}
مشاهده می کنید که کلیدهای چاپی آنهایی که تعریف کردیم نیستند؟
مرتب کردن با حفظ کلیدهابرای مرتب کردن آرایه و نگهداشتن کلیدها می توانید از تابع asort() استفاده کنید به گونه ای که این تابع کلیدهای شما را دست نخورده باقی می گذارد.
$name = array ('staff1' => 'سعید' , 'staff2' => ' حمید ' , 'staff3' => ' پیمان ' ) ;asort($name);foreach ( $name as $key => $num ) {echo $key . ' => ' . $num . ' ' ;}
مرتب کردن براساس کلیدهااین حالت زمانی استفاده می شود که ما بخواهیم آرایه را براساس کلیدها و نه براساس مقادیر مرتب کنیم:
$name = array ('staff' => 'سعید' , 'manager' => ' حمید ' , 'customer' => ' پیمان ' ) ;ksort($name);foreach ( $name as $key => $num ) {echo $key . ' => ' . $num . ' ' ;}
نکته: برای نمایش یک جای یک آرایه در زمان هایی که می خواهید رفع اشکال کنید، می توانید مانند زیر از توابع اشاره شده استفاده کنید.
$name = array ( 'staff1' => 'سعید' , 'staff2' => ' حمید ' , 'staff3' => ' پیمان ' ) ;print_r($name);echo "";var_dump($name);
ساختار for و whileحلقه ها ساختاری در زبان برنامه نویسی هستند که به شما اجازه دسترسی به همه مقادیر را به طور مرتب می دهند. در قسمت قبلی ما از یک نوع این حلقه ها استفاده کردیم: foreach() یادتان هست!
دو نوع دیگر از حلقه ها که در اینجا معرفی می کنیم for و while هستند.
حلقه forاین نوع حلقه دارای سه پارامتر است که شامل نقطه شروع حلقه٬ شرط پایانی حلقه و شمارش اندیس یا کلید حلقه می شود.
for ( نقطه شروع ; شرط پایانی ;شمارش اندیس ){// دستور}
اجازه بدهید با یک مثال کارکرد for را بیشتر شرح دهیم. فرض کنید می خواهیم که از شماره ۱ تا ۱۰ را چاپ کنیم:
for ($i = 1 ; $i {echo $i . ' ' ;}
جمله ابتدایی پارامتر این حلقه 1 = i است که همان اندیس شمارشگر ماست٬ بعد از آن شرط پایانی حلقه است که می گوید تا زمانی که اندیس کوچک تر یا برابر ۱۰ شود. در آخر هم شمارشگر که هر بار که حلقه اجرا می شود یکی به آن اضافه می کند.
نکته: مورد استفاده از این نوع حلقه زمانی است که ما تعداد تکرار حلقه را می دانیم. به طور مثال در قسمت قبل ما می دانستیم که می خواهیم از شماره 1 تا 10 را چاپ کنیم.
حلقه whileاین حلقه هم مانند حلقه قبلی همان کار تکرار براساس شرط را انجام می دهد، ولی با یک تفاوت بزرگ و آن این است که در این نوع حلقه تعداد یا میزان تکرار را نمی دانیم. پس بر این اساس جایگاه استفاده از این نوع حلقه تغییر می کند. اجازه بدهید ابتدا مثال قبلی را توسط این حلقه بنویسیم تا تفاوت این دو مشخص تر شود.
$i =1;while ( $i print $i . ' ' ;$i++;}
نکته: پی اچ پی نوع دیگری از حلقه دارد به نام do...while که شیوه کار آن درست مثل حلقه while است. با این تفاوت که در حلقه while در صورت درست نبودن شرط، دستورات داخل حلقه اجرا نمی شود اما در do...while حتی در صورت نادرستی شرط، باز هم اجرا می شود اما تنها برای یکبار.
$i = 1 ;do {print $i . ' ' ;$i++;} while ( $i
اگر در این مثال متغیر $i = 11 شود، یکبار این عدد چاپ می شود و بعد در شرط به خاطر برقرار نبودن شرط که باید کمتر از ۱۰ باشد٬ حلقه متوقف می شود.
$i = 11 ;do {print $i . ' ' ;$i++;} while ( $i
با به پایان رساندن این بخش ما مقدمات یادگیری اصول ابتدایی برای برنامه نویسی در زبان پی اچ پی را به پایان بردیم.
نکته ای که لازم می دانیم در اینجا ذکر کنیم این است که شما نیازی ندارید در این زمان تمام قسمت های قبلی را حفظ کنید، بلکه در طول دوره و با انجام مثال های بهتر و عملی و نزدیک تر به شیوه برنامه نویسی، در دنیای بیرون این اصول به طور خود به خود به مغز شما راه می یابند.
پس نگران نباشید، فقط تلاش کنید که مطالب را بفهمید و با تمرین لازم، خروجی های داده شده را بدست آورید که نشانه درستی عملکرد شما از دید برنامه نویسی است.
در درس بعدی ما به سراغ طراحی و ساخت تارنمای پویا رفته و از تکنیک های پی اچ پی در آن یاد خواهیم کرد. این تکنیک ها شامل چگونگی استفاده از چندین فایل برای ساخت یک تارنما و... می شود.
درس پنجم- استفاده از فایل های متفاوت (فایل های خارجی)
با اطلاعاتی که تا به اینجا کسب کردیم٬ حال زمان آن رسیده تا با مفاهیم مهمتر و جالب تر پی اچ پی آشنا شویم.
یکی از این مفاهیم٬ استفاده کردن یا وارد کردن فایل هایی خارجی به درون فایل اصلی خود، در پی اچ پی است. عبارت تارنمای پویا در اصل با بکارگیری این مفاهیم معنی پیدا می کند. حال اگر بخواهیم به طور حرفه ای تر تارنمای پویا را شرح دهیم٬ می گوییم: یک تارنمای پویا سیستمی است که از نظر نگهداری و تولید محتوا راحت تر و در مقابل کاربر به صورت تعاملی عمل می کند. این بدین معنی است که شما می توانید محتوا را براساس پاسخی به درخواست کاربر تعیین کنید.
قرار دادن چند فایل در یک فایلتا به امروز همه کدها چه اچ تی ام ال و چه پی اچ پی در یک فایل قرار داشت. اما امروزه برای توسعه تارنماهای پیچیده تر این کار کمی اشتباه و نادرست است. شما با تقسیم فایل بزرگ تر به قسمت های کوچک تر می توانید کار را برای خود ساده تر و حرفه ای تر انجام دهید. اجازه بدهید با یک مثال این را بیشتر شرح دهیم:
فرض کنید شما سیستمی شامل ۱۰۰ برگه دارید که سیستم به صورت ایستا ساخته شده است٬ حال می خواهید یک قسمت در سربرگ صفحه ها را تغییر دهید. چه باید کرد؟ باید این کار را در تمام ۱۰۰ برگه انجام داد در صورتی که در سیستم پویا شما یک فایل برای سربرگ می سازید و آن را در بدنه فایل های دیگر وارد می کنید. حال برای تغییر تنها کافی است که آن فایل را تغییر دهید. البته در ادامه خودتان با انجام این کار، راز این نوع برنامه نویسی را کشف خواهید کرد.
نحوه قرار دادن فایلکلا چهار تابع برای وارد کردن یک فایل در فایل دیگر وجو ددارند که شامل:include()include_once()require()require_once()
برای استفاده از این توابع و وارد کردن فایلی با آنها باید به طریق زیر عمل کرد:
include('نام فایل / نشانی فایل');include(' files/header.html');
همانطور که مشاهده می کنید در داخل پرانتز ابتدا آدرس و بعد نام فایل آمده است. در اصل file پوشه ای است که شما فایل header.html را در آن قرار داده اید.
تمام توابع بالا عملیات قرار دادن را برای شما انجام می دهند اما با کمی تفاوت. فرق include() با require() این است که در هنگام بروز خطایی در برنامه، با استفاده کردن از include()، یک پیغام نشان داده می شود اما ادامه کدها اجرا و نشان داده می شوند در حالی که در require() ابتدا پیغام خطا نمایان و بعد اجرای کد قطع می شود.
نکته: معمولا در زمان هایی که می خواهیم اطلاعات مهمی را توسط این توابع وارد فایل دیگری کنیم، از تابع require() استفاده می کنیم. این بدین معنی است که ما می خواهیم فایل مورد نظر حتما وارد شده و در صورت بروز خطا یا درست وارد نشدن آن به ما هشدار دهد و از اجرای باقی کدها جلوگیری شود.
هر دوی این توابع نوع دیگری دارند که همراه با _once می آید. این توابع ضمانت می کنند که حتی در صورت دوباره فراخوانی فایل، آن فایل فقط یک بار وارد شود. once در زبان پارسی «یک بار» معنی می شود.
برای نوشتن نشانی فایل در قسمت ابتدایی پرانتز تابع، ما می توانیم به دو صورت عمل کنیم، یکی «مطلق» و دیگری «نسبی».
آدرس دهی مطلق: آدرس دهی مطلق نشانی فایل را از ریشه فهرست رایانه محاسبه و فراخوانی می کند. به طور مثال:
include (‘ C:/php/includes/header.html ’);
همان طور که می بینید نشانی از فهرست C: آغاز شده و به خود فایل header.html رسیده است.
آدرس دهی نسبی: در این نوع آدرس دهی، نشانی از خود فایلی که در آن هستید و تقاضای قرار دادن فایل را می کند آغاز می شود. مثلا:
include(' ../includes/header.html ');
فرض کنید فایل فراخوان کننده در داخل پوشه scripts با آدرس
C:/php/scripts/
قرار دارد و می خواهد فایل header.html را فراخوانی کند. در این صورت ابتدا باید از پوشه scripts بیرون رفته و بعد وارد include شود و باقی آدرس ها.
علامت /.. کار به عقب رفتن از پوشه کنونی را انجام می دهند و بعد به پوشه دلخواه باید راهنمایی شوند. به این شیوه آدرس دهی که نشانی از خود فایل فراخوان کننده آغاز می شود، آدرس دهی نسبی می گوییم. حال زمان آن رسیده که از اندوخته های یادگرفته استفاده کنیم.
قرار دادن فایل خارجیابتدا به داخل پوشه php که قبلا ساخته اید بروید و پوشه جدیدی با نام including files بسازید. وارد آن شوید و فایلی با نام index.php و پوشه ای با نام includes بسازید. در داخل پوشه includes هم فایل هایی با نام های header.html و footer.htmlو style.css بسازید. حال ما پوشه ای به نام including files داریم که در داخل آن فایل index.php و پوشه includes قرار دارند.
سربرگ یا header: در داخل این فایل کدهای زیر را بنویسید:
http://www.w3.org/1999/xhtml"> فایل های خارجی قسمت سربرگ خانه
همان طور که مشاهده می کنید در این فایل قسمتی از کدهای اچ تی ام ال که شامل برچسب ها می شوند، قرار دارد. این بدین خاطر است که این فایل در داخل فایل اصلی فراخوانی می شود و در بالای باقی کدها قرار می گیرد. سربرگ را بسته و محتوای آن را ثبت کنید.
footer یا پایین برگ: فایل footer.html را باز کنید و کدهای زیر را در داخل آن قرار دهید:
قسمت پایین برگه
در داخل این فایل برچسب های بستن html و body به همراه دیگر کدها قرار دارند. این فایل هم همانند فایل سربرگ در داخل فایل اصلی قرار داده می شود.
index.php: در این فایل ما باید دو فایل دیگر را فراخوانی کنیم و این کار را به صورت زیر انجام می دهیم:
قرار دادن فایل های دیگر در فایل اصلی
در این قسمت محتوای تارنما قرار می گیرد. این قسمت همان فایل ایندکس است.
همانطور که می بینید در ابتدا و پایان این صفحه دو برگه header و footer توسط تابع include وارد شده اند و هر آنچه در میان این دو تابع گذاشته شوند به صورت محتوا در داخل کادر اصلی نمایان می شوند.
حال فرض کنید شما ۱۰۰ برگه دارید که نیاز دارند این دو قسمت سربرگ و پایین برگ را نمایش بدهند. تنها کار وارد کردن این دو برگه به صورت بالا در داخل آنها است.
شیوه نمایش محتوا از طریق Style: بخش آخر که شیوه نمایش محتوا را تعیین می کند، مطابق معمول در فایل style.css قرار می گیرد.
body { background:#fafafa; color:#555; font:12px Tahoma,Arial, Helvetica, "bitstream vera sans", sans-serif;}/* header */#header { border:1px solid #bbb; height:130px; margin:10px auto; width:751px;}#header h1 { color:#888; font-size:24px; text-align:right;}/* navigation */#navigation { border-top:1px solid #ccc; margin:auto; width:740px;}#navigation ul{ overflow:hidden; list-style:none; margin:0px;}#navigation li { border-left:1px solid #bbb; float:right; width:130px; height:40px; list-style:none; margin:0 auto;} #navigation a { color:#555; display:block; line-height:40px; text-align:center; font-size:18px; text-decoration:none;}#navigation a:hover { background:#e3e3e3; color:#333;}#navigation .active { background:#e3e3e3; color:#777;}/* content */#content { border:1px solid #ccc; height:auto; min-height:400px; margin:10px auto; padding:0 0 20px; width:751px; text-align:right;}
#content h1 { font-size:16px; padding:20px 0 0;}#content p { padding:20px 20px 0;}/* footer */#footer { border:1px solid #ccc; height:100px; margin:0 auto; padding:10px 0; text-align:center; width:751px;}
این شیوه گذاری به ما اجازه می دهد که محتوا را هر طور که دوست داریم نمایش دهیم.
حال یک نگاه به خروجی کار بیاندازیم:
اتفاقی که در صورت استفاده از فایل های متفاوت در ساخت تارنما می افتد این است که مرورگر شما ابتدا به طور پیش فرض به سراغ فایل index می رود و شروع به خواندن کدهای داخل این فایل از بالای صفحه می کند.
نخست به تابع include() که فایل سربرگ را وارد می کند، برخورد می کند که با اجرای این تابع، محتوای فایل سربرگ در داخل فایل index آورده می شود.
سپس مرورگر محتوای زیرین این تابع را به نمایش می گذارد تا به تابع دیگر که باز هم include() است برسد.
این بار این تابع محتوای داخلی فایل پایین برگ را آورده و در فایل اصلی می گذارد. کاربر به هیچ عنوان از این انتقال ها با خبر نمی شود، چیزی که او می بیند همان چیزی است که در صورت داشتن تارنمای ایستا مشاهده می کرد.
فکر می کنیم که اکنون به معنی قرار دادن فایل های متفاوت در داخل یک فایل در طراحی یک تارنما آگاهی پیدا کرده اید.
نکته قابل توجه این است که شما می توانید به تعداد دلخواه از این شیوه استفاده کنید. مثلا فایل دیگری به نام ستون کناری ساخته و در داخل فایل اصلی آنرا وارد کنید. البته باید توجه داشته باشید که برای درست به نمایش در آمدن ستون کناری در صفحه، باید در فایل شیوه CSS، انتخابگرها و کدهای لازم را قرار دهید.
در ادامه دوره تلاش می کنیم که از این فن به صورت های متفاوتی استفاده کنیم. اما چیزی که شما باید در آخر این درس یاد گرفته باشید در ابتدا فهم دلیل این کار و درک چگونگی راحتی و مدیریت بهتر سیستم بعد از استفاده از این فن است.
در درس بعدی ما باز به سراغ ساخت فرم می رویم اما این بار کل روند کار را در داخل یک فایل انجام می دهیم. علاوه بر آن با فن های جدیدی در مورد کار با فرم ها آشنا می شویم که فرم های ما را به صورت حرفه ای تری در خواهند آورد.
درس ششم- ساخت و کار با فرم ها (پیشرفته)
در درس های قبلی با ساخت فرم آشنا شدیم و دیدیم که چطور می شود داده های فرم را به برگه دیگری انتقال داد.
در درس امروز می خواهیم این کار را به طور پیشرفته تری و با انجام این عمل در یک فایل انجام دهیم. منظور این است که گاهی شما نیاز دارید که داده ها را به برگه دیگری بفرستید اما زمانی هم است که بخواهید در یک برگه این داده ها را گرفته و نسبت به آن واکنشی نشان دهید. مهمتر از داشتن یک برگه یا دو برگه، شیوه واکنش به این داده ها براساس خود داده ها است و این هم می تواند تعریف دیگری از داشتن تارنمای پویا باشد.
کار با فرم در یک برگهمنظور از این نوع عملکرد در ساخت فرم، داشتن «فرم» و «بررسی کننده» آن در یک برگه است. این عمل فوایدی در بر خواهد داشت که در ادامه با آنها آشنا می شویم. نکته مهم در داشتن هر دو فاکتور در یک برگه استفاده از یک تابع شرطی برای ارزیابی عملکرد و نحوه کار با آن است. مثلا این تابع انتخاب می کند که داده ها را نمایش دهد یا خود فرم را و این انتخاب را تحت چه شرایطی بگیرد. در زیر به ساختار این تابع شرطی توجه کنید:
if ( /* فرم ارسال شد */){// دستورات بررسی کننده فرم} else {// نمایش فرم}
همانطور که مشاهده می کنید این شرطی، دو گزینه دارد. نخست اینکه آیا فرم ارسال شده که اگر ارسال شده باشد آن را بررسی می کند و دستورات داخل قطعه ابتدایی را انجام می دهد؛ دوم در صورت عمل ارسال فرم، به سراغ قطعه دوم رفته و فرم را نمایش می دهد. داشتن این شرطی برای ساخت فرم در یک برگه همراه بررسی و نمایش داده ها ضروری است.
شرط «فرم ارسال شد»اگر یادتان باشد در درس های قبلی فرمی داشتیم که داده ها را به برگه دیگر انتقال می داد، اما چه زمانی این انتقال صورت می گیرد؟
در داخل هر فرم «دکمه ای» با نام ارسال یا Submit وجود دارد. «اگر فرم ارسال شد» یعنی اگر کاربر دکمه «ارسال» را بعد از پر کردن فرم فشار داد.
مثلا شرط مقابل را در نظر بگیرید:
if ( isset( $_POST['submit'] ) ) {// دستورات کار با داده های فرم} else {// نمایش فرم }
تابع isset( $_POST['submit'] ) بررسی می کند که آیا دکمه ارسال یا Submit فشار داده شده است یا نه. از این تابع برای بررسی انتخاب یا عدم انتخاب دکمه ارسال فرم استفاده می شود.
بهتر است با ساخت فرمی این مفهوم را بیشتر بررسی کنیم. این فرم درست مانند فرم های درس های قبلی است با این تفاوت که از این فن جدید در آن استفاده می کنیم.
برای اینکه از داشته هایمان تا به امروز هم استفاده کنیم، ساخت این فرم را در ادامه درس قبلی و در قالب اضافه کردن یک برگه که حامل فرم است انجام می دهیم. فرم ثبت نام در تارنما را حتما قبلا دیده اید؛ بیایید در اینجا یک فرم ثبت نام ساده بسازیم و به تارنمایی که در درس قبل داشتیم اضافه کنیم.
در درس قبل تارنمایی درست کردیم از چند بخش به شرح زیر:سربرگ header.htmlپایین برگ footer.htmlصفحه اصلی index.phpفایل شیوه style.css
حال به این تارنما یک برگه دیگر به نام «ثبت نام» اضافه می کنیم و در آن برگه فرم ثبت نام را نمایش می دهیم. در کنار آن، بررسی کننده فرم ثبت نام را هم در همان برگه می گنجانیم تا پاسخ ها یا هشدارها در همان برگه ثبت نام در بالا یا پایین فرم، به نمایش درآیند.
پوشه جدیدی به نام ثبت نام = register بسازید و محتوای پوشه ای که در درس قبل با نام Including Files ساختیم را در آن رونویسی و بازنویسی کنید.
حال باید در پوشه register یک پوشه به نام include شامل سربرگ، پایین برگ و فایل شیوه، و فایلی به نام index داشته باشید. فایل جدیدی در کنار فایل index به نام register.php بسازید. در ادامه با کدهایی که باید در آن قرار دهیم و همین طور تغییراتی که باید به باقی فایل ها بدهیم، اشاره می کنیم.
برگه ثبت نامابتدا کدهای زیر را در داخل این فایل رونویسی و بازنویسی کنید:
include ('includes/header.html'); ?> ثبت نام if (isset($_POST['submit'])) {$name = $_POST['name'] ;$username = $_POST['username'];$password = $_POST['password'];$email = $_POST['email'];if ( !empty($name) && !empty($username) && !empty($password) && !empty($email) ){$respond = 'ثبت نام شما با موفقیت انجام شد'; }else { $respond = ' لطفا تمام گزینه ها را پر کنید'; }echo $respond ; }?> لطفا فرم زیر را پر کنید نام کامل شناسه رمز رایانامه
شرح کدهای این برگهاکنون این برگه شامل هر دو بخش فرم و بررسی کننده آن است.
در ابتدا با ساختن متغیری نام هر برگه را در آن ذخیره کردیم تا در زمان وارد کردن سربرگ از آن استفاده کنیم. این کار به ما اجازه می دهد که نام هر برگه را با توجه به عملکرد آن برای تیتر برگه در مرورگر بفرستیم. این متغییر در سربرگ استفاده خواهد شد، تنها نکته این است که باید قبل از وارد کردن سربرگ در این برگه، این متغییر مقداردهی شود.
بعد از آن سربرگ را وارد کردیم که از تابع include استفاده شده است.
حال نوبت شرطی است که بررسی انتخاب یا عدم انتخاب دکمه ارسال از طرف کاربر را برایمان انجام می دهد. در داخل این شرط ابتدا داده های ارسالی را به داخل متغیرهایی می ریزیم که استفاده کردن از آنها را در ادامه برایمان راحت تر کنند.
حال شرط دیگری را در داخل شرط قبلی می گذاریم که از پر بودن تمام متغیرها مطمئن شویم. اگر تمام متغیرها پر بود، این یعنی تمام موارد توسط کاربر نوشته شده است و پیام «ثبت نام شما با موفقیت انجام شد» را در متغیری دیگری بنام respond می گذاریم.
در غیر این صورت در آن متغیر پیام «لطفا تمام گزینه ها را پر کنید» گذاشته می شود تا به کاربر هشدار دهد که باید تمام موارد را بنویسد و بعد از آن متغیر را چاپ می کنیم که بسته به نسبت به پر بودن یا نبودن موارد، مقدارش متفاوت است.
حال نوبت خود فرم است، البته این فرم مانند همان فرم های قبلی است با این تفاوت که مقدار گزینه action به نام همین فایل است. چرا که ما می خواهیم بررسی داده ها توسط همین فرم انجام شود.
در آخر هم فایل بالای برگه را وارد کردیم.
برگه سربرگ headerبرای اینکه برگه جدید «ثبت نام» در تارنما قابل دیدن باشد، باید پیوند آن را به قسمت ناوبری تارنما «navigation bar» اضافه کنیم. پس تغییراتی در این فایل می دهیم.
http://www.w3.org/1999/xhtml"> درسنامه خانه ثبت نام
شرح برگهاین برگه درست مانند برگه درس قبلی است البته با چند تغییر.
ابتدا که در از متغییری که در قسمت قبلی شرح دادیم استفاده کردیم تا تیتر در مرورگر با توجه به عمل برگه نمایش یابد.
نکته بعدی اضافه کردن پیوند به برگه «ثبت نام» است که به صورت زیر انجام می شود.
ثبت نام
این تکه کد یک دکمه دیگر به ناوبری تارنما اضافه می کند که مقصد این گزینه به برگه ثبت نام ختم می شود.
بعد از انجام این تغییرات اگر به تارنما نگاه کنید این دکمه را خواهید دید.
برگه شیوهبرچسب های لازم در این برگه قبلا در درس های دیگر آورده شده است. کافی است که آنها را در این برگه وارد کنید. برای این کار کدهای درس Including Files و کدهای درس Form را وارد این برگه کنید. البته تنها تغییر در انتخابگر ارسال است که در زیر می بینید.
.submit {text-align:center; border:1px solid #ddd; color:#039; width:20%; margin:auto 20px auto auto;}
از آنجایی که هدف این درس آموزش سی اس اس نیست و پیش فرض ما هم دانش این شیوه نویسی از طرف کارآموزان است، در اینجا بیشتر به این بخش نمی پردازیم. اما شما می توانید شیوه نمایش را به سلیقه خود تغییر دهید. تنها کافیست که مقادیر انتخابگرها را تغییر دهید.
نتیجه کار باید چیزی شبیه تصویر زیر گردد.
فرم (چسبنده) حفظ کننده مقدار Sticky Formفرم چسبنده در همان فرم استاندارد در اچ تی ام ال است منتها با این تفاوت که در این فرم قابلیت نگهداری مقادیر نوشته شده در کادر اضافه می شود.
فرض کنید که کاربر تارنمای شما در هنگام ثبت نام دچار خطا شود و سیستم پیغام بازگشت و درست کردن آن مقدار را بدهد. خب کاربر باید دوباره تمام موارد را بنویسد اما با استفاده از فرم چسبنده سیستم می تواند موارد را در خود حفظ کرده و در قسمت های نوشته شده دوباره نمایش دهد. آنگاه در صورت بروز خطا، کاربر فقط قسمت های مشکل دار را دوباره نویسی می کند.
بهتر است این کار را با فرم ساخته شده در همین درس انجام دهیم. به کدهای زیر توجه کنید:
لطفا فرم زیر را پر کنید نام کامل " /> شناسه " /> رمز رایانامه " />
این قسمت فرم در برگه ثبت نام است. اگر توجه کنید می بینید که در داخل برچسب های input المان جدیدی با نام value وارد شده است. value در اصل مقدار پیش فرض است که در داخل کادر نمایان می شود. با کمک value و شرطی که داخل آن می گذاریم ما می توانیم در صورت نوشته شدن کلمه ای، آن را دوباره در داخل کادر نمایش دهیم تا کاربر نیاز به دوباره نویسی نداشته باشد.
نکته: معمولا این کار در مورد قسمت «رمز» به دلیل رعایت نکات امنیتی انجام نمی شود.
اجازه بدهید یک نگاه دقیق تری به یکی از این المان ها بی اندازیم.
" />
همانطور که مشاهده می کنید، در این کد که یک کادر متنی اضافه می کند، المان جدیدی اضافه شده است: value
در داخل این المان یک شرط نیز گذاشته شده است:
if ( isset($_POST['name']) ) { echo $_POST['name']; }
که می گوید: اگر نوشته ای وارد این کادر شد، آن نوشته را در همین کادر چاپ کن. فکر می کنیم حال به قدرت و کاربری شرطی ها بیشتر اعتقاد پیدا کرده اید، نه؟
در اینجا این درس هم به پایان می رسد. در درس آینده به سراغ توابع و چگونگی ساخت آنها می رویم.
:
function نام تابع () {// دستورات}
ابتدا کلمه تابع (function) نوشته و بعد از آن نام تابع را می نویسید. دستورات تابع در داخل بلوک آن قرار می گیرند. به تابع زیر توجه کنید:
function add(){$X = 3 + 2 ;print $x ; // 5}
همان طور که می بینید تابعی با نام add() نوشته شده که در آن اعداد ۲ و ۳ با هم جمع و در متغیر $X ریخته می شوند، در آخر تابع هم متغییر $x چاپ می شود. تا اینجا تابعی نوشته شده است اما این تابع تا زمانی که فراخوانی نشود، به تنهایی کاری نمی کند.
فراخوانی تابعهمانطور که گفته شد تابع این توانایی را به ما می دهد که از دوباره نویسی کدها جلوگیری کنیم و یک بار با نوشتن، آن را در زمان های مورد نیاز استفاده کنیم. قسمت دوم تعریف تابع به استفاده از تابع در زمان های مورد نیاز به هر تعدادی که خواستیم اشاره می کند، این کار را فراخوانی تابع می گوییم. به مثالی که در بالا زدیم دوباره توجه کنید:
function add() {$X = 3 + 2 ;print $x ; // 5}add(); // فراخوانی تابع => 5?>
فراخوانی تابع با عبارت add() که همان نام تابع است انجام گرفت و با فراخوانی آن کدهای تابع عمل کرده و نتیجه را چاپ می کند. نکته قابل توجه این است که شما می توانید به هر تعدادی که خواستید از این تابع استفاده کنید و یا به تعبیر دیگر آن را فراخوانی کنید و هیچ محدودیتی در آن نیست.
حال فکر می کنیم که به قدرت تابع پی بردید، یعنی نوشتن یک بار و استفاده کردن به تعداد دلخواه در هر زمان که خواستیم.
فرستادن پارامتر به تابعپارامتر مقداری است که به تابع فرستاده می شود تا تابع در درون بلوک کدهای خود از آن استفاده کند. تابعی که در قسمت قبلی نوشتیم هیچ مقداری را به صورت پارامتر دریافت نمی کرد و فقط با مقادیر تعریف شده در داخل کدها کار می کرد، خروجی این تابع ثابت است و همیشه مقدار 5 را خواهد نوشت.
حال اگر بخواهیم تابع را طوری بنویسیم که مقادیر را به صورت پارامتر از ما بگیرد و بعد عملیات جمع را انجام دهد، ما می توانیم خروجی های متفاوت و با توجه به پارامترهای ارسالی بگیریم. مثلا به تابع زیر دقت کنید:
function add( $x , $y ) {$z = $x + $y ;print $z ; // خروجی با توجه به پارامترهای ارسالی است}add(۵ , ۶); // فراخوانی تابع با ارسال دو مقدار به صورت پارامتر ?>
در زمان فراخوانی تابع هر مقداری که به صورت پارامتر به تابع ارسال کنیم، حاصل جمع آن دو عدد را خواهیم داشت. این به ما اجازه می دهد که تابعی مستقل از مقادیر و تنها متمرکز به عملیات خاصی داشته باشیم. به طور مثال می توانیم فراخوانی را به شکل های زیر انجام دهیم:
add(۱ , ۲); // ۳add(۳ , ۹); // ۱۲add(۱۱ , ۶۸); // ۷۹
نکته: در هنگام فراخوانی تابع حتی می توان پارامترها را به صورت متغیر به تابع ارسال کرد:
add( $a , $b );
در این حالت این دو پارامتر می توانند هر عددی را ارسال کنند. خوبی این کار به این است که پارامترها می توانند نتیجه یک عمل دیگر باشند و یا اعدادی باشند که توسط کاربر در کادرهای فرم نوشته شده باشند.
تارنمایی که در درس های قبلی درست کردیم، یادتان هست؟ بیایید برگه دیگری به آن اضافه کنیم و در آن برگه با تابعی که می نویسیم چند عملیات انجام دهیم.
پوشه جدیدی با نام function بسازید و محتوای پوشه register را در آن قرار دهید. این کار برای این انجام می شود که شما در حین یادگیری مفاهیم، قدم به قدم یک تارنما داشته باشید با نسخه های متفاوت که در هر نسخه به مفهومی اشاره شده باشد.
برگه تابع function.phpدر داخل پوشه function فایلی با نام function.php بسازید و کدهای زیر را در داخل آن بنویسید:
$page_title = 'تابع';include ('includes/header.html'); ?> تاریخ تولد /* انگلیسی به فارسی */function convert($string) { $persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'); $num = range(0, 9); return str_replace($num, $persian, $string);}function calendar() { echo ''; for ($year = 1300; $year echo "" . convert($year) . " "; }
echo ''; $months = array (1 => 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'); echo ''; foreach ($months as $key => $value) { echo "$value "; }
echo ''; echo ''; for ($day = 1; $day echo "" . convert($day) . " "; } echo '';} // End of the function definition.echo '';// Call the function.calendar();echo '';?>
اتفاقی که در اینجا می افتد این است که این برگه برای شما یک کادر تاریخ به همراه روز، ماه و سال می سازد. در درس قبلی ما یک فرم ثبت نام نوشتیم. خوب فرم ثبت نام نیاز به تاریخ زادروز هم دارد:
برای پیچیده نشدن امر ما این قسمت را به طور مجزا گذاشتیم اما در آینده در درس های پایانی به ساخت یک فرم کامل ثبت نام خواهیم پرداخت.
توضیح کدهابا قسمت بالای برگه قبلا آشنا شده ایم، پس یک راست سراغ کدهای داخل می رویم. در ابتدای این برگه تابعی نوشته شده که یک پارامتر را دریافت می کند.
(function convert($string کاری که این تابع می کند این است که با گرفتن یک عبارت اعدادی که به زبان انگلیسی نوشته شده اند را به زبان فارسی تبدیل می کند. این تابع از سه قسمت تشکیل شده است:
$persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
این خط کد، یک متغیر می سازد که به صورت آرایه تعریف می شود و در داخل آن اعداد را از ۰ تا ۹ قرار می دهد.
$num = range(0, 9);
این دقیقا همان کار بالا را برای اعداد انگلیسی انجام می دهد اما با کمک تابع range() یادتان هست؟ در قسمت آرایه ها در مورد این تابع حرف زدیم.
return str_replace($num, $persian, $string);
در این قسمت از یکی از توابع از پیش تعریف شده پی اچ پی استفاده شده است. تابع str_replace() سه پارامتر را قبول می کند. اعداد انگلیسی، اعداد فارسی و عبارتی که به تابع convert فرستاده شده و بعد اعداد انگلیسی را در عبارت فرستاده شده با اعداد فارسی عوض می کند. در اصل ما تابعی ساخته ایم که از تابع دیگری که از قبل تعریف شده، درون آن استفاده کرده ایم.
بعد از این تابع به تابع دیگری می رسیم با نام calendar(). این تابع هیچ ورودی به عنوان پارامتر دریافت نمی کند و فقط خروجی برای ما چاپ می کند. برای ساختن یک کادر زادروز نیاز به سه قسمت است: روز، ماه و سال؛ که در این تابع به طور مجزا هر کدام تعریف شده اند.
echo ''; for ($year = 1300; $year echo "" . convert($year) . " "; }
echo '';
این قسمتی است که با استفاده از حلقه for، بخش سال را برای مان چاپ می کند. این سال ها از ۱۳۰۰ شروع و به ۱۳۹۰ ختم می شود. دقت کنید که این اعداد به زبان انگلیسی هستند پس در زمان چاپ آن از تابع تبدیل کننده convert که قبلا نوشتیم استفاده می کنیم تا کار تبدیل را انجام دهد.
$months = array (1 => 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند');echo ''; foreach ($months as $key => $value) { echo "$value "; }echo '';
در این قسمت به کمک تابع array() ماه های ایرانی را در آرایه ای قرار داده و با کمک حلقه آنها را چاپ می کنیم.
echo ''; for ($day = 1; $day echo "" . convert($day) . " "; }echo '';
این قسمت شبیه سال است که روز را برایمان چاپ می کند.
خب تا به اینجا تابع نوشته شده و آماده استفاده است، پس با یک فراخوانی از آن استفاده می کنیم:
echo '';calendar();echo '';
نکته: برای ساخت این زاد روز انگار، ما از برچسب های اچ تی ام ال با نام select استفاده کردیم که یک کادر با قابلیت نگهداری مقادیر و به صورت کشویی به پایین درست می کند.
توابع با پارامتر پیش فرضکار دیگری که در هنگام ساخت یک تابع می توانید انجام دهید، دادن یک مقدار پیش فرض به یک پارامتر یا متغیر است. با این کار در صورتی که هنگام فراخوانی، مقداری را به پارامتر نفرستید، از مقدار پیش فرض استفاده می کند و اگر مقداری را به عنوان پارامتر بفرستید، از مقدار شما استفاده می کند.
function say_hello( $name , $message = ' درود '){echo "$message, $name" ; }say_hello('پیمان'); // درود ، پیمانecho '';say_hello('پیمان' , 'سلام' ); // سلام ، پیمان
در زمان فراخوانی ابتدایی فقط یک پارامتر فرستاده می شود و پیغام همراه مقدار پیش فرض چاپ می شود. اما در فراخوانی دوم که با دو مقدار تابع را می خواند، در زمان چاپ از این دو مقدار استفاده می کند و مقدار پیش فرض را در نظر نمی گیرد.
بازگشت مقدار از تابعدر توابعی که تا به اینجا مثال زدیم، به جز تابع convert()، همه آنها مقدار خروجی را چاپ می کردند. حال شرایطی مانند تابع convert() را در نظر بگیرید که نیاز داریم تابع، عملیاتی انجام دهد و بعد خروجی را به ما باز گرداند تا در جای دیگری از آن استفاده کنیم. برای این کار از عبارت return استفاده می کنیم. به مثال زیر توجه کنید:
function add ( $x , $y ){$z = $x + $y ;return $z ;}$num = add( 2 , 3 ) ;echo $num * 3 ;
اینجا ابتدا مقدارهایی فرستاده شده، بعد در تابع آنها جمع و در درون متغیر دیگری $z ریخته می شوند. در آخر هم تابع مقدار را توسط متغیر باز می گرداند.
بعد از فراخوانی تابع، مقدار بازگردانده شده به داخل متغیر $num ریخته شده و در ادامه از آن استفاده می شود.
نکته ۱: برای اینکه چند مقدار را به عنوان خروجی باز گردانیم، باید از آرایه برای بازگرداندن استفاده کنیم:
return array ($x , $y );
نکته ۲: در ساخت توابع باید به این نکته توجه کرد که توابع برعکس متغیرها به بزرگی و کوچکی نام تابع اهمیت نمی دهند. مثلا همه این فراخوانی ها یک تابع را صدا می زنند:
add( $x , $y);ADD( $x , $y);Add( $x , $y);
خب این هم از توابع؛ در درس های بعدی به سراغ پایگاه داده ها MySQL می رویم تا خود را به این فن هم مجهز کنیم. بعد از یادگیری پایگاه داده ها موضوع از این هم جالب تر خواهد شد
برچسبها: پی اچ پی, php
.: Weblog Themes By Pichak :.


