- ベストアンサー
PHP。現在日より、2年後の日付は入力させないようにしたい
PHP。現在日より、2年後の日付は入力させないようにしたい テーブルに登録されたデータを、 日付の終了日順に、order by で、表示させており、期間が終了しだい、非表示になるよう設定しています。 しかし、終了日が5年後の場合10年後の場合、いつまでも画面の一番上に陣取る形となる為、困っています。 終了日は、現在日より2年以上を入れようとしたらエラーを出させたいのですが、そのような関数はありますでしょか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
データベースのテーブルにデータを登録するフォームがあり、そこに2年以上先の値を入力した場合にエラーメッセージを表示したいのだと推測します。 フォームにどのように終了日を入力するのかにもよりますが、date関数や正規表現を使うことで実現する事が可能になると思います。 例えば終了日を「20121010」と入力する場合、date関数を使って2年後の日付を算出し比較を行うことができます。 $end_day = '20121010'; // 本当は$_POST['end_day']などから値を設定 $limit_day = date("Ymd", strtotime(date("Y-m-d") . " +2 year")); if ($end_day < $limit_day) { // OK データベース登録処理 } else { // ERROR エラーメッセージ表示処理 } 終了日の入力方法によって処理は変わりますが、基本的にはdate関数、strtotime関数、正規表現を使えば処理できるかと思います。
その他の回答 (2)
- mpx
- ベストアンサー率71% (149/209)
既にサーバー側での対処方法は出ているので、 クライアント側で入力時の警告の例を示します PHPではないですが・・・・ <html><head> <script> function insert(date){ var dt1 = Date.parse(date); var dt = new Date(); var dt2 = new Date(dt.getFullYear()+2, dt.getMonth(), dt.getDate()); if(dt1>dt2){ window.alert('2年以内にしてください'); return false; } } </script> </head><body> <form name=my onsubmit="return insert(my.hi.value)"> yyyy/mm/dd<input type=text name=hi> <input type=submit value="実行"> </form> </body> </html>
お礼
>既にサーバー側での対処方法は出ているので、クライアント側で入力時の警告の例を示します ありがとうございます。 サーバーで止めても、クライアント側でも止めれれば、言うこと無しです。 エラー表示の出現には成功し、あとは、実際のサーバーで動かしますが、このコードは、PHPではありませんが、他エラーでは、スプリクトタグで、一度クライアント側でエラーを出させて返すので、とてもありがたいです。 感謝いたします。
- yambejp
- ベストアンサー率51% (3827/7415)
いまいち状況がわからないのですが・・・・ 表示で2年後以前のものとするなら WHERE 終了日<CURDATE() + INTERVAL 2 YEAR (SQLによって書式はことなります) などとすれば、表示されません。 そうなるとあくまでもPHPではなくSQLの問題。
お礼
今回の場合は、表示させるのではなく、登録しようとしたらエラーを発生させたいと思っています。 誤解を生む表現で、申し訳ありません。 ありがとうございます。
お礼
ありがとうございました。 何とかエラーの発生に成功しました。 とても助かりました。