日付フィールド
年月日をプルダウン
文字エンコード検証とhtmlエスケープ
<?php
require_once("es.php"); //フォーム~入力データのチェック~で参照してね
if (!checkEn($_POST)) { //文字エンコードの検証
$encoding = mb_internal_encoding(); //PHPが使うエンコードを調べる
$err = "Encoding Error! The espected encoding is" . $encoding;
exit($err); //エラーメッセージを出してコードのキャンセルする
}
$_POST = es($_POST); //HTMLエスケープ(xss対策)
?>
選んだ日付の曜日を求めて表示させる
<?php
$error = [];
if (!empty($_POST["theDate"])) { //POSTされた日付取り出し
$postDate = trim($_POST["theDate"]); //日付文字列を取り出す
$postDate = mb_convert_kana($postDate, "as"); //全角を半角にする
$pattern1 = preg_match("/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/", $postDate);
$pattern2 = preg_match("#^[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}$#", $postDate);
if ($pattern1) {
$dataArray = explode("-", $postDate); //指定文字"-"で分割
}
if ($pattern2) {
$dataArray = explode("/", $postDate); //指定文字"/"で分割
}
if ($pattern1 || $pattern2) { //正しい日付形式だったとき
$theYear = $dataArray[0];
$theMonth = $dataArray[1];
$theDay = $dataArray[2];
$isDate = checkdate($theMonth, $theDay, $theYear);
if ($isDate) { //日付のオブジェクトを作る
$dateObj = new DateTime($postDate);
} else {
$error[] = "日付として正しくありません。";
}
} else { //正しい日付形式でないときの表示例
$today = new DateTime();
$today1 = $today->format("Y-n-j");
$today2 = $today->format("Y/n/j");
$error[] = "日付は次のどちらかの形式で入力してください。<br>{$today1}または{$today2}";
$isDate = false;
}
} else {
$isDate = false;
$postDate = "";
}
?>
<!-- 入力フォーム -->
<form method="POST" action="<?php echo es($_SERVER['PHP_SELF']); ?>">
<ul class="nolist">
<li><span>日付を選ぶ:</span>
<input type="date" name="theDate" value=<?php echo "{$postDate}" ?>>
</li>
<li><input type="submit" value="送信する"></li>
</ul>
</form>
<?php
if ($isDate) { //正しい日付であれば表示する
$date = $dateObj->format("Y年m月d日");
$w = (int)$dateObj->format("w");
$week = ["日", "月", "火", "水", "木", "金", "土"];
$youbi = $week[$w];
echo "<HR>";
echo "{$date}は、{$youbi}曜日です。";
}
?>
<?php
if (count($error) > 0) {
echo "<HR>";
echo '<span class = "error">', implode("<br>", $error), '</span>';
}
?>
プルダウンメニューで選んで入力
<?php
//日付の初期値
$theYear2 = date('Y');
$theMonth2 = date('n');
$theDay2 = date('j');
$error = [];
if (isset($_POST["year"]) && isset($_POST["month"]) && isset($_POST["day"])) {
$theYear2 = $_POST["year"]; //POSTされた年月日で書き換える
$theMonth2 = $_POST["month"];
$theDay2 = $_POST["day"];
//値が日付として正しいかチェック
$isDate2 = checkdate($theMonth2, $theDay2, $theYear2);
if (!$isDate2) {
$error[] = "日付として正しくありません";
} else { //日付オブジェクト作成
$dateString = $theYear2 . "-" . $theMonth2 . "-" . $theDay2;
$dateObj2 = new DateTime($dateString);
}
} else {
$isDate2 = false;
}
?>
<?php
//今年前後15年のプルダウンメニュー
function yearOption()
{
global $theYear2;
$thisYear = date('Y');
$startYear = $thisYear - 15;
$endYear = $thisYear + 15;
echo '<select name = "year">', '\n';
for ($i = $startYear; $i <= $endYear; $i++) {
if ($i == $theYear2) {
echo "<option value = {$i} selected>{$i}</option>", "\n";
} else {
echo "<option value = {$i}>{$i}</option>", "\n";
}
}
echo '</select>';
}
//1~12月のプルダウンメニュー
function monthOption()
{
global $theMonth2;
echo '<select name = "month">';
for ($i = 1; $i <= 12; $i++) { //POSTされた月を選択する
if ($i == $theMonth2) {
echo "<option value = {$i} selected>{$i}</option>", "\n";
} else {
echo "<option value = {$i}>{$i}</option>", "\n";
}
}
echo '</select>';
}
//1~31日のプルダウンメニュー
function dayOption()
{
global $theDay2;
echo '<select name = "day">';
for ($i = 1; $i <= 31; $i++) {
if ($i == $theDay2) { //POSTされた日を選択
echo "<option value = {$i} selected>{$i}</option>", "\n";
} else {
echo "<option value = {$i}>{$i}</option>", "\n";
}
}
echo '</select>';
}
?>
<!-- 年月日のプルダウンメニュー -->
<form method="POST" action="<?php echo es($_SERVER['PHP_SELF']); ?>">
<ul class="nolist">
<li>
<?php yearOption(); ?>年
<?php monthOption(); ?>月
<?php dayOption(); ?>日
</li>
<li><input type="submit" value="送信する"></li>
</ul>
</form>
<?php
if ($isDate2) {
$date2 = $dateObj2->format("Y年m月d日");
$w = (int)$dateObj2->format("w");
$week = ["日", "月", "火", "水", "木", "金", "土"];
$youbi = $week[$w];
echo "<HR>";
echo "{$date2}は、{$youbi}曜日です。";
}
?>
<?php
if (count($error) > 0) {
echo "<HR>";
echo '<span class = "error">', implode("<br>", $error), '</span>';
}
?>