PHPとMYSQLを使用した従業員シフト管理システムの作成方法

このQ&Aのポイント
  • PHPとMYSQLを使用して従業員のシフト管理のシステムを作成する方法を解説します。
  • 一日ずつデータをデータベースに入力する方法から、一週間分のデータをまとめてMYSQLに入力する方法まで詳しく説明します。
  • 従業員ごとに日付の欄が一週間分あり、出勤時間と退勤時間を入力するフォームを作成し、送信ボタンでデータをMYSQLに入力する仕組みを作ります。
回答を見る
  • ベストアンサー

PHPとMYSQLを使用したデータベース編集。

PHPとMYSQLを使用して、従業員のシフト管理のシステムを作ろうと思っています。 テーブルには、従業員ID、日付、出勤時間、退勤時間のカラムを持たせるつもりです。 そこから日付を指定して、その日に出勤する従業員を一覧にしたり、従業員を指定して、その従業員の一週間分のシフトを一覧にしたいと考えています。 そこで、データをPHPでMYSQLに入力したいのですが、一日ずつデータをデータベースに入力することはできるのですが、一週間分のシフトをまとめてMYSQLに入力する方法がわかりません。 何かよい方法はありませんか? ヒントになるような言葉、参考になりそうなウェブサイト、書籍、ささいなことでもアドバイスいただけたらと思います。よろしくお願いします。 イメージとしては、従業員ごとに日付の欄が一週間分あり、その日付の欄ごとに出勤時間、退勤時間を入力できる欄があり、そのフォームを入力してから送信ボタンを押すと入力した一週間分のデータがMYSQLに入力されるようにしたいです。 わかりにくいかもしれませんが、よろしくおねがいします。

  • MySQL
  • 回答数4
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • mzon
  • ベストアンサー率48% (26/54)
回答No.4

No2の追加です。 データの送信方法(POSTorGET)によって取得方法は変更されることはご存知ですよね? postの場合は$_POST['フィールド名']、getの場合は$_GET['フィールド名']となります。 下記は簡単な例です。 (DBオープン、画面の処理、フィールドの入力値確認などの実装は省略してます。 ので、このままでは実行できませんが、SQLのイメージのみです。) <?php // 値を取得 // 従業員ID $lUserId = $_POST['USERID']; // 日付 $dDates = array($_POST['DATE1'],$_POST['DATE2'],$_POST['DATE3'],$_POST['DATE4'],$_POST['DATE5'],$_POST['DATE6'],$_POST['DATE7']); // 出勤時間 $tStarts = array($_POST['START1'],$_POST['START2'],$_POST['START3'],$_POST['START4'],$_POST['START5'],$_POST['START6'],$_POST['START7']); // 退勤時間 $tEnds = array($_POST['END1'],$_POST['END2'],$_POST['END3'],$_POST['END4'],$_POST['END5'],$_POST['END6'],$_POST['END7']); //日付フィールドの数分実行 for( $iLoop=0; $iLoop<count($dDates); $iLoop++ ) { // SQL文作成 $sSql = "INSERT INTO TableName " $sSql .= "( UserID, Hiduke , StartTime, EndTime ) " $sSql .= "VALUES (" $sSql .= $lUserId . "," $sSql .= "'" . $dDates($iLoop) . "'," $sSql .= "'" . $tStarts($iLoop) . "'," $sSql .= "'" . $tEnds($iLoop) . "');" // SQL文実行 $result = mysql_query($pSql); } ?> 私のPHPの参考サイト マニュアル:http://php.net/manual/ja/index.php 初心者入門:http://www.standpower.com/index.html DB:http://keicode.com/cgi/

katsubonbon
質問者

お礼

遅くなってしまい、申し訳ありません。 まだ成功したわけではありませんが、大変丁寧で参考になる回答をいただいたのでベストアンサーとさせていただきました。 本当にありがとうございまいした。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

