2012-04-27 15 views
0

私は、正確な日付に強く依存しているphp/mysqlアプリケーションを開発中です。データベースに挿入された日付が常に正しいこと、そしてphp/mysqlの日付関数がシステムクロックに依存していることを確認するために、私は日付フォームフィールドに現在の日付を入力して、データベースにデータを挿入する前にCURDATE()を使用してデータベースを更新します。mysqlのユーザ入力文字列とcurdateの比較

これが正しい方法であるのか、日付の整合性を保つためのよりよい解決策であるのか分かりません。

+0

システムクロックが間違っていると思われるのはなぜですか?おそらくあなたは[ntp](http://en.wikipedia.org/wiki/Network_Time_Protocol)を使用して調べたいと思うでしょう。 – eggyal

+0

CMOSバッテリが簡単に故障する可能性があり、ユーザが気付かない可能性があります。 – sality

+0

CMOSバッテリは、コンピュータの電源が切れているときにシステムクロックを維持する場合にのみ有効です。一度電源を入れ直すと、ntp(上記のリンクを参照)のようなツールが正しい時刻に時計を復元するのに役立ちます。 – eggyal

答えて

0

(答えからのアップグレード)

一つは一般的に正しいとシステムクロックに依存しています。これは、ユーザーの入力よりもはるかに自分自身のコントロールの下にあるものであり、故意または間違っている可能性があります。

INSERTステートメントの値としてCURDATE()を使用し、Network Time Protocolクライアントを実行してシステムクロックを正しく維持するなどの対策をお勧めします。ほとんどの最新のオペレーティングシステムには、デフォルトでこのようなソフトウェアが含まれているだけでなく、一般的に構成され、すぐに動作します。

システムがスタンドアロンであり、ネットワークから時刻を更新できない場合は、次のような組み合わせが考えられます。別のソースから時刻信号を受信する(NPL signalなどのラジオなど)。定期的に(特に起動時に)システムクロックを確認します。 CMOSバッテリを監視し、適時に交換されることを保証する。または充電式電池を使用する。

+0

私の方法の欠点は何ですか? – sality

+0

私はそれが私の最初の段落で答えられたと信じています - ユーザーの入力は "意図的にまたは間違っている可能性があります";最初に疑問を呈するためには、ユーザーエクスペリエンスが不十分であることや信頼できない方法であるという感覚を既に持っていなければなりません。 – eggyal

+0

はい。しかし、私は提供されたリンクを確認した後でも、自分のアプリケーションでNTPを使用する方法を理解していません。私は彼らの周りにもっと良いプログラマブルな方法だと思った。 – sality

関連する問題