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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

2186閲覧

簡単なタイムレコーダーでの時刻などデータの保存の仕方

kotr1993

総合スコア10

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/06/18 04:47

編集2017/06/18 15:53

【開発経験が浅いために根本的な間違いや情報不足等あるかと思いますが、何卒ご理解とご容赦願います。】
私は普段webのフロントエンドエンジニアとしてコーディング、js(jQuery含む)を用いた簡単なページ上での動きを実装、phpを用いたwordpressの構築をしています。

###やりたいこと
タイトル通りですが、勉強目的も兼ねて簡単なタイムレコーダーを作りたいと思っています。
タイムレコーダーは、自分の作業時間を計測するためのものとして、あくまで私個人のみが使用する予定です。他者や複数人が使用することは考えておりません。

###要件定義
・「作業開始」「作業終了」の時刻を記録できる
・今までの作業開始、終了の履歴を表示することができる(各作業ごとの開始、終了時刻と案件名の3項目の想定です)
・pc/smpからの操作が可能(使用はあくまで私のみの想定です)

###検討した選択肢

  • PHPでformに入力した項目をデータベースに保存
  • jsonデータにボタンクリック時の時刻を保存

###アドバイスをいただきたいこと
上記に挙げた選択肢が見当違いであったり、おそらく他にも様々な実装方法があるのであろうと思いますが、こういうものを実装したい際はどのように時刻やユーザー名等を保存していくのが適切なのでしょうか。
自分が考え得る範囲では、wordpressのようにデータベースを作成してそこにデータを保存していく形式、もしくはjsonデータに簡易的な形式で保存していくことが可能ではないかと考えました。

普段使用しているjavascriptもしくはphpを使用して実装することが出来れば良いなと思っております。また、複雑に作り込んでいくというよりは、簡単に基本機能を実装してから、その後に細かい問題点等に対応していく形で進めていければと思っております。

かなり抽象的な質問となってしまいましたが、アドバイスをいただけると大変嬉しいです。
何卒よろしくお願いいたします。

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

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

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

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

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

kei344

2017/06/18 16:13

具体的に何がわからないのでしょうか。
guest

回答3

0

追記:勉強目的ということであれば、”タイムレコーダーを作るための勉強”でなければ、自分なりの実装で全く問題ないと思います。

一般的というのは回答が難しくRFCのような認知が高いものでないと、
なにをもって一般的と判断しますか?

で、要件と選択肢の関連が見えないのが一番の問題かと・・・
仕様の検討ができていないのでは?

・「作業開始」「作業終了」ボタンをクリックすると現在時刻が記録される

作業開始を2回連続で押したらどうします?押せないようにするは、どうします?
Webアプリのようですが、誰でも使える?としたら、作業開始・終了は別の人が押せる?

・「記録を表示する」ボタンで今までの記録が一覧表示される

”今まで”というのは、どれくらいの期間?全量?管理者向けの機能?

jsonデータに現在時刻を表示

jsonにする必然性は何?(PHP側で直接画面生成するのでも良いですよね?)

まったく検討されていないわけでは無いと思いますが、表現されていない前提事項が多いと思われます。

投稿2017/06/18 05:27

編集2017/06/18 05:34
momon-ga

総合スコア4820

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

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

kotr1993

2017/06/18 09:01

ご回答いただき有難うございます。 諸々の不足点がありまして、大変申し訳ありません。 下記、考えた範囲で回答させていただきます。 ◆ 作業開始を2回連続で押したらどうします?押せないようにするは、どうします? Webアプリのようですが、誰でも使える?としたら、作業開始・終了は別の人が押せる? startを一度押すとstartはdisabledになり、endを押すとそれが解除されてendがdisabledになる仕様を考えております。 基本的にはユーザーは自分のみの想定です。 ◆ ”今まで”というのは、どれくらいの期間?全量?管理者向けの機能? ゆくゆくは表示データの絞り込み等もしたいと思いますが、現状としては最低限の機能として全量を表示で考えております。 ◆ jsonにする必然性は何?(PHP側で直接画面生成するのでも良いですよね?) こちらですが、まず表記ミスで表示ではなく「保存」でした。すみません。修正しました。 jsonにする理由ですが、時刻などのデータをどこに保存するか考えた際に、jsonファイルで管理できるのではないかと思ったためです。そのような知識が大変乏しく、アドバイスしづらくなってしまい申し訳ありません。 他にもここはどうなの?みたいな点があればご指摘いただければ、回答させていただきます。 改めて、こういう仕様のものを実装するとなるとどのような方法が考えられるかご教示いただけますでしょうか。(一般的でなくとも構いません。どのような選択肢があるのか教えていただければ幸いです。)
guest

0

がるです。
すみませんコメントだとソースコードが書きにくいので、回答のほうで書かせていただきます。

どうやってそのクリックされた時の現在時刻を保存し、かつ過去の記録を呼び出してくるかという点です。そういう意味で、データベースを作成してそこに保存していくべきなのか、例えばjsonファイルのようなシンプルなファイルに配列として入れていくべきなのかという点で、アドバイスをいただけたらと思い、質問させていただきました。

なるほど。
こちらについては色々な意見があるか、と思いますので「1つの見解」としてみていただければ。

