質問編集履歴

2

追記

2016/07/11 04:17

投稿

earnest_gay
earnest_gay

スコア615

test CHANGED
File without changes
test CHANGED
@@ -101,3 +101,217 @@
101
101
 
102
102
 
103
103
  ![イメージ説明](a721d78eb0fb612705f4438b1c785f17.jpeg)
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+ ---
112
+
113
+ ソースはこうなっております。
114
+
115
+ 全部載せると量が多いので必要なところだけを載せています。
116
+
117
+ ```ここに言語を入力
118
+
119
+ <?php
120
+
121
+ $dsn = 'mysql:dbname=test;host=localhost;charset=utf8';
122
+
123
+ $user = 'root';
124
+
125
+ $password = '';
126
+
127
+ $option = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
128
+
129
+ $pdo = new PDO($dsn, $user, $password, $option);
130
+
131
+
132
+
133
+ $sql = "SELECT * FROM user_vitae WHERE user_id=? ORDER BY id ASC";
134
+
135
+ $stmt = $pdo->prepare($sql);
136
+
137
+ $stmt->execute([$_SESSION['id']]);
138
+
139
+ ?>
140
+
141
+
142
+
143
+ <form action="" method="post">
144
+
145
+
146
+
147
+
148
+
149
+ <?php foreach ($stmt as $test) { ?>
150
+
151
+ <table border="">
152
+
153
+ <tbody>
154
+
155
+ <tr>
156
+
157
+ <td>案件名</td>
158
+
159
+ <td>
160
+
161
+ <input type="text" name="projectTitle[]" maxlength="30" size="" placeholder="" value="<?php echo $test['projectTitle'] ?>">
162
+
163
+ </td>
164
+
165
+ </tr>
166
+
167
+ <tr>
168
+
169
+ <td>案件内容</td>
170
+
171
+ <td>
172
+
173
+ <textarea name="projectsContents[]" rows="2" cols="21">
174
+
175
+ <?php echo $test['projectsContents'] ?>
176
+
177
+ </textarea>
178
+
179
+ </td>
180
+
181
+ </tr>
182
+
183
+ </tbody>
184
+
185
+ </table>
186
+
187
+ <br />
188
+
189
+ <br />
190
+
191
+ <?php } ?>
192
+
193
+
194
+
195
+
196
+
197
+ <table id="vitae" class="vitae" border="">
198
+
199
+ <tbody>
200
+
201
+ <tr>
202
+
203
+ <td>案件名</td>
204
+
205
+ <td>
206
+
207
+ <input type="text" name="projectTitle[]" maxlength="30" size="" placeholder="" >
208
+
209
+ </td>
210
+
211
+ </tr>
212
+
213
+ <tr>
214
+
215
+ <td>案件内容</td>
216
+
217
+ <td>
218
+
219
+ <textarea name="projectsContents[]" rows="2" cols="21">
220
+
221
+ </textarea>
222
+
223
+ </td>
224
+
225
+ </tr>
226
+
227
+ </tbody>
228
+
229
+ </table>
230
+
231
+ <div id="vitaeAdd">
232
+
233
+ <input type="button" value="業務経歴を追加する" onClick="vitaeAdd()">
234
+
235
+ <input type="button" value="業務経歴を削除する" onClick="vitaeDel()" id="vitae_btnDel" disabled="true">
236
+
237
+ </div>
238
+
239
+ <br />
240
+
241
+ <input type="submit" name="submit" value="登録する">
242
+
243
+ </form>
244
+
245
+ ```
246
+
247
+ ↓登録&更新用の処理です。
248
+
249
+ ```ここに言語を入力
250
+
251
+ $sql = "INSERT INTO user_vitae(
252
+
253
+ user_id,
254
+
255
+ projectTitle,
256
+
257
+ projectsContents
258
+
259
+ ) VALUES (?, ?, ?)
260
+
261
+ ON DUPLICATE KEY UPDATE
262
+
263
+ projectTitle = ?,
264
+
265
+ projectsContents = ?
266
+
267
+ ";
268
+
269
+
270
+
271
+ for($i=0;$i<count($_POST['projectTitle']);$i++) {
272
+
273
+ $stmt = $this->pdo->prepare($sql);
274
+
275
+ $stmt->execute([
276
+
277
+ $_SESSION['id'],
278
+
279
+ $_POST['projectTitle'][$i],
280
+
281
+ $_POST['projectsContents'][$i],
282
+
283
+ $_POST['projectTitle'][$i],
284
+
285
+ $_POST['projectsContents'][$i]
286
+
287
+ ]);
288
+
289
+ }
290
+
291
+ ```
292
+
293
+
294
+
295
+ ↓現在の表示
296
+
297
+ ![イメージ説明](404039a51373df0c31567b303c7c539f.jpeg)
298
+
299
+
300
+
301
+ > 困っているところ
302
+
303
+
304
+
305
+ ・ON DUPLICATE KEY UPDATEで案件名や案件内容をUNIQUEキーにしたら2つとも変更した場合、新規追加扱いになる
306
+
307
+
308
+
309
+ ・ON DUPLICATE KEY UPDATEでuser_idをUNIQUEキーにしたら1件のレコードしか追加できなくなる
310
+
311
+
312
+
313
+ > 感じているところ
314
+
315
+
316
+
317
+ ・案件名や案件内容をUNIQUEキーにしたら2つとも変更した場合、新規追加扱いになるのを防ぐために、idをUNIQUEにして、ON DUPLICATE KEY UPDATEに組み込んだらこの質問は解決されると思うが、そのSQLの組み方が分からない。

1

具体化

2016/07/11 04:17

投稿

earnest_gay
earnest_gay

スコア615

test CHANGED
File without changes
test CHANGED
@@ -64,6 +64,28 @@
64
64
 
65
65
 
66
66
 
67
+
68
+
69
+ ![イメージ説明](73d91cb3845e50fb2c98c547b5309984.jpeg)
70
+
71
+
72
+
73
+ 案件名をUNIQUEにしているので、例えば
74
+
75
+ 「test1」登録しておいて、
76
+
77
+ 案件名を「test2」に変えたいなぁ~ってなったら、
78
+
79
+ 更新ではなく新規登録になってしまいます。
80
+
81
+
82
+
83
+
84
+
85
+ これはどう防げばよいのでしょうか?
86
+
87
+
88
+
67
89
  入力(変更)を必要としないカラムは
68
90
 
69
91
  ・id