質問編集履歴

4

解決

2016/07/09 03:21

投稿

Z-TALBO
Z-TALBO

スコア525

test CHANGED
File without changes
test CHANGED
@@ -203,3 +203,15 @@
203
203
  ```
204
204
 
205
205
  一行分だけ書きましたが、このような形になっておりました。
206
+
207
+
208
+
209
+ ###解決
210
+
211
+ 今回はコード云々ではなくDB側の設計ミスでした。。。
212
+
213
+ plan_insert側では一行だけですので、plan_idを主キーにしていて問題は無かったのですが、、、当然な話ですね。
214
+
215
+ staff_insert側も同じようにplan_idを主キーにしていたのが原因でした。
216
+
217
+ 別に主キー用のidを追加して、行ってみたら普通にできました。

3

修正

2016/07/09 03:21

投稿

Z-TALBO
Z-TALBO

スコア525

test CHANGED
File without changes
test CHANGED
@@ -64,7 +64,9 @@
64
64
 
65
65
  $staff_insert = staff_insert($id, $staff);
66
66
 
67
- }
67
+ }
68
+
69
+ }
68
70
 
69
71
  $time = $plan['time'];
70
72
 
@@ -72,6 +74,8 @@
72
74
 
73
75
  }
74
76
 
77
+ }
78
+
75
79
  ```
76
80
 
77
81
  いろいろ、書き方が初心者丸出しですが、、、とりあえずこのように書きました。

2

修正

2016/07/09 03:16

投稿

Z-TALBO
Z-TALBO

スコア525

test CHANGED
File without changes
test CHANGED
@@ -52,158 +52,150 @@
52
52
 
53
53
  $name = $plan['name'];
54
54
 