自分であれば、おそらく「データベースに」入れると思います。
テーブルは、おそらく

CREATE TABLE タイムレコーダー ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '一意に識別するID', user_id INT UNSIGNED NOT NULL COMMENT '打刻した人のユーザID。実際には、intでもvarcharでも、おそらくあるであろう「ユーザテーブル」に合わせて適宜', stamp_type TINYINT UNSIGNED NOT NULL COMMENT '1:出勤, 2:退勤', stamp_at datetime NOT NULL COMMENT '打刻時間', INDEX (stamp_at), PRIMARY KEY(id) )CHARACTER SET 'utf8mb4', ENGINE=InnoDB, COMMENT='1レコードが「1回の打刻」を意味するテーブル';

といった感じのものを用意して。

打刻自体は、「ユーザの認証」はあるにしても、打刻自体は「出勤を二回押そうが出勤せずに退勤だろうが」、ただひたすらに、愚直にこのテーブルにINSERTしていくと思います。

で、過去の記録の呼び出しについては、とりあえずはMySQLであれば

SELECT * FROM タイムレコーダー WHERE stamp_at BETWEEN 'みたい開始日' AND 'みたい終了日' AND user_id=[みたい人のユーザID] ORDER BY id;

といった感じで、データが引き出せると思うので(厳密には「月末出勤で徹夜して翌月の早朝に帰宅」が取れないので、もうちょっと工夫する必要がありますが)。
あとは、とりあえず一端は「適当に整頓して表示」をすれば、「過去の記録の出力」はできるか、と思います。

上述のような感じで、少しはイメージできそうでしょうか?

「値を適当に整頓して表示」の部分は、とりあえずざっくり作るのであれば私なら「配列をうまい事使って」やるかなぁ、と思いますが。
その辺も、気になったらまた質問してくださいませ。

投稿2017/06/19 13:25

gallu

総合スコア506

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

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

kotr1993

2017/06/22 02:53

がる様 ご回答有難うございます。お返事が遅れてしまい申し訳ありません。 なるほど、やはりデータベースに入れていくのですね!大変わかりやすく、イメージが出来ました。有難うございます!ご教示いただいたやり方で試してみます。 質問が曖昧な中ご丁寧に答えてくださり、感謝いたします。また質問させていただくことがあるかと思いますが、何卒よろしくお願いいたします。
guest

0

ベストアンサー

がると申します。

前提条件の「勉強目的も兼ねて簡単なタイムレコーダーを作りたいと思っています」ですが。
勉強目的はあるとして、「それ以外に、実用実務でも使う」かどうか、で、割と答えの感触が変わってくるような気がします。

「勉強が主眼で、合わせて自分(+責任が取れる範囲の数人程度)が、実験的に使う」のであれば。
一端「まずは動くところまで実装」をしてみて、問題が起きてから対応、といった手法も、特に初めの頃は、あり、かと思います。

ただもし「実用実務で使う」のであれば、ある程度の「基本的に想定される問題への考察」などは、しておいたほうが安全か、と思います。

上述を前提にしまして。
タイムレコーダーであれば、個人的には
・如何に個人を認識/識別するか
が一番重要度としては高く、後は「押し忘れや押し間違いに対してどうするか」という、こちらはどちらかというと「決め事」をどうするか、といったあたりが重要か、と思います。

勉強が目的、であるのであれば。
例えば
・社員番号(という事にしておく、適当な番号)を入力して個人とみなす
・「押し忘れと押し間違い」は後で管理者が修正する事を前提に、一端は「ユーザの入力」を、たとえ「二重に押したとしても」愚直に登録しておく
あたりが、一番初めの実装としては、わかりやすくて楽なのではないかなぁ、と思います。

上述が出来るようになってから、細かい所を考えてみてもよいように思いますが、如何でしょうか?

ちなみに「実用実務」の場合は、上述だと、まず個人認証の時点で「ほかの人が代理で出勤、勝手に退勤を押せる」などの問題があるので、かなり慎重に作る必要があるとは思います。

以上、何かの参考にでもなれば幸いです。

投稿2017/06/18 14:19

gallu

総合スコア506

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

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

kotr1993

2017/06/18 15:33

ご回答いただき有難うございます。 ご回答をいただき、改めて自分の質問の仕方がひどく未熟であったと深く反省しております。それなのにご丁寧にコメントいただけて、嬉しい限りです。有難うございます。今後は質問もより考えてからしたいと思います。 ◆ 上述が出来るようになってから、細かい所を考えてみてもよいように思いますが、如何でしょうか? おっしゃる通りでして、そのようにステップアップしていければと思っております。 今回実装したい範囲で申し上げますと、完全にユーザーは私のみで、登録後の内容修正等もその都度自分で対応する形で考えております。 その上で、やはり自分として詰まった点としましては、どうやってそのクリックされた時の現在時刻を保存し、かつ過去の記録を呼び出してくるかという点です。そういう意味で、データベースを作成してそこに保存していくべきなのか、例えばjsonファイルのようなシンプルなファイルに配列として入れていくべきなのかという点で、アドバイスをいただけたらと思い、質問させていただきました。 ご指摘いただいた通り、非常に未熟な質問内容だと感じましたので、合わせて質問自体も修正させていただきます。有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問