質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

13001閲覧

PHPからSUBMITした時の日時

Z-TALBO

総合スコア525

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/03/04 00:29

formからsubmitして、MySQLへinsertする際に、submitを押した時の日時をMySQLのテーブルにinsertしたいと思ったので、、、

PHP

1// submitされた時 2// 最初これをつけないと、時間が変だったので、、、 3date_default_timezone_set('Asia/Tokyo'); 4 5// 年月日時分をそれぞれ登録したいので、、、 6$year = date('Y'); 7$month = date('m'); 8$day = date('d'); 9$hour = date('H'); 10$minutes = date('i');

というように、とりあえずですが、簡単にやるだけやった感じにしました。

登録したのを見ると、例えば2016/3/4 9:5というデータの場合
year = 2016,
month = 3,
day = 4,
hour = 9,
minutes = 5
という内容で登録されていました。

これを一桁の数字に関しては00表記にしたいのですが、、、
どのようにしたらいいでしょうか?

さらに、PCやスマホの時間ではなく、例えば複数の人がWEBにアクセスして、submitをしたとすると、共通の時間取得でないといけないと思います。
なので、サーバーの時間で取得して、、、というやり方はこれでは間違いでしょうか?

また、これだけでは脆弱な部分が多いのかもしれませんので、これは追記したほうがいい、、、こういう書き方をした方が良いというのがありましたらアドバイスお願い致します。

timestampやUNIXなどいろいろあって、、、どれが適しているのか?という感じになってます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

格納方法

年月日などを別々に格納する意味はあまりないように思います。
数値型にtimestampを格納するか、DATETIME型に日付時刻を保存するのがよいのではないでしょうか。
(私の場合は date('Y/m/d H:i:s') で得られる値をDATETIME型の列に入れることが多いです。)

どの時刻を使うか

端末の時刻を使うと端末(特にPC)の時刻設定によってずれが大きく(下手すると年単位で)出てしまうのでサーバー側の時刻を使うのがよいと思います。
複数のWEBサーバーから書き込む場合はWEBサーバー同士の時刻のずれをなくしておくべきで、それが困難ならDBサーバーで時刻を作って登録する方法も採用できます。

TIMEZONE

date_default_timezone_set('Asia/Tokyo');
これはphp.iniにdate.timezone = "Asia/Tokyo"を書いておけば毎回指定する必要がなくなります。

投稿2016/03/04 00:52

編集2016/03/04 00:54
dupont_kedama

総合スコア925

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Z-TALBO

2016/03/04 01:17

解答ありがとうございます! 年月日に関しては、確かにバラバラにする必要は無いかなとは思っているのですが、時分に関しては、例えば9:00でサブミットしたかったけど、9:10でサブミットすることになったときに、あとで修正をするのにバラバラがいいのかな?と考えました。 DatetimeのカラムにDateでまとめて登録したら、それを抽出する際にバラバラにすることはできるでしょうか? 時刻に関して サーバー側の時間を使いたい場合でもDate関数で行えばよろしいでしょうか?
dupont_kedama

2016/03/04 01:40

RDBの利点の一つに「型による制約」があります。 分解して持った場合、例えばアプリ側のミスなどで分の列に60以上の数字を入れられてしまった時にそれをDBは不正と見なさないので「その分アプリ側の処理を厳密にしなければならない。」「アプリ経由でない更新の場合は防げない」など困り事が増えます。 DATETIME型ならそもそも分に60以上は入らないので「不正な値が保持される」心配がありません。 (それをメリットとするかは状況次第ですが) 抽出する際に分解にすることも出来ますが、抽出してからPHPで分解にする方が扱いやすい気がします。 「サーバー側の時間」がWEBサーバーのことであればPHPのdate()で良いと思います。
dupont_kedama

2016/03/04 01:49

あとバラバラでもつと、「○月○日~△月△日の間のデータを抽出したい」などの時にちょっと面倒な処理が必要になりますね。
Z-TALBO

2016/03/04 03:01

ありがとうございます! Datetimeでやってみます!
guest

0

PHPで取得される日付は、PHPが実行されているサーバー日付になりますので心配ありません。
DBをVARCHARなどの文字列で持ちたければ、書式をフォーマットしたものを入れればいいと思いますが
日付の項目は、他の方が言ってる通り、日付の型で持てば書式などは気にせずにすみます。

MySQLのSQL関数である、NOW() などで取得される日付は、DBサーバー時刻になりますので、
日付の取得は、PHPでするかSQLでするかは、どちらか片方にした方がいいです。
PHPでやっておけば問題ないでしょう。

投稿2016/03/04 01:49

root_jp

総合スコア4666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Z-TALBO

2016/03/04 03:01

回答ありがとうございます!
guest

0

私の場合はDATETIME型を使用します。

PHP

1$date = date('Y/m/d H:i:s');

または

insert into hoge(date) values(now());

mysqlのnow()を使って挿入するかなど・・


一応↓のやり方で分けて変数に格納することも可能です。

PHP

1$dateA = explode(':',date('Y:m:d:H:i:s')); 2 3print_r($dateA); //確認のため。 4//Array ( [0] => 2016 [1] => 03 [2] => 04 [3] => 02 [4] => 20 [5] => 04 ) 5 6$year = $dateA[0]; 7$month = $dateA[1]; 8$day = $dateA[2]; 9$hour = $dateA[3]; 10$minutes = $dateA[4];

投稿2016/03/04 01:36

ureshinop

総合スコア48

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Z-TALBO

2016/03/04 03:02

変数に格納するやり方、参考になりました! そのような方法もあるのですね。。。。 回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問