• ベストアンサー

PHPとPostgreSQLを使用した勤務管理

こんにちは、みなさん宜しくお願い致します。 現在PHPとPostgreSQLを使用して勤務管理を作成しているのですが またまた躓き自分ではこれ以上解決出来なくなったので、再度こちらにて質問させて頂きます。 ※自分が行おうとしている処理一覧です 下記のようなレアウトのテーブルがあります。 ---------------------------------------- 日付(曜日) | 労働時間 | チェックボックス | 登録ボタン  当月15日    |  翌月15日 ---------------------------------------- となっております。 1:日付表示は教えて頂いた処理で実現する事が出来ました。 <?php $now = time(); $year = date('Y', $now); $month = date('m', $now); $day = date('d', $now); if ($day < 15) $month--; $numOfDays = date('t', mktime(0, 0, 0, $month, 1, $year)); for ($d = 0; $d < $numOfDays; $d++){ echo date("Y-m-d(D)", mktime(0, 0, 0, $month, 15+$d, $year)). "\n"; } ?> 2:労働時間を入力し、登録ボタンを押せば日付と労働時間がDataBaseに登録される様にしたい 3:出来るならば登録をチェックボックスが押されている項目だけをDatabaseに登録するようにしたいのです。 しかし自分が試した限りではcheckboxを押した項目だけを取得させDatabase に登録させるという処理が出来ませんでした。 それどころか、労働時間を入力し登録ボタンを押せば労働時間を入力した 日付と労働時間がDataBaseに登録される処理すら出来ない状態です。 ご教授をお願いしたく質問させて頂きました。 よろしくお願いします。

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

  • ベストアンサー
  • racchoman
  • ベストアンサー率71% (20/28)
回答No.4

$youbi = $weekday[$w]; echo "<TR> <TD>$date</TD><TD>$youbi</TD> <TD><INPUT TYPE='text' NAME='work_time'.$d SIZE='10'VALUE='work_time'.$d></TD> <TD><INPUT TYPE='checkbox' NAME='work_check'$d></TD> のところですが、 $youbi = $weekday[$w]; $ymddate = date("Ymd", mktime(0, 0, 0, $month, 15+$d, $year)); echo "<TR> <TD>$date</TD><TD>$youbi</TD> <TD><INPUT TYPE='text' NAME='work_time[$ymddate]' SIZE='10'></TD> <TD><INPUT TYPE='checkbox' NAME='work_check[]' VALUE='$ymddate'></TD> とかにしておくと、ユーザがチェックした日付(yyyymmdd形式)が、$_POST['work_check']の中に配列で入ります。 労働時間のデータは、例えば2007年04月10日のデータは、 $_POST['work_time']['20070410']とすれば取得できます。 なので、以下のようにすればINSERT用のデータ(チェックボックスがONになっている分)を得られます。 foreach ($_POST['work_check'] as $tmp) { echo "INSERT用のデータです "; echo "日付 $tmp : 労働時間 ". $_POST['work_time'][$tmp]. "\n"; } 具体的なSQLのところは、工夫してみてください。

destonias
質問者

お礼

racchoman様、お返事遅くなり申し訳ございません。 教えて頂いたコードで処理を実装する事が出来ました。 しかし肝心な私自身が上記コードを理解出来ていませんので これからゆっくりと読み解いていきたいと考えております。 ちなみにこれとは関係のない質問なのですが、PHPやDBをどのように 勉強なさっているのでしょうか? 自分は正直解らない事が多過ぎて…上記のような処理も全く思いつきません。 良い勉強方法などがあれば、ご教授頂けませんか?

その他の回答 (4)

  • sjam
  • ベストアンサー率41% (26/63)
回答No.5

