質問編集履歴

1

情報の追加・修正

2020/07/06 01:56

投稿

toyop
toyop

スコア30

test CHANGED
File without changes
test CHANGED
@@ -198,7 +198,17 @@
198
198
 
199
199
  以下のコードでデータを受け取ろうとしたのですが、
200
200
 
201
+ > Notice: getimagesize(): read of 8192 bytes failed with errno=21 Is a directory in /Applications/MAMP/htdocs/myproject/write.php on line 18
202
+
203
+
204
+
205
+ > Notice: getimagesize(): Read error! in /Applications/MAMP/htdocs/myproject/write.php on line 18
206
+
207
+
208
+
201
- > Notice: Trying to access array offset on value of type bool in /Applications/MAMP/htdocs/xxx/write.php on line 20
209
+ > Notice: Trying to access array offset on value of type bool in /Applications/MAMP/htdocs/myproject/write.php on line 20
210
+
211
+ pは画像ファイル(JPEG/PNG) ではありません。
202
212
 
203
213
 
204
214
 
@@ -206,6 +216,14 @@
206
216
 
207
217
  ```php
208
218
 
219
+ <?php
220
+
221
+
222
+
223
+ $array_count = count($_POST['text']);
224
+
225
+
226
+
209
227
  //データの受け取り
210
228
 
211
229
  for($i=0; $i<$array_count; $i++)
@@ -216,6 +234,16 @@
216
234
 
217
235
  }
218
236
 
237
+
238
+
239
+ // MIDDLE_WIDTHの定義
240
+
241
+ define('MIDDLE_WIDTH', 300);
242
+
243
+
244
+
245
+
246
+
219
247
  // データの拡張子をチェック
220
248
 
221
249
  for($i=0; $i<$array_count; $i++)
@@ -226,6 +254,246 @@
226
254
 
227
255
 
228
256
 
257
+ switch($imagesize[$i]['mime']){
258
+
259
+ case 'image/jpeg':
260
+
261
+ $ext[$i] = '.jpg';
262
+
263
+ break;
264
+
265
+ case 'image/png':
266
+
267
+ $ext[$i] = '.png';
268
+
269
+ break;
270
+
271
+ default:
272
+
273
+ echo $_FILES['image']['name'][$i]."は画像ファイル(JPEG/PNG) ではありません。<br>";
274
+
275
+ $ext[$i] = 0;
276
+
277
+ }
278
+
279
+ // ファイル形式が異なる場合処理を止める
280
+
281
+ if ($ext[$i] === 0) {
282
+
283
+ exit;
284
+
285
+ }
286
+
287
+ }
288
+
289
+
290
+
291
+ // テキストが入力されていない場合処理を止める
292
+
293
+ for($i=0; $i<$array_count; $i++)
294
+
295
+ {
296
+
297
+ if($_POST['text'][$i] == ''){
298
+
299
+ echo $_POST['text'][$i]."に料理名が入力されていません。<br>";
300
+
301
+ exit;
302
+
303
+ }
304
+
305
+ }
306
+
307
+ // アップロード処理
308
+
309
+ for($i=0; $i<$array_count; $i++)
310
+
311
+ {
312
+
313
+ $imageFileName[$i] = sha1(time().mt_rand()) . $ext[$i];
314
+
315
+ if(isset($_FILES['image'][$i], $_POST['text'][$i]) && is_uploaded_file($_FILES['image']['tmp_name'])){
316
+
317
+ if (!move_uploaded_file($_FILES['image']['tmp_name'][$i], 'album/' . $imageFileName[$i])){
318
+
319
+ echo 'アップロードできませんでした。';
320
+
321
+ }
322
+
323
+ }
324
+
325
+ }
326
+
327
+
328
+
329
+ $width = $imagesize[$i][0];
330
+
331
+ $height = $imagesize[$i][1];
332
+
333
+ $imageFilePath[$i] = 'album/'. $imageFileName[$i];
334
+
335
+
336
+
337
+ for($i=0; $i<$array_count; $i++)
338
+
339
+ {
340
+
341
+ // MIDDLE画像を作成、保存
342
+
343
+ if ($width > MIDDLE_WIDTH) {
344
+
345
+ // 元ファイルを画像タイプによって作る
346
+
347
+ switch($imagesize[$i]['mime']){
348
+
349
+ case 'image/gif':
350
+
351
+ $srcImage = imagecreatefromgif($imageFilePath);
352
+
353
+ break;
354
+
355
+ case 'image/jpeg':
356
+
357
+ $srcImage = imagecreatefromjpeg($imageFilePath);
358
+
359
+ break;
360
+
361
+ case 'image/png':
362
+
363
+ $srcImage = imagecreatefrompng($imageFilePath);
364
+
365
+ break;
366
+
367
+ }
368
+
369
+ }
370
+
371
+ }
372
+
373
+ // 新しいサイズを作る
374
+
375
+ $middleHeight[$i] = round($height * MIDDLE_WIDTH / $width);
376
+
377
+
378
+
379
+ // MIDDLE画像を生成
380
+
381
+ $middleImage[$i] = imagecreatetruecolor(MIDDLE_WIDTH, $middleHeight[$i]);
382
+
383
+ imagecopyresampled($middleImage[$i], $srcImage[$i], 0, 0, 0, 0, 300, $middleHeight[$i], $width, $height);
384
+
385
+
386
+
387
+ // MIDDLE画像を保存する
388
+
389
+ for($i=0; $i<$array_count; $i++)
390
+
391
+ {
392
+
393
+ switch($imagesize[$i]['mime']){
394
+
395
+ case 'image/gif':
396
+
397
+ imagegif($middleImage[$i], 'album/'.'m'.$imageFileName[$i]); //fullサイズリネイム
398
+
399
+ break;
400
+
401
+ case 'image/jpeg':
402
+
403
+ imagejpeg($middleImage[$i], 'album/'.'m'.$imageFileName[$i]);
404
+
405
+ break;
406
+
407
+ case 'image/png':
408
+
409
+ imagepng($middleImage[$i], 'album/'.'m'.$imageFileName[$i]);
410
+
411
+ break;
412
+
413
+ }
414
+
415
+ }
416
+
417
+
418
+
419
+ $MiddleimageFilePath[$i] = 'album/'.'m'.$imageFileName[$i];
420
+
421
+
422
+
423
+ for($i=0; $i<$array_count; $i++)
424
+
425
+ {
426
+
427
+ // オリジナル画像の消去
428
+
429
+ if(file_exists($MiddleimageFilePath[$i])){
430
+
431
+ unlink($imageFilePath[$i]);
432
+
433
+ }
434
+
435
+ }
436
+
437
+
438
+
439
+ // データベースに接続
440
+
441
+ $user = 'kenta';
442
+
443
+ $pass = 'password'; // userに設定したパスワード
444
+
445
+
446
+
447
+ try {
448
+
449
+ for($i=0; $i<$array_count; $i++)
450
+
451
+ {
452
+
453
+ $dbh = new PDO('mysql:host=localhost;dbname=myproject;charset=utf8', $user, $pass);
454
+
455
+ $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
456
+
457
+ $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
458
+
459
+ // プリペアドステートメントを作成
460
+
461
+ $sql = "INSERT INTO menu (text, image) VALUES (:text, :image)";
462
+
463
+ $stmt = $dbh->prepare($sql);
464
+
465
+ // パラメータを割り当て
466
+
467
+ $stmt->bindParam(':text', $text[$i], PDO::PARAM_STR);
468
+
469
+ $stmt->bindParam(':image', $MiddleimageFilePath[$i], PDO::PARAM_STR);
470
+
471
+ // クエリの実行
472
+
473
+ $stmt->execute();
474
+
475
+ // view.phpに移動
476
+
477
+ echo "レシピの登録が完了しました。";
478
+
479
+ exit();
480
+
481
+ }
482
+
483
+ } catch(PDOException $e) {
484
+
485
+ echo "エラー発生: " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "<br>";
486
+
487
+ die();
488
+
489
+ }
490
+
491
+
492
+
493
+ ?>
494
+
495
+
496
+
229
497
  ```
230
498
 
231
499
  JavaScriptは配列で送信していないからphpではそのままでは受け取れないなどの記述を見つけたのですが、いまいちわかりませんでした。