0

如何使用 php 验证日/月/年选择?我用 2-3 甚至 5-6 个选择选项验证了一些关于谁来验证选择的主题。我会知道如何验证这种选择。但是以月份为例,有 32 个选项。或者在年份选项的情况下,有 60-70 个选项。所以我对当您有这么多选择时进行选择验证的最佳方法感兴趣?

4

2 回答 2

2

对于 date 它实际上相对容易 - 你只需使用checkdate().

对于其他情况,您可以检查该值是否在预期范围内,例如:

if ($val >= min && $val <= max)

或者,如果您拥有数组中的所有值

if (in_array($val, $array_of_valid_values))
于 2013-01-29T20:48:03.153 回答
1

验证选择是相当简单的。

假设您有一个从 1960 年到 2013 年的连续年份范围。

您的选择 HTML 是:

<select name="year">
    <option value="1960">1960</option>
    ...
    <option value="2013">2013</option>
</select>

所以,你知道你的年份必须落在 1960 到 2013 的范围内:

$year = (int) $_POST["year"]);

if ($year < 1960 || $year > 2013) {
    $validationPassed = false;
}

简单到足以验证年份。

既然你知道它是哪一年,你就可以知道它是否是闰年。但是,这仅对一个月很重要,所以首先让我们验证他们选择的月份:

<select name="month">
    <option value="0">January</option>
    ...
    <option value="11">December</option>
</select>

再一次,月份的验证很容易。我们知道它必须是 0 到 11 之间的值。

$month = (int) $_POST["month"];

if ($month < 0 || $month > 11) {
    $validationPassed = false;
}

现在我们知道了月份和年份。要验证所选日期,我们需要检查以下标准:

  1. 是闰年吗?
  2. 是闰年多出一天的月份吗?(二月)。

要成为闰年的年份,它必须能被 400 整除,或者不能被 100 整除且能被 4 整除:

function isLeapYear($year) {
    if ($year % 400 == 0)
        return true;
    else if ($year % 100 == 0)
        return false;
    else if ($year % 4 == 0)
        return true;

    return false;
}

现在,我们可以检查它是否是闰年。如果是闰年,那么我们知道我们需要在 2 月多留出 1 天。

我们在每个月制作一组天数:

$daysInMonth = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

然后我们得到当月的天数:

$monthDays = $daysInMonth[$month];

如果是闰年,我们在该月的总天数上加一天:

if ($month == 1 && isLeapYear($year)) //February
    $monthDays++;

最后,我们可以验证这一天

$day = (int) $_POST["day"];

if ($day < 0 || $day > $monthDays) {
    $validationPassed = false;
}

现在,所有这些基本上都封装checkdate()在下面另一个答案中的函数中。因此,要使用checkdate()而不是上面的所有代码,您可以简单地执行以下操作:

HTML (注意:checkdate() 不是从零开始的,所以我们从 1 而不是 0 开始我们的日子和月份。)

<form action="myphp.php" method="post">
    <select name="day">
        <option value="1">1</option>
        ...
        <option value="31">31</option>
    </select>

    <select name="month">
        <option value="1">1</option>
        ...
        <option value="12">12</option>
    </select>

    <select name="year">
        <option value="1960">1960</option>
        ...
        <option value="2013">2013</option>
    </select>
</form>

PHP

$day = (int) $_POST["day"];
$month = (int) $_POST["month"];
$year = (int) $_POST["year"];

$validationPassed = checkdate($month, $day, $year);
于 2013-01-29T21:02:06.773 回答