زبان تحت وب PHP یکی از زبانهای محبوب برنامهنویسی تحت وب میباشد که در چندسال گذشته به سرعت در میان برنامهنویسان رواج پیدا کرده است. زبانی که در عین سادگی در یادگیری، بسیار کامل میباشد. قصد توضیح درباره زبان PHP را ندارم و فرض را بر این میگذارم که خوانندگان این مطلب قبلا با PHP کار کردهاند. پس به سراغ اصل مطلب میرویم.
همانطور که میدانید یکی از مهمترین مولفهها در طراحی و پردازش صفحات وب، قسمت فرمها هستند که در همهی وبسایتهای استاتیک و داینامیک حداقل با یک نوع از آن سر و کار داریم. نمونهی واضح آن را میتوان در تمامی صفحاتی دانست که شما از طریق آنها برای وبلاگ یا وبسایتتان به تولید محتوا میپردازید. محیطی که شما در آن مطلب مینویسید و منتشر میکنید در واقع یک فرم است که پس از ورود اطلاعات توسط شما، به صفحهی دیگری ارسال شده و پردازش میشود.
دریافت مقادیر فرمها در PHP از طریق دستورهای زیر صورت میپذیرد:
$_POST['field_name']
با استفاده از کد سطر اول، دستورات ارسالی با متد Post و سطر دوم مقادیر ارسالی با متد GET و سطر سوم مقادیر ارسالی توسط هر دو متد را دریافت میکند. با جستجوی عبارت “PHP Forms” در گوگل به راحتی میتوانید به تمام منابع مورد نیاز برای یادگیری نحوهی کار فرمها دسترسی پیدا کنید.
$_GET['field_name']
$_REQUEST['field_name']
در این مطلب قصد من تکرار مکررات و آموزش دوبارهی نحوهی کار فرمها که چندین و چندبار در سایتهای مختلف توضیح داده شده است، نیست و قرار است به آموزش قسمتی از فرمها بپردازم که چه در وب فارسی و چه در سرتاسر وب، کمتر به آن پرداخته شده است یعنی نحوهی دریافت چکباکسها و ذخیرهی مقادیر آنها در یک پایگاه داده.
فرض کنید فرمی با مشخصات زیر در یک صفحهی HTML طراحی کردهایم:
<form method="post" action="">
در کد بالا چهار جعبهی انتخابشو (Checkbox) طراحی کردهایم و به کاربر حق انتخاب وبسایتهای مورد علاقهاش را میدهیم. کاربر میتواند هر کدام را انتخاب کرده و در انتها روی دکمه ارسال کلیک کند. در زبان ASP به راحتی میتوان مقادیر انتخاب شده را مانند سایر سایر انواع فرمها دریافت کرده و در بانک اطلاعاتی ذخیره کرد اما در PHP در صورت انتخاب چند مقدار، فقط مقدار آخری در دیتابیس ذخیره خواهد شود. مثلا اگر ما گزینههای faroxa و Google و Bing را انتخاب کرده باشیم فقط آخرین مقدار یعنی Bing در دیتابیس ذخیره خواهد شد. دلیل این کار هم خاصیت آرایهای مقادیر دریافتی حاصل از چکباکسها است. برای حل این مشکل باید به شکل زیر عمل کنیم:
<label>Your favorite websites</label>
<input type="checkbox" name="site[]" value="farxa" />Faroxa <br />
<input type="checkbox" name="site[]" value="google" />Google <br />
<input type="checkbox" name="site[]" value="bing" />Bing <br />
<input type="checkbox" name="site[]" value="yahoo" />Yahoo <br />
<input type="submit" value="SUbmit" />
</form>
<?php
در خط اول یک متغیر به نام “i” معرفی کردیم و مقدار آن را برابر با صفر قرار دادیم چون مقدار آرایهها همواره از صفر شروع میشود. در خط بعدی یک حلقه تعریف میکنیم و مقادیر دریافتی از فرم را به صورت آرایه دریافت میکند. در داخل حلقه نیز مقدارهای دریافتی را در داخل آرایهی جدیدی به نام myArrays میریزم و یک مقدار به مقدار “i” اضافه میکنیم که در اجرای بعدی، مقدار بعدی را در آرایهی بعدی بریزد. هماکنون آرایهای از مقدارهای دریافت شده به صورت زیر در برنامهی ما ذخیره شده است:
$i=0;
foreach($_POST['site'] as $arr=>$value)
{
$myArrays[$i]=$value;
$i = $i+1;
}
?>
$myArrays = array(
اما مقادیر را نمیتوان به همین صورت در داخل بانک اطلاعاتی Mysql ریخت و مجبوریم آنها را تبدیل به یک رشته کنیم و در یک متغیر که ما نام آنرا checked در نظر گرفتیم قرار دهیم.. برای این کار از کد زیر استفاده میکنیم:
0 => 'faroxa',
1 => 'google',
2 => 'bing',
);
$checked=implode(', ', $myArrays);
حالا خروجی ما به این شکل خواهد بود:
faroxa, google, bing
حالا به راحتی میتوانیم مقادیر چکباکس را در داخل بانک اطلاعاتی قرار دهیم:
mysql_query("INSERT INTO myTable(favorites) VALUES('".$checked."') ");
حالا ما اطلاعات دریافتی حاصل از چکباکسها را درون بانک اطلاعاتی داریم اما در هنگام فراخوانی آنها چگونه باید دوباره آن را به صورت آرایه فراخوانی کنیم؟
پاسخ این سوال بسیار ساده است. در کدهای بالا از دستور Implode استفاده کردیم که آرایهها را به صورت یک رشته برای ما تبدیل کرد. حالا کافی است از دستور Explode استفاده کنیم که دقیقا عکس کار Implode را انجام میدهد.
ابتدا با تکه کد زیر رشته را از دیتابیس فراخوانی کرده و در متغیری به نام $string میریزیم:
$string=mysql_query("SELECT favorites FROM myTable ");
حالا با تکه کد زیر رشتهی $string را تکه تکه کرده و به داخل آرایهای به نام $new_values میریزیم:
$new_values=explode(", ", $string);
حالا دوباره تمام اطلاعات را به صورت آرایه خواهیم داشت.
این آموزش سعی شده است که خلاصهوار به توضیح این مسئله بپردازد و ممکن است درک آن برای کسانی که هنوز با بانک اطلاعاتی و PHP کار نکرده باشند کمی سخت باشد.
بعدها بیشتر درباره PHP خواهم نوشت.
موفق و پیروز باشید.
سلام
آموزش خوب و مفیدی بود دستتون درد نکنه .
فقط یک نکته ، داخل حلقه foreach متغیر i میتونه نباشه و به صورت زیر خونه های آرایه ساخته شه
$myArrays[]=$value;
ممنون
موفق باشید
سلام
بسیار مفید، خلاصه و عالی بود
باتشکر