ช่วยดูโค๊ต combobox ตัวนี้ให้หน่อยครับ



ช่วงนี้ผมวุ่นๆกับการทำอะไรเกี่ยวกับฟอร์มมากครับ  แล้วก็เลยทำเกี่ยวกับวันที่  ที่เวลาเลือกเดือนกุมภาพันธ์


 


ที่จะมี 28 หรือ 29 วัน ตามปีอธิกสุรทินครับ  ผมได้ลองเอาโค๊ตจังหวัดมานั่งดัดแปลงดู อาจจะมั่วๆหน่อยนะครับ


 


เพราะว่าไม่ค่อยเก่งการเขียนโปรแกรมสักเท่าไหร่ เหอๆ


 


 


ตอนนี้สิ่งที่ทำได้แล้วคือ


 


เดือนที่ลงท้ายด้วย คม  จะมีวันให้เลือก 31 วัน


 


เดือนที่ลงท้ายด้วย ยน จะมีวันให้เลือก 30 วัน


 


เดือน กุมภาพันธ์ ตอนนี้มีวันให้เลือก 29 วันเท่านั้น  แต่ยังแยกแยะปี ว่าปีไหนเป็นปีอธิกสุรทินไม่ได้ครับ


 


**ปีอธิกสุรทิน หรือ leap year จะมีวันในเดือนกุมภา 29 วันครับผม


 


ซึ่งนี่คือโค๊ตที่แสดงว่าปีไหนของเดือน กุมภาที่มีวันจำนวนเท่าไหร่ คร่าวๆครับ


 


 


<?


$year = date("Y");


while ($yearGen = $year--)


{


if ($yearGen % 4 != 0)


{ $leap = "28"; }


  elseif ($yearGen % 100 != 0) 


      { $leap = "29"; }// Leap year 


  elseif ($yearGen % 400 != 0) 


{ $leap = "28";}


    else


{ $leap = "29"; }// Leap year 


echo $yearGen."=".$leap."<br />";


 


if ($yearGen == 1980)


{ break; }


}


 


?>


 


 


 


 


 


ส่วนนี่คือโค๊ตที่ผมดัดแปลงครับ


ไฟล์ date.php


 


<script type="text/javascript" src="jquery.js"></script>


<script type="text/javascript">


//<![CDATA[


 


var year_id = <?php echo isset($_POST['year_id']) ? intval($_POST['year_id']) : '0'; ?>;


var month_id = <?php echo isset($_POST['month_id']) ? intval($_POST['month_id']) : '0'; ?>;


var day_id = <?php echo isset($_POST['day_id']) ? intval($_POST['day_id']) : '0'; ?>;


 


function loadSelectBoxDate(id,url,selected){


$.get(


url,{},function(data){


$(id).html(data);


if (selected!=0){


$(id+' option[value='+selected+']').attr('selected','selected');


}


}


);


}


 


$(function(){


loadSelectBoxDate(


'#year_id',


'date_combo.php?load=year',


year_id


);


loadSelectBoxDate(


'#month_id',


'date_combo.php?load=month&year_id='+year_id,


month_id


);


loadSelectBoxDate(


'#day_id',


'date_combo.php?load=day&month_id='+month_id+'&year_id='+year_id,


day_id


);


$('#year_id').change(function(e){


var selected = e.target.value;


loadSelectBoxDate(


'#month_id',


'date_combo.php?load=month&year_id='+selected,


0


);


$('#day_id :not(option:first)').remove(); //add


});


$('#month_id').change(function(e){


var selected = e.target.value;


loadSelectBoxDate(


'#day_id',


'date_combo.php?load=day&month_id='+selected,


0


);


});


});


//]]>


</script>


 


<form action="?" method="post">


news <input type="text" name="title" value="<?php //textbox('title');?>" />


<br />ปี <select id="year_id" name="year_id">


            <option value="0">-- เลือกปี --</option>


        </select>


<br />เดือน <select id="month_id" name="month_id">


            <option value="0">-- เลือกเดือน --</option>


        </select>


<br />วัน <select id="day_id" name="day_id">


            <option value="0">-- เลือกวัน --</option>


        </select>


<br /> <input type="submit" value="submit" />


