ช่วยดูโค๊ต 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 ตอนที่ยังไม่ล๊อคอินครับ จะมีฟอร์มให้สมัครสมาชิก
ที่เจ๋งเลยคือ สามารถเลือกวันก่อนเลือกเดือนเลือกปีได้ครับ (ซึ่งผมก็ยังทำไม่ได้ - -")
อ่อ อีกเรื่องคือ ยังใช้อาเรย์ไม่เป็นครับ เดือนเลยยังแสดงเป็นแค่ตัวเลข ยังแสดงเป็นชื่อเดือนไม่ได้ครับผม
เหมือนกับว่า มันจะไม่ยอมส่งค่า 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 เป็นต้น ก็สามารถทำงานได้ถูกต้องปรกติดีครับผม
ขอบคุณล่วงหน้าครับ
ปวดตับกับ script เธอเช่นกัน....
เท่าที่ดูจริงๆแล้ว การใช้ year_id ก้ไม่น่าจะถูกต้องเท่าไร ที่จริงน่าจะเป็น $('#year_id').value มากกว่า