まず、データの送信側に関してのコードです。
HTML
1// DBからデータを受け取る 2while($row = $stmt->fetch()) { 3 $row = array( 4 "data" => array( 5 array( 6 "id" => $row['id'], 7 "name" => $row['name'], 8 "dakoku" => $row['dakoku']), 9 ) 10 ); 11 $row_ct = count($row['data']); 12 13 for($no = 0; $no < $row_ct; $no++) { 14?> 15<form action="update.php" method="post"> 16<tr> 17<td> <?= h($row['data'][$no]['name']); ?> </td> 18<td> <select name="data[<?= $no; ?>]['dakoku']" value="<?= h($row['data'][$no]['dakoku']; ?>"> 19<option <?= $row['data'][$no]['dakoku'] != '出勤' ?: 'selected' ?> value="出勤">出勤</option> 20<option <?= $row['data'][$no]['dakoku'] != '退勤' ?: 'selected' ?> value="退勤">退勤</option> 21<option <?= $row['data'][$no]['dakoku'] != '休戻' ?: 'selected' ?> value="休入">休入</option> 22<option <?= $row['data'][$no]['dakoku'] != '休戻' ?: 'selected' ?> value="休戻">休戻</option> 23</select> 24<td> 25<?php } ?> 26<?php } ?> 27</tr> 28<input type="submit" value="保存">
だいぶ省略したりとかありますが、、、、
上記のようなコードを作成し、表示させると、データベースに入っていたのが表示させることはできました。
例えばで、updata.phpにてprint_r($_POST)してみたのですが、最後の行の一行しかPOSTされていない様子です。
氏名:テスト 打刻:出勤 時:12 分:30
氏名:テスト 打刻:退勤 時:18 分:30
保存
と表示されたとして、保存をクリックしたら、
Array([data]=>Array([0]=>Array(['dakoku']=>退勤//あと省略)
だったのです。
解決法はどのようになるでしょうか?
【追記】
回答いただいた内容での修正です。
※回答いただいた内容のままではあります。
HTML
1// DBからデータを受け取る 2while($row = $stmt->fetch()) { 3 $row['data'][] = array( 4 array( 5 "id" => $row['id'], 6 "name" => $row['name'], 7 "dakoku" => $row['dakoku']), 8 ); 9 ** // whileの閉じタグをここに変更** 10 } 11 $row_ct = count($row['data']); 12 13 for($no = 0; $no < $row_ct; $no++) { 14?> 15<form action="update.php" method="post"> 16<tr> 17<td> <?= h($row['data'][$no]['name']); ?> </td> 18<td> <select name="data[<?= $no; ?>]['dakoku']" value="<?= h($row['data'][$no]['dakoku']; ?>"> 19<option <?= $row['data'][$no]['dakoku'] != '出勤' ?: 'selected' ?> value="出勤">出勤</option> 20<option <?= $row['data'][$no]['dakoku'] != '退勤' ?: 'selected' ?> value="退勤">退勤</option> 21<option <?= $row['data'][$no]['dakoku'] != '休戻' ?: 'selected' ?> value="休入">休入</option> 22<option <?= $row['data'][$no]['dakoku'] != '休戻' ?: 'selected' ?> value="休戻">休戻</option> 23</select> 24<td> 25<?php } ?> 26</tr> 27<input type="submit" value="保存">
上記のようにwhileの閉じタグを変更してみましたが、、、
そうなると、そもそもデータが表示されなくなりました。エラーは出ていません。
whileを閉じてしまったから?でしょうか?
質問時のコードであれば、値などは表示されます。
【追記】
最初の質問のコードでの話しですが、
PHP
1while($row = 2※省略させていただきます 3$row_ct = count($row['data']); 4の後に、var_dump($row); 5// array(1){["data"]=>array(1){[0]=>array(3){["id"]=>○○["name"]=>○○["dakoku"]=>○○}}} 6// array(1){["data"]=>array(1){[0]=>array(3){["id"]=>××["name"]=>××["dakoku"]=>××}}} 7となりました。 8var_dump($row_ct);だと 9int(1)int(1)となりました
※データが2行あった事としています。
こういう部分がもしかして原因なのか?ということも考えられませんか?
結局data[0]['dakoku']と数字の部分がうまく行ってないのかなと思ったのですが、、、、
回答の参考になればと思います。。。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/19 06:29
2016/02/19 07:10