ストアードプロシージャを使った簡単な例をあげておきます CREATE TABLE shift_table (user_id INT,start_datetime DATETIME,end_datetime DATETIME); DROP PROCEDURE IF EXISTS INSERT_N_DAY; DELIMITER // CREATE PROCEDURE INSERT_N_DAY(IN user INT,IN start DATETIME,IN end DATETIME,IN n INT) BEGIN DECLARE counter INT DEFAULT 0; WHILE counter < n DO INSERT INTO shift_table (user_id,start_datetime,end_datetime) VALUES(user,start + INTERVAL counter DAY ,end + INTERVAL counter DAY); SET counter = counter + 1; END WHILE; END // DELIMITER ; としておき、あるユーザーが勤務時間が同じであれば1週間分のスケジュールはこんな感じでいれます CALL INSERT_N_DAY(100,'2011-02-16 09:00:00','2011-02-16 18:00:00',7); CALL INSERT_N_DAY(200,'2011-12-28 20:00:00','2011-12-29 03:00:00',10); id=100のユーザーは2/16 9時~18時を1週間つづけます id=200のユーザーは12/28 20時~翌3時までの深夜勤を10日つづけます

katsubonbon
質問者

補足

ご回答ありがとうございます。 ストアードプロシージャというのは初めて聞いたので勉強になりました。 しかし、今回のシフトは日によって勤務時間が異なったものなので、教えていただいたストアードプロシージャを使用するような状況とは少し違うかもしれません。 別の機会に活用させていただきます。 スクリプトまで載せていただき、どうもありがとうございました。

  • mzon
  • ベストアンサー率48% (26/54)
回答No.2

画面のフィールドを一週間分もってやり、あとはFOR文で繰り返す方法でいいのではないでしょうか? 従業員IDは1つ用意(非表示でもかまわないと思います。) 日付、出勤時間、退勤時間はそれぞれ1~7とする。 Forで1~7まで処理し、毎回『Insert』文を実行すればよいのではないでしょうか?

katsubonbon
質問者

補足

ご回答ありがとうございます。 アドバイスどおり、やってみようと思います。   for文でひとつづつinsertしようと思うのですが、 どのように、初期化式、条件式、条件更新式を設定すればよいでしょうか? 例えば以下のようにPHPで取得してきた日付にfor文を使う場合にはどのように式を設定するべきでしょうか。 <?php echo $date=date("m/d"); ?> <?php echo $date1=date("m/d", strtotime("1 day")); ?> <?php echo $date2=date("m/d", strtotime("2 day")); ?> 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • kool_noah
  • ベストアンサー率33% (95/285)
回答No.1

一週間分のデータをどうもってるのか知りませんが・・ CSVとかの外部ファイルにデータを持つのであれば、fopenで読み込んでfor文で一つずつSQL投げるなり、Insert一つにして投げるなりお好きなように。 画面上で一週間分入力してとかなら渡ってきたデータを以下略

katsubonbon
質問者

補足

画面上で一週間分入力したいと思っています。 for文でひとつづつinsertしようと思うのですが、 どのように、初期化式、条件式、条件更新式を設定すればよいでしょうか? 例えば以下のようにPHPで取得してきた日付にfor文を使う場合にはどのように式を設定するべきでしょうか。 <?php echo $date=date("m/d"); ?> <?php echo $date1=date("m/d", strtotime("1 day")); ?> <?php echo $date2=date("m/d", strtotime("2 day")); ?> 初歩的な質問で申し訳ありませんが、よろしくお願いします。

