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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

556閲覧

LaravelでCRUDの更新機能。バリデーションが成功しません。

rude_rockers

総合スコア32

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/01/08 07:38

編集2019/01/08 08:33

LaravelでCRUDの練習中です。

画像をpublic配下のimagesフォルダに保存しつつ、ファイルネームをデータベースに保存する感じで作りました。

新規投稿の方はうまくいったのに、更新がうまくいきません。

「dd();」で見てみるとバリデーションが通っていません。

新規投稿と同じ画像を使ってもダメなのですが、原因がわかりません。

よろしくお願いします。

環境
さくらレンタルサーバー
laravel5.7
apache
php7.2
mysql5.7

成功するstoreメソッド

PostsContlroller.php

1class PostsController extends Controller 2{ 3... 4public function store(Request $request) 5 { 6 $request->validate([ 7 'title' => 'required|max:50', 8 'body' => 'required|max:2000', 9 'image'=>'image|mimes:jpg,jpeg,png|max:5000', 10 ]); 11 12 $file = null; 13 $fileName = ''; 14 15 if($request->file('image') != null){ 16 17 $file=$request->file('image'); 18 $fileName=str_random(20).'.'.$file->getClientOriginalExtension(); 19 Image::make($file)->save(public_path('images/'.$fileName)); 20 } 21 22 $post=new Post; 23 $post->title=$request->title; 24 $post->body=$request->body; 25 $post->image=$fileName; 26 unset($post['_token']); 27 $post->save(); 28 29 return redirect()->route('top'); 30 } 31...

失敗するupdateメソッド

PostsContlroller.php

1 public function update($post_id, Request $request) 2 { 3 // dd($request); 4 // バリデート 5 $request->validate([ 6 'title' => 'required|max:50', 7 'body' => 'required|max:2000', 8 'image'=>'image|mimes:jpg,jpeg,png|max:5000', 9 ]); 10 11 dd($request); 12 13 $post = Post::findOrFail($post_id); 14 15 $oldImage = $post->image; 16 17 // dd($oldImage); 18 // \Debugbar::info($oldImage); 19 20 $file = null; 21 $fileName = ''; 22 23 if($request->file('image') != null){ 24 25 $file=$request->file('image'); 26 $fileName=str_random(20).'.'.$file->getClientOriginalExtension(); 27 Image::make($file)->save(public_path('images/'.$fileName)); 28 } 29 30 $post->title=$request->title; 31 $post->body=$request->body; 32 $post->image=$fileName; 33 unset($post['_token']); 34 $post->save(); 35 36 \File::delete(public_path('images/'.$oldImage)); 37 38 return redirect()->route('posts.show', ['post' => $post]); 39 }

なぜ同じバリデーションなのに通過できないのでしょうか?

追記
route/web.php

route/web.php

1<?php 2 3/* 4|-------------------------------------------------------------------------- 5| Web Routes 6|-------------------------------------------------------------------------- 7| 8| Here is where you can register web routes for your application. These 9| routes are loaded by the RouteServiceProvider within a group which 10| contains the "web" middleware group. Now create something great! 11| 12*/ 13Route::get('/', 'PostsController@index')->name('top'); 14Route::resource('comments', 'CommentsController', ['only' => ['store']]); 15Route::resource('posts', 'PostsController', ['only' => ['create', 'store', 'show', 'edit', 'update', 'destroy']]); 16

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

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

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

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

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

kazto

2019/01/08 08:22

route/web.php の内容はどうなっていますか?追記をお願いします。
rude_rockers

2019/01/08 08:34

ありがとうございます。 追記致しました。
guest

回答1

0

ベストアンサー

「dd();」で見てみるとバリデーションが通っていません。

Laravel5.5 バリデーションの「バリデーションエラー表示」を見て、具体的になぜvalidationが通っていないのか確認するとよいと思います。

投稿2019/01/08 10:10

takg

総合スコア125

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

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

rude_rockers

2019/01/08 20:42

ありがとうございます。 エラーの見方がわかりました。 titleとbodyのバリデーションは通るのですが、やはり、バリデーションにひっかからない画像データをアップロードしても、エラーが出ます。 echo $errors; で画面上部にエラーをだしてみました。 タイトルもボディも画像も問題のないモノをアップロードしても、 「{"image":["The image must be an image.","The image must be a file of type: jpg, jpeg, png."]}」 と出ます。 ちゃんと画像であり、5000以下であり、jpgなのですが。。。
rude_rockers

2019/01/08 20:46

バリデーションをとったら、通過できましたが、画像ファイルが保存されていませんでした。 ということはinputがおかしいかもですね。
rude_rockers

2019/01/08 20:49

大変申し訳ありません。 enctype="multipart/form-data" が抜けておりました!!!!!! これもひとえにエラーの見方がわかったから気づきました。 ありがとうございます。
takg

2019/01/09 06:58

無事解決できたようで、よかったです^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問