如何根据选定的月份和年份列表框创建PHP日历

时间:2014-08-10 13:30:30

标签: php calendar

我目前正在开发一个页面,该页面根据用户选择的月份和年份使用PHP创建日历。我使用了列表框来完成这个动作,但不知何故它似乎没有正常工作。

这是我使用的HTML表单

<div id="calendar">
                <form method="post" action="calendar.html">
                    <label>Year: </label>
                    <select name="year">
                        <option>2000</option>
                        <option>2001</option>
                        <option>2002</option>
                        <option>2003</option>
                        <option>2004</option>
                        <option>2005</option>
                        <option>2006</option>
                        <option>2007</option>
                        <option>2008</option>
                        <option>2009</option>
                        <option>2010</option>
                        <option>2011</option>
                        <option>2012</option>
                        <option>2013</option>
                        <option>2014</option>
                        <option>2015</option>
                    </select>

                    <label>Month: </label>
                    <select name="month">
                        <option>1</option>
                        <option>2</option>
                        <option>3</option>
                        <option>4</option>
                        <option>5</option>
                        <option>6</option>
                        <option>7</option>
                        <option>8</option>
                        <option>9</option>
                        <option>10</option>
                        <option>11</option>
                        <option>12</option>
                    </select>

                    <input type="submit" name="submit" value="Go!" />

                </form>
            </div>

以下是PHP的代码

<?php   

    $year = $_POST{"year"};
    $month = $_POST{"month"};
    $year = date("Y", $year);
    $month = date("m", $month);

    $firstDay = mktime(0, 0, 0, $month, 1, $year);

    $title = date("F", $firstDay);
    $dayOfWeek = date("D", $firstDay);

    switch($dayOfWeek) {
        case "Sun": $blank = 0; break;
        case "Mon": $blank = 1; break;
        case "Tue": $blank = 2; break;
        case "Wed": $blank = 3; break;
        case "Thu": $blank = 4; break;
        case "Fri": $blank = 5; break;
        case "Sat": $blank = 6; break;
    }

    $daysInMonth = cal_days_in_month(0, $month, $year);

    echo "<table class='centertable'>";
    echo "<tr><th colspan=7>" . $title . " " . $year . "</th></tr>";
    echo "<tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr><tr>";

    $dayCount = 1;
    while ($blank > 0) {
        echo "<td>&nbsp;</td>";
        $blank--;
        $dayCount++;
    }

    $dayNum = 1;
    while ($dayNum <= $daysInMonth) {
        if (date("d") != $dayNum) {
            echo "<td>" . $dayNum . "</td>";
            $dayNum++;
            $dayCount++;
        } else {
            echo "<td class='currentdate'>" . $dayNum . "</td>";
            $dayNum++;
            $dayCount++;
        }
        if ($dayCount > 7) {
            echo "</tr><tr>";
            $dayCount = 1;
        }
    }

    while ($dayCount > 1 and $dayCount <= 7) {
        echo "<td>&nbsp;</td>";
        $dayCount++;
    }

    echo "</tr></table>";

?>

我创建了一个CSS类来突出显示当前日期,当时我正在处理显示当前查看月份的自动日历。

当我添加列表框时,这似乎不再起作用了。我不知道如何,但我上面提供的代码只显示1970年1月的日历,无论我从列表框中选择什么。

请注意,列表框和PHP代码位于同一页面中。我将提交按钮引用到同一页面,以便用户可以选择其他月份和年份。另外,如果日期是今天(月和年),我想添加一个CSS类。此代码还突出显示日期10(今天),即使日历是1970年1月。

编辑:我使用了错误的单词,它应该是下拉列表而不是列表框。

1 个答案:

答案 0 :(得分:0)

你的第2行不正确:

$year = $_POST{"year"};
$month = $_POST{"month"};

在php中,必须使用方括号作为数组索引:

$year = $_POST["year"];
$month = $_POST["month"];

确认列表框中是否也正确设置了年份和月份(名称属性&#34;年份&#34;以及&#34;月份&#34;)。

编辑:根据您的HTML表单,将表单操作更改为:

<form method="post" action="calendar.php">

评论/删除文件的第3行和第4行:

<?php   

$year = $_POST["year"];
$month = $_POST["month"];
//$year = date("Y", $year);
//$month = date("m", $month);

使用名称calendar.php保存文件。它会产生like this