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

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

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

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

Q&A

解決済

1回答

3020閲覧

select nameの配列の書き方が分からない

fgfnabwym

総合スコア78

JavaScript

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

0グッド

0クリップ

投稿2015/12/27 13:37

javascriptを使い開始時刻と終了時刻から、一日分の労働時間を計算したいのですが、select nameの書き方が分かりません。

一日分のプログラムだと動きます。

for文でループをまわし、数日分を一度にやろうとすると動きません。数日分の労働時間を選択するセレクトボックスを表示し、ユーザーに選択してもらい、その際に合計時間を計算し表示し、入力し終わったら、ユーザーが入力した値をPOSTで送りたいです。

ネットで「select nameの配列 書き方」などと調べ、自分と同じような質問をした人がいたのですが、いまいち理解できませんでした。

もしわかる方がいたら、教えていただきたいです。

ファイル名
keisan3.php

html

1<script type="text/javascript"> 2function keisan(){ 3var start = document.form1.stimeH.selectedIndex * 60 + (document.form1.stimeM.selectedIndex * 10); 4var end = document.form1.etimeH.selectedIndex * 60 + (document.form1.etimeM.selectedIndex * 10); 5 6var total = end - start; 7 8var hour = Math.floor(total / 60); 9var min = total - (hour * 60); 10 11document.form1.field1.value = ""+hour; // 合計を表示 12document.form1.field2.value = ""+min; // 合計を表示 13} 14</script> 15 16<!--1行分のデータを表示する--> 17<form action="keisan6.php" name="form1" method="post"> 18<table border="1" cellspacing="0" cellpadding="5"> 19 20<?php 21for ($cnt=0; $cnt < 5; $cnt++) { 22?> 23 24<tr> 25<th>日付</th> 26<th style="padding: 5px; border: 1px solid #333333; width:220px;">労働時間</th> 27<th style="padding: 5px; border: 1px solid #333333; width:110px;">合計</th> 28</tr> 29 30<tr> 31<td><?php echo $cnt+1; ?></td> 32 33<td> 34<!--開始時刻--> 35<select name="hajimari1[$cnt]" onChange="keisan()"> 36<option>00</option> 37<option>01</option> 38<option>02</option> 39<option>03</option> 40<option>04</option> 41<option>05</option> 42<option>06</option> 43<option>07</option> 44<option>08</option> 45<option>09</option> 46<option>10</option> 47<option>11</option> 48<option>12</option> 49<option>13</option> 50<option>14</option> 51<option>15</option> 52<option>16</option> 53<option>17</option> 54<option>18</option> 55<option>19</option> 56<option>20</option> 57<option>21</option> 58<option>22</option> 59<option>23</option> 60</select> 61: 62<select name="hajimari2[$cnt]" onChange="keisan()"> 63<option>00</option> 64<option>10</option> 65<option>20</option> 66<option>30</option> 67<option>40</option> 68<option>50</option> 69</select> 70<!--開始時刻--> 7172<!--終了時刻--> 73<select name="owari[$cnt]" onChange="keisan()"> 74<option>00</option> 75<option>01</option> 76<option>02</option> 77<option>03</option> 78<option>04</option> 79<option>05</option> 80<option>06</option> 81<option>07</option> 82<option>08</option> 83<option>09</option> 84<option>10</option> 85<option>11</option> 86<option>12</option> 87<option>13</option> 88<option>14</option> 89<option>15</option> 90<option>16</option> 91<option>17</option> 92<option>18</option> 93<option>19</option> 94<option>20</option> 95<option>21</option> 96<option>22</option> 97<option>23</option> 98</select> 99: 100<select name="owari[$cnt]" onChange="keisan()"> 101<option>00</option> 102<option>10</option> 103<option>20</option> 104<option>30</option> 105<option>40</option> 106<option>50</option> 107</select> 108<!--終了時刻--> 109</td> 110 111<td><output name="field1">0</output>. 112 <output name="field2">0</output></td> 113</tr> 114</table> 115 116<?php 117} 118?> 119 120</table> 121<input type="submit" value="次へ"></form>

ファイル名
keisan6.php

html

1<?php 2echo "keisan6にいます<br>"; 3for ($cnt=0; $cnt < 5; $cnt++) { 4echo "for文の中にいます。cnt={$cnt}<br>"; 5 if (isset($_POST['hajimari1'][$cnt])) { 6 echo "if文の中にいます"; 7 echo "[{$_POST['hajimari1'][$cnt]}]<br>"; 8 } 9} 10?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

提示されたコードを見る限り、PHPの問題なので、JavaScript部分は書きません。

php

1<?php 2ini_set('display_errors', 1); 3error_reporting(E_ALL); 4 5// 任意設定値 6$start_date = '2016-01-01'; 7$days = 7; 8// 任意設定値ここまで 9 10$hours = range(0, 23); 11$minutes = [0, 10, 20, 30, 40, 50]; 12$objDate = new Datetime($start_date); 13$interval = new DateInterval(sprintf("P%dD", $days)); 14 15$diff = 0; 16 17if (null != filter_input_array(INPUT_POST)) { 18 19 $arrPost = filter_input_array(INPUT_POST); 20 21 $start_hour = $arrPost['start_hour']; 22 $start_minute = $arrPost['start_minute']; 23 $end_hour = $arrPost['end_hour']; 24 $end_minute = $arrPost['end_minute']; 25 26 foreach ($start_hour as $date => $val) { 27 $arrValues = [ 28 $start_hour[$date] 29 , $start_minute[$date] 30 , $end_hour[$date] 31 , $end_minute[$date] 32 ]; 33 34 if (!in_array('-1', $arrValues)) { 35 $start = (new Datetime(sprintf("%02d:%02d", $start_hour[$date], $start_minute[$date]))); 36 $end = (new Datetime(sprintf("%02d:%02d", $end_hour[$date], $end_minute[$date]))); 37 $intval = $end->diff($start); 38 $diff_hour = $intval->format('%h'); 39 $diff_minute = $intval->format('%i'); 40 $diff += $diff_hour * 60 + $diff_minute; 41 } 42 } 43} 44?> 45<!DOCTYPE HTML> 46<html lang="ja"> 47 <head> 48 <meta charset="UTF-8"> 49 <title></title> 50 </head> 51 <body> 52 <form action="" method="post"> 53 <?php while ($objDate < (new Datetime($start_date))->add($interval)) : ?> 54 <div> 55 <span><?php echo $objDate->format('Y-m-d'); ?></span> 56 57 <select name="start_hour[<?php echo $objDate->format('Y-m-d'); ?>]"> 58 <option value="-1">--</option> 59 <?php foreach ($hours as $hour): ?> 60 <?php 61 printf('<option value="%d"%s>%02d</option>' 62 , $hour 63 , ($start_hour[$objDate->format('Y-m-d')] == $hour) ? ' selected' : '' 64 , $hour 65 ); 66 ?> 67 <?php endforeach; ?> 68 </select> 69 <select name="start_minute[<?php echo $objDate->format('Y-m-d'); ?>]"> 70 <option value="-1">--</option> 71 <?php foreach ($minutes as $minute): ?> 72 <?php 73 printf('<option value="%d"%s>%02d</option>' 74 , $minute 75 , ($start_minute[$objDate->format('Y-m-d')] == $minute) ? ' selected' : '' 76 , $minute 77 ); 78 ?> 79 <?php endforeach; ?> 80 </select> 8182 <select name="end_hour[<?php echo $objDate->format('Y-m-d'); ?>]"> 83 <option value="-1">--</option> 84 <?php foreach ($hours as $hour): ?> 85 <?php 86 printf('<option value="%d"%s>%02d</option>' 87 , $hour 88 , ($end_hour[$objDate->format('Y-m-d')] == $hour) ? ' selected' : '' 89 , $hour 90 ); 91 ?> 92 <?php endforeach; ?> 93 </select> 94 <select name="end_minute[<?php echo $objDate->format('Y-m-d'); ?>]"> 95 <option value="-1">--</option> 96 <?php foreach ($minutes as $minute): ?> 97 <?php 98 printf('<option value="%d"%s>%02d</option>' 99 , $minute 100 , ($end_minute[$objDate->format('Y-m-d')] == $minute) ? ' selected' : '' 101 , $minute 102 ); 103 ?> 104 <?php endforeach; ?> 105 </select> 106 </div> 107 108 <?php $objDate->add(new DateInterval('P1D')); ?> 109 <?php endwhile; ?> 110 <div> 111 <button>submit</button> 112 </div> 113 114 <div> 115 合計 : <span><?php echo $diff; ?></span> 116 </div> 117 </form> 118 </body> 119</html>

php

1$minutes = [0, 10, 20, 30, 40, 50]; 23$minutes = array(0, 10, 20, 30, 40, 50); 4 5$arrValues = [ 6 $start_hour[$date] 7 , $start_minute[$date] 8 , $end_hour[$date] 9 , $end_minute[$date] 10]; 1112$arrValues = array( 13 $start_hour[$date] 14 , $start_minute[$date] 15 , $end_hour[$date] 16 , $end_minute[$date] 17);

投稿2015/12/27 15:09

編集2015/12/27 15:27
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

fgfnabwym

2015/12/27 15:23

Kosuke_Shibuyaさん ありがとうございます。 実行したところ、 Parse error: syntax error, unexpected '[' in /var/www/html/jobapp/date.php on line 11 とエラーが出ます。 コピペで全角が入ったわけでもなさそうで
退会済みユーザー

退会済みユーザー

2015/12/27 15:28 編集

PHP のバージョン古くないですか? 5.4より古いPHPは流石に使うべきではありませんね… 追記した部分を修正してください。
fgfnabwym

2015/12/27 15:33

PHP 5.3.3 (cli) (built: Jul 9 2015 17:39:00) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies でした。 バージョン:7.0.0が2015/12/03にリリースされていたので、アップデートをして、もう一度実行してみます。 Kosuke_Shibuyaさん、遅くまでありがとうございます。
退会済みユーザー

退会済みユーザー

2015/12/27 15:35

PHP7はやめた方がいいかも。大きなアップデートなので、既存のコードにかなりの影響があります。PHP5.6くらいがいいと思います。
fgfnabwym

2015/12/27 15:38

一度インストールしたら、バージョンを気にせずに使っていたのでこれからは、常にアップデートしないとだめですね。 phpのバージョンアップ情報の多さにびっくりしています。
退会済みユーザー

退会済みユーザー

2015/12/27 15:40

とりあえず、追記の部分をいじれば、5.3でも動きます。
fgfnabwym

2015/12/27 15:41

関係ない話なんですが、自分の今まで書いていたコードとKosuke_Shibuyaさんに書いていただいたコードが違いすぎて、驚いています。 今まで動けばいいやと考えていたんですが、それもダメですね。 php5.6をインストールして、Kosuke_Shibuyaさんのコードの意味を理解するところから始めようと思います。
退会済みユーザー

退会済みユーザー

2015/12/27 15:49

> 今まで動けばいいやと考えていたんですが、それもダメですね 自分が書いたコードは回答用に、問題点をわかりやすくするために簡略化したコードなので、実際に仕事で書くコードは違ってくると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問