質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

375閲覧

フォームで画像を登録したところDB上でNULLになってしまう。それを画像が保存されるようにしたい

makiharajin_74

総合スコア17

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2024/05/31 03:23

実現したいこと

画像を追加してDB上に画像を表示させたい。

発生している問題・分からないこと

入力フォームから画像を選択して登録ボタンを押す。
DB上で確認するとNULLになっていて、エラーなどは発生していない。

エラーメッセージ

error

1エラーメッセージは出ていない。

該当のソースコード

php(View)

1<form action="{{ route('curriculum_store') }}" method="POST" enctype="multipart/form-data"> 2 @csrf 3 <div class="form-group"> 4 <label for="thumbnail_image">サムネイル画像:</label> 5 <input type="file" name="thumbnail_image" id="thumbnail_image" accept="image/*"> 6 </div> 7 <br> 8 <label for="grade_id">学年:</label> 9 <select name="grade_id" id="grade_id"> 10 @foreach ($grades as $grade) 11 <option value="{{ $grade->id }}" {{ request('grade_id') == $grade->id ? 'selected' : '' }}> 12 {{ $grade->name }} 13 </option> 14 @endforeach 15 </select> 16 <br> 17 <!-- aaaaaaaaaaaaaaaaaaa --> 18 <label for="title">授業名:</label> 19 <input type="text" id="title" name="title"> 20 <label for="video_url">動画URL:</label> 21 <input type="text" id="video_url" name="video_url"> 22 <label for="description">授業概要:</label> 23 <textarea id="description" name="description" rows="4" cols="50"></textarea> 24 <label for="alway_delivery_flg">常時公開:</label> 25 <input type="checkbox" id="alway_delivery_flg" name="alway_delivery_flg" value="1"> 26 <input type="submit" value="登録"> 27 </form>

php(controller)

1public function CurriculumStore(CurriculumsRequest $request) 2 { 3 $grade = Curriculum::where('grade_id' , $request->input('grade_id'))->first(); 4 $model = new Curriculum(); 5 $model->storeCurriculum($grade , $request); 6 7 return redirect()->route('curriculum_list'); 8 }

php(Model)

1public function storeCurriculum($grade , $request) 2 { 3 //授業データを保存 4 $curriculums = new Curriculum(); 5 $curriculums->title = $request->input('title'); 6 7 //ここにサムネイル画像を入れる 8 // 商品画像を保存 9 if ($request->hasFile('thumbnail_image')) { 10 return back()->with('error', 'ファイルがアップロードされていません'); 11 $imagePath = $request->file('thumbnail_image')->store('images', 'public'); 12 $curriculums->thumbnail = $imagePath; 13 } 14 15 $curriculums->description = $request->input('description'); 16 $curriculums->video_url = $request->input('video_url'); 17 $curriculums->alway_delivery_flg = $request->boolean('alway_delivery_flg'); 18 $curriculums->grade_id = $request->input('grade_id'); 19 20 $curriculums->save(); 21 return $curriculums; 22 }

php(Request)

1public function rules() 2 { 3 return [ 4 'title' =>'required|max:255', 5 'description'=>'max:2000', 6 'thumbnail' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', 7 'image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', 8 ]; 9 } 10 public function messages() 11 { 12 return [ 13 'title.required' => '授業名は必須項目です。', 14 'title.max' => '授業名は255文字以内で入力してください。', 15 'description.max' => '授業概要は2000文字以内で入力してください。', 16 'thumbnail.image' => '商品画像は画像ファイルを選択してください。', 17 'thumbnail.mimes' => '商品画像はjpeg、png、jpg、gif形式の画像ファイルを選択してください。', 18 'thumbnail.max' => '商品画像のサイズは2MB以下にしてください。', 19 ]; 20 }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

チャットGPTで調べた。
保存先は正しいか
送信ができているかの確認のコードを教えてもらい試したが、エラー

補足

イメージ画像がある位置
public\img\ash-edmonds-fsI-_MRsic0-unsplash.jpg


イメージ説明

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sai0001

2024/06/03 00:45

modelの9行目の処理に入っていないと思うのですが、$requestの値をvar_dumpするとどうでしょうか。
makiharajin_74

2024/06/03 01:17 編集

コメントありがとうございます。 下記であっていますか? 9行目 if ($request->hasFile('thumbnail_image')) { 10行目 var_dump('thumbnail_image'); ー>追加
sai0001

2024/06/03 01:18

そこだと処理に入らないと出力されないので、modelの6行目あたりに入れてみてください。
guest

回答2

0

ベストアンサー

アップロードファイルがあったら前の画面に戻って終了、となっています

PHP

1if ($request->hasFile('thumbnail_image')) { 2 return back()->with('error', 'ファイルがアップロードされていません');

データ保存のロジック自体見直したほうがよさそうにも思えます。
未使用の変数などもありますし、Curriculumモデルにcurriculumsテーブルの保存を行うだけであればメソッドを作る必要はないでしょう。

投稿2024/06/04 14:11

Eggpan

総合スコア3190

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makiharajin_74

2024/06/28 01:37

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

0

サムネイル画像は thumbnail_image パラメータで送信して保存、最終的に $curriculums->thumbnail に保存先のパスを登録する設計になっているかと思います。

ですが、 php(Request) ファイルの6行目、リクエスト時のパラメータのバリデーションの名前が違うので、こちらが原因かもしれません。

'thumbnail' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',

thumbnail_image に変更することで解決できるかと思います。

投稿2024/06/02 04:36

ytsuyuzaki

総合スコア48

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makiharajin_74

2024/06/03 00:39

回答ありがとうございます。試してみましたが解決できませんでした。 また、エラーなども出ない状態です。 'thumbnail_image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', この場合どの辺りに原因がありそうでしょうか?
ytsuyuzaki

2024/06/03 01:45

それであれば ``` $request->hasFile() ``` での返却値がどのようになっているか、画像送信時にどの行で何が起こっているのかを一つずつ確認するのが近道です。 PHPのデバッガや `dd()` によってコントローラーに届いたデータ内容を確認したり、関数の返却値を確認してみてください。 画像以外の登録は上手く行っているようなので、ともすれば画像の有無を見ているif文から処理内容を確認する必要があります。 ちなみに、 `$request->hasFile()` 関数は php.ini の upload_max_filesize で設定されている値 (デフォルトでは2M )を超えるファイルサイズだと false を返却されてしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問