0

ユーザーの生年月日を取得する必要がある登録を作成しています。私の質問は、html で月、年、日のドロップダウン ボックスを作成し、後でそれらの日を php スクリプトに処理して挿入する方法です。データベースに?月、年、日に特定の月の有効な日を指定する必要があるのはどこですか?

4

2 に答える 2

4

編集: ライブデモ

これはどう:

<select name="year"></select>
<select name="month">
    <option value="1">January</option>
    ...
</select>
<select name="day"></select>

そしてJS部分:

var ysel = document.getElementsByName("year")[0],
    msel = document.getElementsByName("month")[0],
    dsel = document.getElementsByName("day")[0];
for (var i = 2000; i >= 1950; i--) {
    var opt = new Option();
    opt.value = opt.text = i;
    ysel.add(opt);
}
ysel.addEventListener("change", validate_date);
msel.addEventListener("change", validate_date);

function validate_date() {
    var y = +ysel.value, m = msel.value, d = dsel.value;
    if (m === "2")
        var mlength = 28 + (!(y & 3) && ((y % 100)!==0 || !(y & 15)));
    else var mlength = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][m - 1];
    dsel.length = 0;
    for (var i = 1; i <= mlength; i++) {
        var opt = new Option();
        opt.value = opt.text = i;
        if (i == d) opt.selected = true;
        dsel.add(opt);
    }
}
validate_date();

PHP部分の作業をお任せします。

いくつかの注意事項:

  1. 使用しaddEventListenerました。attachEvent代わりにIE<9 が使用することに注意してください。プロパティ (非推奨)を使用するonchangeか、jQuery などの JS フレームワークに依存してジョブを実行できます$(msel).change(validate_date);
  2. 古いバージョンの Firefox では、要素のaddメソッドが愚かで、2 番目の引数が必要です。<select>null
  3. スクリプトが 2 月を計算するとき、mlength28 に 0 または 1 にキャストされるブール値 (閏年の単純なチェック) を追加します。これにより、ECMAScript 5 厳密モードで例外が発生します。
于 2012-06-23T11:06:03.987 に答える
1

プレーンテキスト入力を与えるだけです。人々が生年月日を入力して正しく入力することを信用していないのに、select 要素を使用することで違いが生じるのはなぜでしょうか? 期待するフォーマットを伝えてください。

例えば

<script>
function validateDate(v) {
  var bits = v.split('/');
  var d = new Date(bits[2], --bits[1], bits[0]);
  return d.getFullYear() == bits[2] && d.getMonth() == bits[1];
}

function validateForm(form) {
  if (!validateDate(form.birthday.value)) {
    alert('Birthday date is not a valid date');
    return false;
  }
}
</script>

<form onsubmit="return validateForm(this);" action="">
  <div>Birthday (day/month/year): <input type="text" name="birthday"> 
    <input type="submit">
  </div>
</form>

プレーン入力を選択に置き換えるスクリプトバージョンを含めることができますが、合理的な期間をカバーするには、年選択に約100のエントリがあり、年と月の両方を選択するまで待つ必要があります日々。少なくとも上記は、日付を検証するための単純なアルゴリズムを提供します。

于 2012-06-23T12:54:51.267 に答える