画像関連

【PHP・MySQL】データベースに画像を保存・表示する方法 第7回「ファイルサイズのチェック」

Sara

 
ここまでの記事はこちら

サイズが大きすぎる画像を保存できてしまうと、サーバーに負担がかかってしまいます。

前回の形式チェックと同じように画像ファイルのサイズチェックも入れておきましょう。

ファイルのサイズチェックを入れる方法

第6回「形式チェック」が完了している状態から始めます。

今回は 1MB までのファイルでチェックを入れてみましょう。

前回形式チェックを入れた箇所にコードを追加します。(10~14行目)

10行目

$maxFileSize = 1048576;

$_FILES[‘image’][‘size’]; で取得した画像サイズの単位は Byte(バイト)です。

1 MB = 1024 KB = 1048576 Byte

なので $maxFileSize = 1048576; としています。 

12行目

if ($size > $maxFileSize || !in_array($type, $validFileTypes)) {

形式チェックと一緒にサイズの判定も入れています。

「画像サイズが $maxFileSize を超えている」または「形式が $validFileTypes に含まれていない」場合にエラーメッセージを表示します。

コードの修正

エラーメッセージを表示すると、左側に表示されるはずの登録済み画像が消えてしまいます。

登録済みの画像が常に表示されるようにコードを修正します。(1~13行目)

完成

以下のように動いていれば完成です。

ここまでのコード

Q
list.php
PHP・MySQL
カレンダー開発講座

カレンダーを開発しながら

  • MySQLにデータを保存・編集・削除・検索する方法
  • タブレット・スマートフォンに対応させる方法
  • Datetimepicker の使い方
  • CSV ファイルを使った祝日の表示

など幅広く学ぶことができる講座です。

何か開発してみたい方、より実用的なコードを学びたい方にオススメです。

guest
9 Comments
古い順
新しい順 人気順
Inline Feedbacks
View all comments
相澤賢宏
相澤賢宏
3 days ago

この度はいつもブログ拝見させてもらい大変わかりやすく勉強させて頂いております。
ひとつ質問があるのですが、画像を表示するときフォルダに保存したファイル名でさなく任意でタイトルみたいな感じで表示って可能でしょうか?
初心者でなかなか難しくご助力があればありがたいのですが、
よろしくお願いいたします。

やってみたことといえば、スーパーグローバル変数にPOSTでechoをかけてみたりやってみてますが、画像と一緒にあげると表示されなかったりでイマイチでした。すいません。

相澤賢宏
相澤賢宏
2 days ago
Reply to  Sara

返信本当にありがとうございます。
今、PHPやphpadmin(MySQL)を使って写真投稿サイトを作成しているとこなのですが、「画像名」、「画像」を入力し、画像を投稿したいと思っていまして。
大変、恐縮なのですがイメージ図を添付しても大丈夫でしょうか?
大丈夫でしたら添付いたします。
Saraさんのコードが一番わかりやすく参考にしたいと思いコメントさせていただきました。

また「スーパーグローバル変数にPOSTでecho」という部分についても、もう少し詳しくというとなのですが、
<p>画像名 :<input type="text" name="image_name" value=""></p>
<p>画像 :<input type="file" name="image" accept=".jpg,.jpeg,.png"></p>
みたいな感じで、
<img src="image.php?id=<?= $images[$i]['image_id']; ?>" width="250" height="200">→ちょっと画像サイズを変えていますが、すいません。
for文?の中に$_POST['image_name'];を入れてみたり、等々調べながらやってみてはいるんですが
<strong>Warning</strong>: Undefined array key "" in&nbsp;<strong>C:\xampp\htdocs\ImageTest\list.php</strong>
このようになってしまったり表示が不安定だったりします。
長くなり説明がうまくできているかわかりませんが申し訳ありません。

相澤賢宏
相澤賢宏
2 days ago
Reply to  Sara

迅速な対応ありがとうございます。
やはり、エラーがでしまいました。
無事、画像見れますでしょうか?レイアウト自体は気にしなくて大丈夫なのですが
だされている要件が、
・「画像名」「画像」を入力し、画像を投稿することができる。
・投稿された画像の「画像名」「画像」を一覧で表示する。
・一覧から指定した画像の公開フラグを「公開」「非公開」に変更することができる。
・画像の投稿もしくは指定した画像の公開フラグが正常に更新された場合、完了のメッセージを表示する。
・画像投稿ボタンクリック時、「画像名」「画像」が設定されていない場合、エラーメッセージを表示し、画像投稿されない。
・投稿できる画像の形式は「JPEG」「PNG」のみとする。「JPEG」「PNG」以外の場合、エラーメッセージを表示し、画像投稿されない。
・「画像名」は半角英数字のみとする。半角英数字以外の場合、エラーメッセージを表示し、画像投稿されない。
・非表示の場合、背景色を変更し、表示・非表示の状態が見てわかるようにする。
・画像一覧ページへ遷移する事ができる。
ちょっと詳しく書いたので誤解を避けたいので、とある課題で案件ではないのです。

MySQLへのデータベースはSaraさんの紹介しているブログ通りのデータベースで作成しています。

相澤賢宏
相澤賢宏
2 days ago
Reply to  Sara

追記で申し訳ありません

<?php for($i = 0; $i < count($images); $i++): ?>
<img src="image.php?id=<?= $images[$i]['image_id']; ?>" width="250" height="200">
<div class="media-body">
<a href="javascript:void(0);" onclick="var ok = confirm('削除しますか?'); if (ok) location.href='delete.php?id=<?= $images[$i]['image_id']; ?>'"><i class="far fa-trash-alt"></i> 削除</a>
<?php $images[$i]; ?><?PHP echo $_POST['image_name'];?>
<button id="btn1">表示</button>
</div>
<?php endfor; ?>
という風に記述すると、一度
<strong>Warning</strong>: Undefined array key"image_name"in&nbsp;<strong>C:\xampp\htdocs\ImageTest\list.php</strong>
とエラーが出て確認の為<input>に適当に英字を書いてページをリロードしなおすと、反映はするんですがブラウザ上に表示されている画像すべてにタイトルがついてしまう感じです。

相澤賢宏
相澤賢宏
2 days ago
Reply to  Sara

無事できました表示することができました。
ご助力ほんとに感謝いたします。
PHPによる正規表現の方は、たぶん大丈夫だと思うんですが
また躓いたときSaraさんのブログ内容に沿った内容だった場合
ご相談してもよろしいでしょうか?
この度は誠にありがとうございました。

ABOUT ME
Sara
Sara
運営者
書籍やオンライン講座でプログラミングを勉強してフリーランスのプログラマーになりました。
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
本格的に学びたい方へ

Code for Fun プログラミング講座

Code for Fun プログラミング講座では、プログラミングの基礎からアプリ開発まで学ぶことができます。

わかりやすく・シンプルをモットーに

  • 同じコードを書けば必ず完成できること
  • 専門用語を使いすぎないこと

を重視しています。

POINT 01

動くコード

プログラミングの文法だけを学んでも、そこから動くアプリを開発をするのは難しいです。

Code for Fun のプログラミング講座では、ゲームやカレンダーなど「アプリとして機能するもの」を作りながらプログラミングを学ぶことができます。

POINT 02

自分のペースで

オンライン講座なので、ご自身のペースで学習を進めて頂けます。

分からないことがあっても、前のレッスンに戻ることができるので安心です。

お申し込みしたその日からからすぐに始めることができます。

POINT 03

個別サポート

プログラミング学習では、エラーが起きることはよくあります。そんな時はお気軽にお問い合わせください!

コメント欄またはメールによるサポートを回数無制限でご利用頂けます。(*講座に関連するご質問のみ対応)

今すぐ無料でお試し

9
0
この記事にコメントするx
記事URLをコピーしました