ざっとみただけですが… if(work_time1 AND work_check1){ は if($work_time1 AND isset($_POST[work_check1])){ かな。 又は <INPUT TYPE='checkbox' ~ を <INPUT TYPE='checkbox' value='1'~ などにしてから if($work_time1 AND $_POST[work_check1]){

destonias
質問者

お礼

sjam様、ご返答遅くなり申し訳ございません。 度々のご教授感謝しております。 早速手直しして、動くようにしたいと思います。 ありがとうございました。

回答No.3

> 誤作動するんでしょうか、しないんでしょうか。 > 判らないのであれば、mktime()について調べてみましょう。>#1さん totsugiinoのプログラムではないので、 別に今はわからなくてもかまいません。 totsugiinoは、ただ心配しているだけです。 調べる必要があるとすれば、元の質問をされたかたのほうです。 よろしいでしょうか。

  • racchoman
  • ベストアンサー率71% (20/28)
回答No.2

> > 1:日付表示は教えて頂いた処理で実現する事が出来ました。 > > if ($day < 15) $month--; > > 来年の1月になったとき、思わぬ誤動作をしないかと心配です。 「心配」というのは、曖昧な表現です。 誤作動するんでしょうか、しないんでしょうか。 判らないのであれば、mktime()について調べてみましょう。>#1さん > > しかし自分が試した限りではcheckboxを押した項目だけを取得させDatabase > > に登録させるという処理が出来ませんでした。 > > 「試したけどできない」では、状況が伝わりません。 > 「こんなスクリプトを書いてみたらこんなエラーが出た」という風に、 > できるだけ具体的に説明してください。 差し支えない範囲で、プログラムを載せた方が、回答が得られやすいかと思います。

destonias
質問者

お礼

totsugiino様、racchoman様、お返事感謝しております。 どうしても前に進めない為、再度の質問お許しください。 以下コードです ----------------------------------------------------------- $weekday = array("日","月","火","水","木","金","土"); $now = time();  $year = date('Y', $now);  $month = date('m', $now);  $day = date('d', $now); if($day < 15){ $month--; } $numOfDays = date('t', mktime(0, 0, 0, $month, 1, $year)); for($d = 0; $d < $numOfDays; $d++){ $date = date("Y年m月d日", mktime(0, 0, 0, $month, 15+$d, $year)); $w = date("w", mktime(0, 0, 0, $month, $d+1, $year)); $youbi = $weekday[$w]; echo "<TR> <TD>$date</TD><TD>$youbi</TD> <TD><INPUT TYPE='text' NAME='work_time'.$d SIZE='10'VALUE='work_time'.$d></TD> <TD><INPUT TYPE='checkbox' NAME='work_check'$d></TD> </TR>"; } $work_time1 = $_POST['work_time1']; $result = pg_query($con, "SELECT TO_CHAR(CURRENT_DATE, 'yyyy-mm-dd')"); $yyyymmdd = pg_fetch_result($result, 0, 0); if(work_time1 AND work_check1){ pg_query($con, "INSERT INTO work_time_tbl(day, work_time) VALUES ('$yyyymmdd', '$work_time1')"); } ----------------------------------------------------------- このようにすると形的には ----------------------------------------- 日付(曜日) | 労働時間 | チェックボックス |  当月15日    |  翌月15日 ------------------------------------------ となるのですが、チェックボックスを押しても押さなくても値の入力が出来ません。 あとこのコードだとPHPで表示している日付をDBに格納する事が出来ません。 これは完全な知識不足です…(>_<) 望む処理としては -------------------------------- 任意日付| 勤務時間 | チェク済み | -------------------------------- で登録ボタンを押せばDBにと登録される様にしたいです。 ----------------------- 任意日付| 勤務時間 | 1 | ----------------------- ※『1』はチェック済みFlag この処理で三日間位躓いていますが、一向に解決策が見出せないので 皆様のお力をお借りしたいと考えております。

回答No.1

> 1:日付表示は教えて頂いた処理で実現する事が出来ました。 > if ($day < 15) $month--; 来年の1月になったとき、思わぬ誤動作をしないかと心配です。 > しかし自分が試した限りではcheckboxを押した項目だけを取得させDatabase > に登録させるという処理が出来ませんでした。 「試したけどできない」では、状況が伝わりません。 「こんなスクリプトを書いてみたらこんなエラーが出た」という風に、 できるだけ具体的に説明してください。

destonias
質問者

お礼

totsugiino様、お返事ありがとうございます。 確かに言われる通り、具体的内容に欠けておりました。 次回からは気をつけるように致します。 ちなみに処理自体は知恵を貸してくれた人達のおかげで実装する事が 出来ました。 本当に感謝しております。