ساخت ورودی تاریخ در فرم ها بصورت دستی
- [ زمان انتشار : جمعه 2 فروردین 1398 ] [ برچسب ها: تاریخ در فرم ها، ساخت ورودی تاریخ در فرم ها، ساخت ورودی تاریخ در فرم ها بصورت دستی ، ] [ 481 بار مشاهده شده ]
تا حالا شده بخواهيد يک تاريخ رو از کاربر بگيرين؟ خوب چه کارمي کنيد؟ نکنه يک فيلد از نوع text رو ميزارين و ميگين وارد کن!
همونطور که مي دونيد اين روش خوبي نيست آخه بيچاره طرف چطوري بفهمه که به چه استايلي بايد وارد کنه و تازه اگر هم بدونه باز هم احتمال خطا زياد ميشه.
خوب پس چه بايد كرد؟
كاري كه معمولا انجام ميشه اينه كه سه تا select box رو توي فرم ميزارن و اونها رو به ترتيب به روز, ماه و سال اختصاص ميدن .
روز از ١تا ٣١ مي باشد.
توي ماه آرايه ماههاي خودمون رو مي ريزيم.
در مورد سال بستگي به جايي داره كه مي خواهيم از اون استفاده كنيم, من اينجا اون رو از دو سال قبل تا سال جاري گذاشتم, البته اگر برنامه مون طوري باشه كه مثلا بخواهيم از يه تاريخ تا تاريخ ديگه رو توي DataBase جستجو كنيم(داده هاي بين دو تاريخ رو بكشيم بيرون), دراين حالت مي تونيم اول سال هاي موجود در DataBase رو بخونیم و بعد بر طبق اون select box پر کنیم.
حالا فرضكنيد كه مي خواهيم action صفحه رو خودش بگذاريم, يعني بعد از اينكه كاربر تاريخ رو انتخاب كرد و فرم رو ارسال نمود برگرديم توي همين صفحه و select box ها دوباره چاپ بشن در این حالت بهتره که select box ها رو طبق مقاديري كه كاربر فرستاده مقدار دهي كنيم كه كارير بدونه چه تاريخي رو انتخاب كرده.
خب اين تا اينجاي كار; حالا اگه بخواهيد بجاي يك تاريخ از كاربر چند تاريخ رو به طور همزمان بگيرين چي؟ آره درست حدس زدين !بايد تمام اين مراحل رو به همون تعداد باز از نو انجام بدين, به اضافه اينكه مجبور مي شين براي هر كدوم از فيلد ها دونه به دونه نامگذاري كنيد كه بعد از ارسال فرم (submit) بتونین اونا رو از متد GET یا POST بگیرین.
حالا نوبتي هم باشه نوبت فانكشن بنده هست كه وارد عمل بشه وتمام اين كارها رو براتون انجام بده! تنها كاري كه شما بايد بكنيد اينه كه داخل يكفرم كه يك کلید submit هم داره اونو به اين صورت اجرا كنيد:
<form action="<?=$_SERVER[PHP_SELF]?>" method="POST"> <?php MakeDateBox(method:[$_GET | $_POST],group name)?> <input type="Submit" value="Submit"> </form>
method همون method ای هست که برای فرمتون میزارین که میتونه GET یا POST باشه.
group name : نام گروهی هست که می خواهید واسه اون تاریخ بزارید.
در اينجا با متغير سازي كه توي فانكشن انجام ميشه سه متغير در GET یا POST دريافت خواهيد كرد, مثلا اگر فانكشن رو اينجوري اجرا كنين:
MakeDateBox($_POST,"test");
بعد از ارسال فرم سه متغير به اين صورت خواهيد داشت:
$_POST[ytest]: سال $_POST[mtest]: ماه $_POST[dtest]: روز
حالا اگر فانکشن رو n بار با n عدد اسم مختلف اجرا کنید (n*3) متغیر به طریق مذکور دریافت خواهید کرد و n تعداد هم data group توی فرمتون چاپ خواهد شد.
از اونجايي كه مي گن: شنيدن كي بود مانند ديدن, بهتره كه فايل فانكشن رو با مثالي كه همراهش گذاشتم اجرا كنين و نتيجه رو ببينيد.
البته شما می توانید با کتابخانه های datepicker تاریخ ها رو خیلی ساده از کاربر بگیرید و استفاده کنید.
این هم از تابعی که دوست عزیزم محمد دهقان پور نوشتن.
<?php // Make Date Box function // Written by Mohammad Dehghanpour // Email: m_dehghanpour@hotmail.com function MakeDateBox($method,$name="") { $CurrentYear = Date(Y); $monthArray = array("", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); $yContainer= "y".$name; // make var for year. $mContainer= "m".$name; // make var for month. $dContainer= "d".$name; // make var for day. // Put previous value of user submit in these dynamic vars. $$yContainer= $method[$yContainer]; $$mContainer= $method[$mContainer]; $$dContainer= $method[$dContainer]; // make the day field echo "<select name=". $dContainer .">"; echo "<option value=''>Day</option>"; for ($i=1; $i<=31; $i++) { $str = "<option value=" . sprintf("%02d", $i); // check for previous value of user submit. if ($i == $$dContainer) $str .= " selected"; $str .= ">" . sprintf("%02d", $i) . "</option>"; echo $str; } echo "</select>"; // make the month field echo "<select name=m". $name .">"; echo "<option value=''>Month</option>"; for ($i=1; $i<=12; $i++) { $str = "<option value=" . sprintf("%02d", $i); // check for previous value of user submit. if ($i == $$mContainer) $str .= " selected"; $str .= ">" . $monthArray[$i] . "</option>"; echo $str; } echo "</select>"; // make the year field echo "<select name=y" . $name . ">"; echo "<option value=''>Year</option>"; for ($i=$CurrentYear; $i>=($CurrentYear-2); $i--) { $str = "<option value=$i"; // check for previous value of user submit. if ($i == $$yContainer) $str .= " selected"; $str .= ">" . sprintf("%04d", $i) . "</option>"; echo $str; } echo "</select>"; }// End function. ?> <!----------------------- An example ----------------------> <div align='center'> <form action="<?=$_SERVER[PHP_SELF]?>" method="POST"> <? // you can left the first argument empty if you wanna make only one date group, like this: MakeDateBox($_POST); // and then you will get tree vaiable named [y, m, d] from post or get. echo "From:"; MakeDateBox($_POST,"From"); echo" To:"; MakeDateBox($_POST,"To"); ?> <input type="Submit" style='border:1px solid #eeeee5;color:000000;' value=" Hit "> </form> </div> <? if(!empty($_POST)) { // get maked variables. echo "From:".$_POST[yFrom]."-".$_POST[mFrom]."-".$_POST[dFrom]; echo "</br>"; echo "To:".$_POST[yTo]."-".$_POST[mTo]."-".$_POST[dTo]; } ?>منبع این نوشته : ایران پی اچ پی