関連するQ&A

  • PHPとMYSQLを使用したシフト管理システム。

    現在、PHPとMYSQLを使用してシフト管理システムを作ろうと考えているのですが、どのようなテーブル構造にするかで悩んでいます。 どなたかアドバイスをいただけるとありがたいです。 よろしくお願いします。 ・シフト管理でやりたいこと。 日付を指定すると、その日に出勤する従業員の写真、出勤時間、退勤時間が一覧になって表示される。 従業員を指定すると、その従業員の一週間分のシフト(出勤時間、退勤時間)が表示される。 ウェブサイトで内容を表示、編集できるようにする。 尚、従業員のテーブル"juugyouin"(カラムはnumber,name,age,・・・等)は別に作成済みです。 また、他にこのようなシステムを作るにあたっての注意事項などアドバイスいただけたらと思います。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Excelのデータをデータベースで使用できる形に変換

    現在、excelでシフト表があります。 これをMYSQLにインポートをしようと思うのですが、 データの変換方法が分かりません。 現在のデータはA列に社員ID 1行目に1月分の日付が入っていて、 出勤可能を1、出勤不可を2 出勤決定を3で入力されてます。 分かりずらいかもしれませんが、下記のような表になります。   2008/7/1 2008/7/2 2008/7/3 2008/7/4 ・・・ 001  1    2     1    2 002  2    3     1    2 003  1    1     3    2 004  1    2     2    2 ・ ・ これを 001  1 2008/7/1 001  2 2008/7/2 001  1 2008/7/3 001  2 2008/7/4 002  2 2008/7/1 002  3 2008/7/2 002  1 2008/7/3 002  2 2008/7/4 ・ ・ ・ という1行1レコードの形式に変換したいと思います。 従業員数が数百人になるので、一度に変換できる方法が無いかと思い質問させていただきました。 どうかよろしくお願いいたします。

  • PHPでMySQLのデーターベースが書込み出来ない

    PHPとMySQLとJAVAスクリプトで作成しましたデーターベースについてお尋ねします。 PHPとMySQLで作成したデータベースの検索したり、読み込みを普通に可能ですが、書き込み及び、削除が出来ません。 PhpMyAdminでは書けます(データー入力出来ます)が、PHPプログラムからはデーターを入力したり、削除を行うことが出来ません。 そして、全くエラーも出ません。 PHP上では「書き込みました」と、いかにも正常なようなメッセージが返ってきます。 が、中身は空です。 システムが出来上がって問題なく3年以上使用していたのですが、自宅のLINUXサーバーのHDDが壊れましたので、再度システム構築をやり直しました。 MySQLとPHPも再インストールを行い再構築を行いました。 その後上記症状が出て書き込み、削除が出来なくなりました。 PHPのプログラムは全く触っておらず、変更も更新もしておりません。 念のためプログラムのチェックも何度もしておりますが、勿論これといって問題は見あたりません。 PHP.INI等の設定ファイルに問題があるのでしょうか。 それとも、MySQLに問題が有るのでしょうか。 宜しくご教授の程お願い致します。

  • PHP&MySQL従業員一覧に対するスケジュール

    2回目の質問です。 社員スケジュールを1週間分一覧出来るプログラムをPHP&MySQLで作ってます。 どうしても出来なかったです。 【shop (支店テーブル)】 shop_id ※オートインクリメント 支店ID name ※支店名 start_time ※Time型?お店の時間は固定 営業開始時間 last_time ※Time型?お店の時間は固定 営業終了時間 【worker (従業員テーブル)】 worker_id ※オートインクリメント 従業員ID shop_id ※支店ID worker_name ※従業員名 【schedule (予定テーブル)】 schedule_id ※オートインクリメント 予定ID worker_id ※従業員ID start_time ※DateTime型 勤務開始予定時間 last_time ※DateTime型 勤務終了予定時間 出力させたいのが支店の全従業員の名前と1週間分のデータなのですが、日付の出力までは出来ています。 予定の入って無い従業員に対しても、一覧表示に出したいのですがどうしても出来ません。 ※予定の入ってる従業員だけ出力するのは出来ます。 この場合、日付だけのテーブルを別途用意して連結させたら実現出来るのでしょうか? それとも複雑なSQL文で抽出する事が出来るのでしょうか? DBの構造変えたら作るよ!等の知恵を貸して戴けたら幸いです。 実現させたい出力イメージを画像で添付します。 宜しくお願いします。

  • phpで読み込むmysqlのデータベースが文字化け

    閲覧ありがとうございます。 数年前に作成し、なんの問題もなく運用していた顧客管理のデータベースが昨日から日本語の部分のみ文字化けをおこし????という表示になっています。 サーバーからmysqlのデータを見に行くと、データそのものには問題がなさそうです。 変更は何も加えていません。 サーバー側も見に行きましたが、メンテナンスや変更は行われておりません。 phpからの読み込みに問題があるのかと思ったのですが、新しくテストで入力した文字列に関してはちゃんと表示ができていたので、一体何に問題があるのかわからなくなっています。 読み込みに問題があるとすれば、新しく入力したものに関しても文字化けすると思ったのですが・・・。 考えられる原因と、できる対処はなにかありますでしょうか? phpバージョン PHP5.3.3 mysqlバージョン MySQL5.0 文字コード UTF-8

    • 締切済み
    • PHP
  • MySQLとPHPによるデータベースの作成

    MySQLとPHPを組み合わせて、時刻表(電車、バス等)のデータベースを作成 しようと思っています。 最終目標としては http://transit.jp.msn.com/ こんな感じにしたいのですが、私個人でやる分には時間がかかりそうなので、 http://miztools.so.land.to/php5_list/rosen/rosen_sch.php こんな感じで完成すればいいかなって思っています。 そこで3つほど質問なのですが、 1, PHPとMySQLについて述べてあるお勧めの本は? 2, よくネットで見かける駅探などの時刻表検索システムの仕組みは? 1についての補足。超初心者のため、書籍を購入しようと思っております。できれば、サンプルが載っているものがいいです。そうでなくとも、検索システムについて詳しく分かるものでも構いません。 2についての補足。駅探等もPHP+MySQLのように、私が行おうとしているものと同じ考え、同じプログラミング言語で設計できるのか?ということ。 ちなみにPHP、MySQLともに超初心者です。C言語はある程度できます。 OS : Windows XP phpdev423をインストール済み

    • ベストアンサー
    • MySQL
  • PHPとMySQLについて

    PHPとMySQLについて PHP、MySQLともに初心者の者です。 ネットの情報を参考に以下のようなプログラムを作成しました。 <?php //ファイルを読み込み require_once("DB47.php"); // クエリを送信する $sql = "SELECT * FROM japanDB ORDER BY PREF_CD"; $result = executeQuery($sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //表示するデータを作成 if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "".$row["PREF_CD"]." ".$row["PREF_NAME"]." "; $tempHtml .= "\n"; } $msg = $rows."件のデータがあります。\n\n"; }else{ $msg = "データがありません。\n\n"; } //結果保持用メモリを開放する mysql_free_result($result); ?> <?= $msg ?> <?= $tempHtml ?> これはデータベースに 1、北海道 2、青森 ・  ・ ・  ・ ・  ・ 47、沖縄 といった情報を与えており、PHP側でMySQLに接続し、その内容をコマンドプロンプト上で表示するといったものです。 しかし、PHPプログラムを実行してしまうと、全データが一気に表示されてしまうので、見づらいものとなっています。 そこで、地名や番号を入力すれば、地名を表示するような検索機能を付けたいのですが、PHPからMySQLデータベース内を検索する方法が分かりません。検索機能をこのプログラムに組み込みたいのですが・・・。 どなたかご教授お願いいたします。 ***環境*** OS : Windows XP Pro PHP4.2.3 、MySQLインストール済み **********

    • ベストアンサー
    • PHP
  • PHP&MySQL日付をまたぐスケジュール表示

    初めて質問します。 社員スケジュールを1週間分一覧出来るプログラムをPHP&MySQLで作ってます。 どうしても出来なかったです。 【shop (支店テーブル)】 shop_id ※オートインクリメント 支店ID name ※支店名 start_time ※Time型?お店の時間は固定 営業開始時間 last_time ※Time型?お店の時間は固定 営業終了時間 【worker (従業員テーブル)】 worker_id ※オートインクリメント 従業員ID shop_id ※支店ID worker_name ※従業員名 【schedule (予定テーブル)】 schedule_id ※オートインクリメント 予定ID worker_id ※従業員ID start_time ※DateTime型 勤務開始予定時間 last_time ※DateTime型 勤務終了予定時間 条件 1.お店の営業時間で日付とスケジュール一覧が切り替わる。 0:00を過ぎた場合、どうしても上手に出来ません。 言葉だけでは伝わりにくいと思うのでExcelで出力イメージの画像も添付してます。 そのまま貼って使える様なソース等教えて戴けたら、ポイント等・・・ 知恵を貸して戴けるだけでも助かります。 急ぎ目なのでお願いします。

    • ベストアンサー
    • PHP
  • MySQLデータベースについて

    データベースについて詳しい方にお聞きしたい事があります。 初心者なので書いている内容におかしな点もあるかと思いますが、よろしくお願いします。 5年ほど前のJavaを習っていて、簡単なデータベースを作ったことはあります。 □現在、会社が違うレンタルサーバーを一つずつ借りています。 A社のサーバー上で作成したデータベースをB社のサーバー上に公開しているサイトから呼び出し、テーブルを一覧表示できるのでしょうか? □初心者がデータベースを作成するにはphpMyAdminを使用するのが一番良いでしょうか? 使い方を検索してみたらちょっと難しそうですね。 Javaでデータベースの勉強をしていた時はあらかじめ作ったフォームにデータを入力していくだけだったので、同じような感じのシステムはないかなと思いました。 □現在使用しているサーバーはMySQLが5つ使えると書いています。 既にWordPressでブログ開設していて4つ使用しています。残りは一つ。 野球チームのデータベースを作成しようと思っているのですが、これまでの試合の記録のデータ、これまでの選手のデータのデータベースを作成したいと思っています。 MySQLは残り一つですが、この二つのデータベースを作る事は可能なのでしょうか?二つ必要ですか? □スマホのサイトも作成しているんですが、PCサイトと同様にデータベースに接続し、一覧表示できるのでしょうか? スマホでPHPが使えるのかなと思ったので。 ご存知の方いらっしゃいましたらご教示ください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHP+MySQLでこのようなシステム

    PHPとMySQLで、このようなシステムを作れないかと考えているのですが、可能か不可能か、もしくはヒントだけでもいただだけないかと思い、質問させていただきました。 まず、PHP+MySQLというのは、javascriptとかも初心者用の本を買ったりしたのですが、こういうところに使うとかいまいち理解できず、 現在PHP+MySQLと必要な時だけjavascriptのサンプルをコピペとかで使って事足りているということです。 PHP+MySQLの知識は、浅い方ですが、データベースを使っての表示や条件抽出くらいはできるくらいです。 主に使うデータベース・ページは、下記の通りです。 データベース内にテーブルが複数あります。 ・table_01 ・table_02 ・table_03 全テーブルデータの一覧を表示させるPHP(1ページ20件毎に表示させています) ・itiran.php 各会員ページのPHP ・mypage.php 「このようなシステム」というのは、 ・一覧ページ【itiran.php】に[追加]ボタンを作り、[追加]を押すと会員ページ【mypage.php】に追加した商品が一覧として表示される ・【itiran.php】および【mypage.php】で追加した商品を一覧から[削除]できる ・【itiran.php】の各商品には、追加している人数[登録数]が表示される([削除]した場合は、人数は-1となる) 【itiran.php】テーブル例 ┼───┼───┼───────┼───┼ │NAME│ZAIKO│お気に入り    │登録数│ ┼───┼───┼───────┼───┼ │ポニョ │2,000 │ 追加       │500 │ ┼───┼───┼───────┼───┼ │ゲド  │1,000 │ 追加       │300 │ ┼───┼───┼───────┼───┼ │トトロ │9,000  │登録済み・・削除│100 │ ┼───┼───┼───────┼───┼ ・データベースは、各テーブル更新があった場合、一度の更新数が多くいので、1テーブルまるごとCSVで更新しています。 ・登録数を、このテーブル内に入れておいた方が良いのでしょうか。 参考になるようなサイトもなく、PHP+MySQL可能か不可能か、もしくはヒントだけでもお願い致します。

    • ベストアンサー
    • PHP