55
- if ($name == "") {
56
-
57
-
58
-
59
- } else {
60
-
61
- $id = $plan['id'];
62
-
63
- for ($i = 0; $i < 3; $i++) {
64
-
65
- $staff = $plan[$i]['staff'];
66
-
67
- if ($staff == "") {
68
-
69
-
70
-
71
- } else {
72
-
73
- $staff_insert = staff_insert($id, $staff);
55
+ if ($name != "") {
56
+
57
+ $id = $plan['id'];
58
+
59
+ for ($i = 0; $i < 3; $i++) {
60
+
61
+ $staff = $plan[$i]['staff'];
62
+
63
+ if ($staff != "") {
64
+
65
+ $staff_insert = staff_insert($id, $staff);
66
+
67
+ }
68
+
69
+ $time = $plan['time'];
70
+
71
+ $plan_insert = plan_insert($id, $name, $time);
72
+
73
+ }
74
+
75
+ ```
76
+
77
+ いろいろ、書き方が初心者丸出しですが、、、とりあえずこのように書きました。
78
+
79
+ ```PHP
80
+
81
+ function staff_insert($id, $staff) {
82
+
83
+ // DB接続
84
+
85
+ $sql = "INSERT INTO plan_staff (plan_id, staff) VALUES (:id, :staff)";
86
+
87
+ $stmt = $dbh->prepare($sql);
88
+
89
+ $stmt->bindParam(':id', $id, PDO::PARAM_INT);
90
+
91
+ $stmt->bindParam(':staff', $staff, PDO::PARAM_STR);
92
+
93
+ $stmt->execute();
94
+
95
+ return $staff_insert;
96
+
97
+ }
98
+
99
+
100
+
101
+ function plan_insert($id, $name, $time) {
102
+
103
+ // 基本的には上のfunctionと同じです。入れるテーブルが違うだけ
104
+
105
+ }
106
+
107
+ ```
108
+
109
+
110
+
111
+ ###質問
112
+
113
+ 上記のようにしたとき、データ自体はDBに入るのですが、、、、
114
+
115
+ plan_insert側は一行ずつ入ればいいので問題はありませんが、、、
116
+
117
+ staff_insert側については、現在スタッフ3名入れたとしても最初の一名分しか登録ができません。
118
+
119
+ 例えば、、、
120
+
121
+ id = 20161
122
+
123
+ staff = A
124
+
125
+ staff = B
126
+
127
+ staff = C
128
+
129
+ name = AAA
130
+
131
+ time = 12:30
132
+
133
+ というデータの場合、
134
+
135
+ plan_insert側は
136
+
137
+ id, name, timeが入ればいいのでOKですが、
138
+
139
+ staff_insert側は
140
+
141
+ 20161 | A
142
+
143
+ 20161 | B
144
+
145
+ 20161 | C
146
+
147
+ というように入ってほしいのですが、
148
+
149
+ 20161 | Aしか入ってきません。
150
+
151
+
152
+
153
+ 登録とかよりechoしてみると、値は表示されてくるのですが、、、、
154
+
155
+
156
+
157
+ この辺り初歩的な部分かと思いますが、アドバイスお願いできますでしょうか?
158
+
159
+
160
+
161
+ ###修正と追記
162
+
163
+ ご指摘ありがとうございます。コードに関してはインデントをしてみました。
164
+
165
+ var_dumpの結果を表示いたします。
166
+
167
+ ```
168
+
169
+ array(8) {
170
+
171
+ [1] => array(6) {
172
+
173
+ ["name"] => string(3)"AAA"
174
+
175
+ ["time"] => string(5)"12:30"
176
+
177
+ [0] => array(1) {
178
+
179
+ ["staff"] => string(1)"A"
180
+
181
+ }
182
+
183
+ [1] => array(1) {
184
+
185
+ ["staff"] => string(1)"B"
186
+
187
+ }
188
+
189
+ [2] => array(1) {
190
+
191
+ ["staff"] => string(1)"C"
192
+
193
+ }
194
+
195
+ ["id"] => string(5)"20161"
74
196
 
75
197
  }
76
198
 
77
- $time = $plan['time'];
78
-
79
- $plan_insert = plan_insert($id, $name, $time);
80
-
81
- }
82
-
83
- ```
84
-
85
- いろいろ、書き方が初心者丸出しですが、、、とりあえずこのように書きました。
86
-
87
- ```PHP
88
-
89
- function staff_insert($id, $staff) {
90
-
91
- // DB接続
92
-
93
- $sql = "INSERT INTO plan_staff (plan_id, staff) VALUES (:id, :staff)";
94
-
95
- $stmt = $dbh->prepare($sql);
96
-
97
- $stmt->bindParam(':id', $id, PDO::PARAM_INT);
98
-
99
- $stmt->bindParam(':staff', $staff, PDO::PARAM_STR);
100
-
101
- $stmt->execute();
102
-
103
- return $staff_insert;
104
-
105
- }
106
-
107
-
108
-
109
- function plan_insert($id, $name, $time) {
110
-
111
- // 基本的には上のfunctionと同じです。入れるテーブルが違うだけ
112
-
113
- }
114
-
115
- ```
116
-
117
-
118
-
119
- ###質問
120
-
121
- 上記のようにしたとき、データ自体はDBに入るのですが、、、、
122
-
123
- plan_insert側は一行ずつ入ればいいので問題はありませんが、、、
124
-
125
- staff_insert側については、現在スタッフ3名入れたとしても最初の一名分しか登録ができません。
126
-
127
- 例えば、、、
128
-
129
- id = 20161
130
-
131
- staff = A
132
-
133
- staff = B
134
-
135
- staff = C
136
-
137
- name = AAA
138
-
139
- time = 12:30
140
-
141
- というデータの場合、
142
-
143
- plan_insert側は
144
-
145
- id, name, timeが入ればいいのでOKですが、
146
-
147
- staff_insert側は
148
-
149
- 20161 | A
150
-
151
- 20161 | B
152
-
153
- 20161 | C
154
-
155
- というように入ってほしいのですが、
156
-
157
- 20161 | Aしか入ってきません。
158
-
159
-
160
-
161
- 登録とかよりechoしてみると、値は表示されてくるのですが、、、、
162
-
163
-
164
-
165
- この辺り初歩的な部分かと思いますが、アドバイスお願いできますでしょうか?
166
-
167
-
168
-
169
- ###修正と追記
170
-
171
- ご指摘ありがとうございます。コードに関してはインデントをしてみました。
172
-
173
- var_dumpの結果を表示いたします。
174
-
175
- ```
176
-
177
- array(8) {
178
-
179
- [1] => array(6) {
180
-
181
- ["name"] => string(3)"AAA"
182
-
183
- ["time"] => string(5)"12:30"
184
-
185
- [0] => array(1) {
186
-
187
- ["staff"] => string(1)"A"
188
-
189
- }
190
-
191
- [1] => array(1) {
192
-
193
- ["staff"] => string(1)"B"
194
-
195
- }
196
-
197
- [2] => array(1) {
198
-
199
- ["staff"] => string(1)"C"
200
-
201
- }
202
-
203
- ["id"] => string(5)"20161"
204
-
205
- }
206
-
207
199
  ```
208
200
 
209
201
  一行分だけ書きましたが、このような形になっておりました。

1

修正

2016/07/09 00:01

投稿

Z-TALBO
Z-TALBO

スコア525

test CHANGED
File without changes
test CHANGED
@@ -16,23 +16,23 @@
16
16
 
17
17
  <form action="" method="POST">
18
18
 
19
- <?php for ($i = 1; $i <= 8; $i++) : ?>
19
+ <?php for ($i = 1; $i <= 8; $i++) : ?>
20
-
20
+
21
- 1.訪問先:<input type="text" name="plan[<?= $i; ?>][name]">
21
+ 1.訪問先:<input type="text" name="plan[<?= $i; ?>][name]">
22
-
22
+
23
- 2.訪問時間:<input type="text" name="plan[<?= $i; ?>][time]">
23
+ 2.訪問時間:<input type="text" name="plan[<?= $i; ?>][time]">
24
-
24
+
25
- <?php for ($j = 0; $j < 3; $j++) : ?>
25
+ <?php for ($j = 0; $j < 3; $j++) : ?>
26
-
26
+
27
- 3.訪問スタッフ<?= $j; ?>:<input type="text" name="plan[<?= $i; ?>][<?= $j; ?>][staff]";
27
+ 3.訪問スタッフ<?= $j; ?>:<input type="text" name="plan[<?= $i; ?>][<?= $j; ?>][staff]";
28
-
28
+
29
- <?php endfor; ?>
29
+ <?php endfor; ?>
30
-
30
+
31
- <input type="hidden" name="plan[<?= $i; ?>][id]" value="2016<?= $i; ?>">
31
+ <input type="hidden" name="plan[<?= $i; ?>][id]" value="2016<?= $i; ?>">
32
-
32
+
33
- <?php endfor; ?>
33
+ <?php endfor; ?>
34
-
34
+
35
- <input type="submit" name="submit">
35
+ <input type="submit" name="submit">
36
36
 
37
37
  </form>
38
38
 
@@ -50,70 +50,70 @@
50
50
 
51
51
  foreach($plans as $plan) {
52
52
 
53
- $name = $plan['name'];
53
+ $name = $plan['name'];
54
-
54
+
55
- if ($name == "") {
55
+ if ($name == "") {
56
-
57
-
58
-
56
+
57
+
58
+
59
- } else {
59
+ } else {
60
-
60
+
61
- $id = $plan['id'];
61
+ $id = $plan['id'];
62
-
62
+
63
- for ($i = 0; $i < 3; $i++) {
63
+ for ($i = 0; $i < 3; $i++) {
64
-
64
+
65
- $staff = $plan[$i]['staff'];
65
+ $staff = $plan[$i]['staff'];
66
-
66
+
67
- if ($staff == "") {
67
+ if ($staff == "") {
68
-
69
-
70
-
68
+
69
+
70
+
71
- } else {
71
+ } else {
72
-
72
+
73
- $staff_insert = staff_insert($id, $staff);
73
+ $staff_insert = staff_insert($id, $staff);
74
+
75
+ }
76
+
77
+ $time = $plan['time'];
78
+
79
+ $plan_insert = plan_insert($id, $name, $time);
80
+
81
+ }
82
+
83
+ ```
84
+
85
+ いろいろ、書き方が初心者丸出しですが、、、とりあえずこのように書きました。
86
+
87
+ ```PHP
88
+
89
+ function staff_insert($id, $staff) {
90
+
91
+ // DB接続
92
+
93
+ $sql = "INSERT INTO plan_staff (plan_id, staff) VALUES (:id, :staff)";
94
+
95
+ $stmt = $dbh->prepare($sql);
96
+
97
+ $stmt->bindParam(':id', $id, PDO::PARAM_INT);
98
+
99
+ $stmt->bindParam(':staff', $staff, PDO::PARAM_STR);
100
+
101
+ $stmt->execute();
102
+
103
+ return $staff_insert;
74
104
 
75
105
  }
76
106
 
77
- $time = $plan['time'];
107
+
78
-
108
+
79
- $plan_insert = plan_insert($id, $name, $time);
109
+ function plan_insert($id, $name, $time) {
110
+
111
+ // 基本的には上のfunctionと同じです。入れるテーブルが違うだけ
80
112
 
81
113
  }
82
114
 
83
115
  ```
84
116
 
85
- いろいろ、書き方が初心者丸出しですが、、、とりあえずこのように書きました。
86
-
87
- ```PHP
88
-
89
- function staff_insert($id, $staff) {
90
-
91
- // DB接続
92
-
93
- $sql = "INSERT INTO plan_staff (plan_id, staff) VALUES (:id, :staff)";
94
-
95
- $stmt = $dbh->prepare($sql);
96
-
97
- $stmt->bindParam(':id', $id, PDO::PARAM_INT);
98
-
99
- $stmt->bindParam(':staff', $staff, PDO::PARAM_STR);
100
-
101
- $stmt->execute();
102
-
103
- return $staff_insert;
104
-
105
- }
106
-
107
-
108
-
109
- function plan_insert($id, $name, $time) {
110
-
111
- // 基本的には上のfunctionと同じです。入れるテーブルが違うだけ
112
-
113
- }
114
-
115
- ```
116
-
117
117
 
118
118
 
119
119
  ###質問
@@ -163,3 +163,47 @@
163
163
 
164
164
 
165
165
  この辺り初歩的な部分かと思いますが、アドバイスお願いできますでしょうか?
166
+
167
+
168
+
169
+ ###修正と追記
170
+
171
+ ご指摘ありがとうございます。コードに関してはインデントをしてみました。
172
+
173
+ var_dumpの結果を表示いたします。
174
+
175
+ ```
176
+
177
+ array(8) {
178
+
179
+ [1] => array(6) {
180
+
181
+ ["name"] => string(3)"AAA"
182
+
183
+ ["time"] => string(5)"12:30"
184
+
185
+ [0] => array(1) {
186
+
187
+ ["staff"] => string(1)"A"
188
+
189
+ }
190
+
191
+ [1] => array(1) {
192
+
193
+ ["staff"] => string(1)"B"
194
+
195
+ }
196
+
197
+ [2] => array(1) {
198
+
199
+ ["staff"] => string(1)"C"
200
+
201
+ }
202
+
203
+ ["id"] => string(5)"20161"
204
+
205
+ }
206
+
207
+ ```
208
+
209
+ 一行分だけ書きましたが、このような形になっておりました。