
こんにちは、みなさん宜しくお願い致します。
現在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に登録される処理すら出来ない状態です。
ご教授をお願いしたく質問させて頂きました。
よろしくお願いします。

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のところは、工夫してみてください。
racchoman様、お返事遅くなり申し訳ございません。
教えて頂いたコードで処理を実装する事が出来ました。
しかし肝心な私自身が上記コードを理解出来ていませんので
これからゆっくりと読み解いていきたいと考えております。
ちなみにこれとは関係のない質問なのですが、PHPやDBをどのように
勉強なさっているのでしょうか?
自分は正直解らない事が多過ぎて…上記のような処理も全く思いつきません。
良い勉強方法などがあれば、ご教授頂けませんか?
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]){
sjam様、ご返答遅くなり申し訳ございません。
度々のご教授感謝しております。
早速手直しして、動くようにしたいと思います。
ありがとうございました。

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

No.2
- 回答日時:
> > 1:日付表示は教えて頂いた処理で実現する事が出来ました。
> > if ($day < 15) $month--;
>
> 来年の1月になったとき、思わぬ誤動作をしないかと心配です。
「心配」というのは、曖昧な表現です。
誤作動するんでしょうか、しないんでしょうか。
判らないのであれば、mktime()について調べてみましょう。>#1さん
> > しかし自分が試した限りではcheckboxを押した項目だけを取得させDatabase
> > に登録させるという処理が出来ませんでした。
>
> 「試したけどできない」では、状況が伝わりません。
> 「こんなスクリプトを書いてみたらこんなエラーが出た」という風に、
> できるだけ具体的に説明してください。
差し支えない範囲で、プログラムを載せた方が、回答が得られやすいかと思います。
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
> に登録させるという処理が出来ませんでした。
「試したけどできない」では、状況が伝わりません。
「こんなスクリプトを書いてみたらこんなエラーが出た」という風に、
できるだけ具体的に説明してください。
totsugiino様、お返事ありがとうございます。
確かに言われる通り、具体的内容に欠けておりました。
次回からは気をつけるように致します。
ちなみに処理自体は知恵を貸してくれた人達のおかげで実装する事が
出来ました。 本当に感謝しております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
開始と終了を指定して、その間...
-
「取得先」という表現について
-
Excel VBA:特定の文字列以降(...
-
shシェルスクリプト 空白行の...
-
ps3で久しぶりにCDの音楽情報取...
-
【C#】DataGridViewの最大列数...
-
Dosブロンプトでtabを出力したい
-
findstrのerrorlevel
-
wordの差し込み印刷で文字...
-
XMLのタグの有無をPHPで判定し...
-
VB.NETでボリュームを取得・設...
-
INIファイル
-
VBA内でのGetPixelを使用した時...
-
Google scholarがひらけなくな...
-
完全なセッション破棄をしたい
-
ExcelVBAで、FileSystemObject...
-
WordでExcelデータを差込...
-
VB.NETからVBAマクロ(引数)を呼...
-
webサイトの参考資料:サイト名 ...
-
ActiveReportのサブレポート機...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
開始と終了を指定して、その間...
-
ファイル名に日付の挿入
-
C言語を使って、ある特定の日の...
-
コマンドプロンプト 日時を用...
-
MS-DOSコマンドのリダイ...
-
過去にVBAでの「シフト表の何日...
-
プルダウンメニューの値をDBに...
-
Accessで、DAOでAddnew
-
substrの使い方について教えて...
-
ASPでの日付の取得について
-
一週間の表示の仕方と文字表示
-
日付によって画像を変える
-
Accessコンボボックス
-
現在時刻をyyyymmddhhmmss形式...
-
VBAでのDATEについて
-
codeigniterの時間設定
-
C言語でシステム日付との差を...
-
md5について
-
昨日の日付を取得するVBscript
-
SQL:TIMESTAMPの期間検索を指...
おすすめ情報