3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHPで画像と一言コメントの更新

Posted at
前提条件: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つにまとめた方がコード量が減り可読性も上がる
そのためのバリデーションを模索した結果、上記のようなコードとなった。

※初投稿でまだ慣れていない部分もありますが、温かい気持ちで見ていただけますと幸いです☺️

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?