</form>


 


 


 


 


 


ส่วนนี่คือไฟล์


date_combo.php


 


<?php


header('Content-type:text/html;charset=UTF-8');


 


if (!isset($_GET['load'])){


$_GET['load'] = 'year';


}


switch($_GET['load']){


case 'year':


$i = date("Y");


echo '<option value="0">-- เลือกปี --</option>';


while ($row = $i--){


echo '<option value="',$row,'">',


$row,


'</option>';


if ($i == date("Y")-111)


{ break; }


}


break;


case 'month': 


// $year_id = isset($_GET['year_id'])?intval($_GET['year_id']):0;


echo '<option value="0">-- เลือกเดือน --</option>';


$monthName = Array('มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน','กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม');


$i = 1;


while ($row = $i++){


echo '<option value="',$row,'">',


/*$monthName*/$row,


'</option>';


if ($i == 13)


{ break; }


}


break;


case 'day':


$year = ($_GET['year_id']);


$month = $_GET['month_id'];


 


if ($month == "2")


{


if ($year % 4 != 0)


{ $leap = "28"; }


  elseif ($year % 100 != 0) 


      { $leap = "29"; }// Leap year 


  elseif ($year % 400 != 0) 


{ $leap = "28";}


    else


{ $leap = "29"; }// Leap year 


}


else if


($month == "2" || $month == "4" || $month == "6" || $month == "9"|| $month == "11")


// 246911


{$leap = "30";}


else


{$leap = "31";}


//$month_id = isset($_GET['month_id'])?intval($_GET['month_id']):0;


echo '<option value="0">-- เลือกวัน --</option>';


$D = 1;


while ($row = $D++){


echo '<option value="',$row,'">',


$row,


'</option>';


if ($D == $leap+1)


{ break; }


}


break;


}


function report(){


return die('<option>'.htmlspecialchars(mysql_error()).'</option>');


}


?>


 


 


 


 


มีสองไฟล์  และไม่มีฐานข้อมูลใดๆครับ


 


แต่มันยังไม่สมบูรณ์ครับ  รบกวนผู้รู้ช่วยปรับแต่งด้วยครับ ผมไม่รู้จะแก้ต่อยังไงอะครับ


 


 


ปล.จริงๆอยากได้แบบของเฟสบุ๊คนะครับ  www.facebook.com  ตอนที่ยังไม่ล๊อคอินครับ จะมีฟอร์มให้สมัครสมาชิก


 


ที่เจ๋งเลยคือ  สามารถเลือกวันก่อนเลือกเดือนเลือกปีได้ครับ (ซึ่งผมก็ยังทำไม่ได้ - -")


 


อ่อ อีกเรื่องคือ  ยังใช้อาเรย์ไม่เป็นครับ  เดือนเลยยังแสดงเป็นแค่ตัวเลข ยังแสดงเป็นชื่อเดือนไม่ได้ครับผม




27 ต.ค. 2555 3 2,440

#1

ขอบคุณ คุณกรกด ครับ  ผมก็ได้แนวทางการคิดมาจากที่นี่  ตอนนี้ก็เขียนได้แล้ว  แต่ติดตรง code ajax ครับ



เหมือนกับว่า มันจะไม่ยอมส่งค่า  year_id  มาให้อะครับ  น่าจะติดปัญหาที่บรรทัดนี้




loadSelectBoxDate(


'#day_id',


'date_combo.php?load=day&month_id='+month_id+'&year_id='+year_id,


day_id



ซึ่งผมไม่ค่อยเก่ง Ajax และไม่ค่อยรู้ syntax ด้วยอะครับ รบกวนคุณกรกด พอจะช่วยแก้ได้ไหมครับ





แต่ผมลองคิว  date_combo.php?load=day&year_id=2011&month_id=2  เป็นต้น  ก็สามารถทำงานได้ถูกต้องปรกติดีครับผม



ขอบคุณล่วงหน้าครับ

#2

555++



ปวดตับกับ script เธอเช่นกัน....



เท่าที่ดูจริงๆแล้ว การใช้ year_id ก้ไม่น่าจะถูกต้องเท่าไร ที่จริงน่าจะเป็น $('#year_id').value มากกว่า
#3
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 1024
^