• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPとMYSQLを使用したデータベース編集。)

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

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

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

  • ベストアンサー
  • 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