A-AA+then

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

1,396
    
        ช่วงนี้ผมวุ่นๆกับการทำอะไรเกี่ยวกับฟอร์มมากครับ  แล้วก็เลยทำเกี่ยวกับวันที่  ที่เวลาเลือกเดือนกุมภาพันธ์
    
         
    
        ที่จะมี 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  ตอนที่ยังไม่ล๊อคอินครับ จะมีฟอร์มให้สมัครสมาชิก
    
         
    
        ที่เจ๋งเลยคือ  สามารถเลือกวันก่อนเลือกเดือนเลือกปีได้ครับ (ซึ่งผมก็ยังทำไม่ได้ - -")
    
         
    
        อ่อ อีกเรื่องคือ  ยังใช้อาเรย์ไม่เป็นครับ  เดือนเลยยังแสดงเป็นแค่ตัวเลข ยังแสดงเป็นชื่อเดือนไม่ได้ครับผม

3 ความคิดเห็น

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
^