前提条件:PHP 7.1.29
①更新処理を書く前に...
1. 送信されてきたファイルを判定
if (!empty($_FILES['image']['name']) && !(exif_imagetype($_FILES['image']['tmp_name']))) {
省略
//送信されてきたファイルが画像ファイルかどうかの判定
2. 画像ファイル及び一言コメントの存在確認
} elseif (empty($_FILES['image']['name']) && empty($_POST['quick_comment'])) {
省略
//画像ファイルおよび一言コメントの存在確認
##②更新処理を書く
} else {
$sql2 = 'UPDATE users SET image_name = :image_name, quick_comment = :quick_comment WHERE id = :id';
$stmt2 = $dbh->prepare($sql2);
//プロフィール画像バリデーション
if (empty($_FILES['image']['name'])) {
$image_name = $result['image_name'];
} else {
$image_type = exif_imagetype($_FILES['image']['tmp_name']);
switch ($image_type) { //拡張子取得
case IMAGETYPE_GIF:
$type = '.gif';
break;
case IMAGETYPE_JPEG:
$type = '.jpg';
break;
case IMAGETYPE_PNG:
$type = '.png';
break;
}
$dir = './images/';
if (!empty($result['image_name'])) {//ディレクトリ内の画像削除
unlink($dir . $result['image_name']);
}
$image = uniqid(mt_rand(), true);
move_uploaded_file($_FILES['image']['tmp_name'], './images/' . $image . $type);//ファイルアップロード
$image_name = $image . $type;
}
//一言コメントバリデーション
if (empty($_POST['quick_comment'])) {
$quick_comment = $result['quick_comment'];
} else {
$quick_comment = $_POST['quick_comment'];
}
$stmt2->bindValue('image_name', $image_name);
$stmt2->bindValue('quick_comment', $quick_comment);
$stmt2->bindValue(':id', $_GET['user_id']);
$stmt2->execute();
$message = 'アップロードが完了しました。';
}
③今回の処理を実装する時に工夫したこと
一つのファイル内で画像と一言コメントの更新処理をしようとした時に
ユーザー側からpostされるものとして考えられるパターンが3つ
ある。
1.画像のみ更新
2.一言コメントのみ更新
3.両方更新
この3つのパターンそれぞれにSQL文を書いて更新処理を走らせるとコード量が増え
、可読性が落ちる
うえに何度もSQLを実行することになるため負担が大きくなる
。
それを防ぐために更新処理を走らせるコードを1つにまとめた方がコード量が減り
、可読性も上がる
。
そのためのバリデーションを模索した結果、上記のようなコードとなった。
※初投稿でまだ慣れていない部分もありますが、温かい気持ちで見ていただけますと幸いです☺️