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

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

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

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

Laravel

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

Q&A

解決済

1回答

785閲覧

Updateがうまく機能しない

kuwabaraakinori

総合スコア10

MySQL

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

Laravel

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

0グッド

0クリップ

投稿2020/07/25 05:49

編集2020/07/25 05:59

前提・実現したいこと

Laravel6.0で旅行投稿サイトを制作しています。
編集画面から情報を更新しようとしてもうまく、更新が出来ておらず、またvalidationも機能していない状況です。その際、edit.blade.phpから編集したら一度確認画面(contentconfirm.blade.php)に飛ぶようにしているのですが、show.blade.phpに飛んでしまいます。
まずはどのようにして、問題を解決していくべきでしょうか?
ご教授いただけますと幸いです。

該当のソースコード

Content.Controller

1public function edit($id) 2 { 3 $content = Content::findOrFail($id); 4 return view('content.edit',[ 5 'message' => '編集フォーム', 6 'content' => $content 7 ]); 8 } 9 10 11 public function update(ContentRequest $request) 12 { 13 14 if($request->validated()){ 15 $content = Content::find($request->id); 16 17 $filename = $request->file('picture')->store('public/picture'); 18 $content->picture = basename($filename); 19 20 $content->user_id = $request->user_id; 21 $content->content = $request->content; 22 $content->title = $request->title; 23 $content->span = $request->span; 24 $content->continent = $request->continent; 25 $content->country = $request-> country; 26 $content->costs = $request->costs; 27 28 $content->save(); 29 30 } 31 32 return view('content.editconfirm' , [ 33 'content'=>$content, 34 'message'=>'確認画面' 35 ]); 36 37 }

editbladephp

1@extends('layouts.app') 2@section('content') 3<div class="card"> 4 <div class="card-title" style="text-center"> 5 <h2 style="font-family:serif; background-color:#E6E6E6; text-shadow:2px 2px 1px #B4B4B4 ;">{{$message}}</h2> 6 </div> 7 @if ($errors->any()) 8 <div class="alert alert-danger"> 9 <ul> 10 @foreach ($errors->all() as $error) 11 <li>{{ $error}}</li> 12 @endforeach 13 </ul> 14 </div> 15 @endif 16 <div class="card-body"> 17 <form action="{{ route("content.update" , $content->id ) }}" method="put" enctype="multipart/form-data"> 18 @csrf 19 {{ method_field('patch') }} 20 <div class="form-group"> 21 <label for="exampleFormControlInput1">タイトル</label> 22 <input type="text" class="form-control" id="exampleFormControlInput1" placeholder="input your title" name="title" value='{{old('title' , $content->title )}}'> 23 </div> 24 <div class="form-group"> 25 <label for="exampleFormControlSelect1">大陸名</label> 26 <select class="form-control" id="exampleFormControlSelect1" name="continent" value='{{old('continent' , $content->continent)}}'> 27 <option>アジア</option> 28 <option>北アメリカ</option> 29 <option>中南米</option> 30 <option>ヨーロッパ</option> 31 <option>アフリカ</option> 32 <option>オセアニア</option> 33 </select> 34 </div> 35 <div class="form-group"> 36 <label for="exampleFormControlInput1">国名</label> 37 <input type="text" class="form-control" id="exampleFormControlInput1" placeholder="日本" name="country" value='{{old('country' , $content->country)}}'> 38 </div> 39 <div class="form-group"> 40 <label for="exampleFormControlSelect1">滞在期間</label> 41 <select class="form-control" id="exampleFormControlSelect1" name="span" placeholder="滞在期間を選択" value='{{old('span' , $content->span)}}'> 42 <option value=''>選択してください</option> 43 <option>1</option> 44 <option>2</option> 45 <option>3</option> 46 <option>4</option> 47 <option>5</option> 48 <option>6</option> 49 <option>7</option> 50 <option>8</option> 51 <option>9</option> 52 <option>10</option> 53 <option>11</option> 54  <option>12</option> 55  <option>13</option> 56  <option>14</option> 57  <option>15</option> 58  <option>16</option> 59  <option>17</option> 60 </select> 61 </div> 62 <div class="form-group"> 63 <label for="exampleFormControlSelect1">費用</label> 64 <select class="form-control" id="exampleFormControlSelect1" name="costs" placeholder="金額を選択" value='{{old('costs' , $content->costs)}}'> 65 <option value=''>選択してください</option> 66 <option>10000</option> 67 <option>30000</option> 68 <option>50000</option> 69 <option>70000</option> 70 <option>100000</option> 71 <option>150000</option> 72 <option>200000</option> 73 <option>250000</option> 74 <option>300000</option> 75 </select> 76 </div> 77 <div class="form-group"> 78 <label for="exampleFormControlFile1">写真</label> 79 <input type="file" class="form-control-file" id="exampleFormControlFile1" name="picture" value='{{old('picture' , $content->picture)}}'> 80 </div> 81 <div class="form-group"> 82 <label for="exampleFormControlTextarea1">コンテンツ</label> 83 <textarea class="form-control" id="exampleFormControlTextarea1" rows="5" name="content" >{{old('content' , $content->content)}}</textarea> 84 </div> 85 <input type="hidden" name="user_id" value="{{Auth::id()}}"> 86 <button type="submit" class="btn btn-success btn-lg btn-block">更新</button> 87 {{ link_to_route('index' , '戻る' , null , ['class'=>'btn btn-info btn-lg btn-block']) }} 88 </form> 89 </div> 90</div> 91@endsection

contentconfirmbladephp

1@extends('layouts.app') 2@section('content') 3<div class="row"> 4 <div class="card-title"><h2>{{ $message }}</h2></div> 5 <div class="card col-md-10" style="width: 40rem;"> 6  <img src="{{asset('storage/picture/'. $content->picture) }}" class="rounded float-left" width="100%" height="200"> 7  <div class="card-body"> 8 <h5 class="card-title">{{ $content->title }}</h5> 9 <p class="card-text">{{ $content->content }}</p> 10 </div> 11 <ul class="list-group list-group-flush"> 12 <li class="list-group-item">大陸名:{{ $content->continent}}</li> 13 <li class="list-group-item">国名:{{ $content->country }}</li> 14 <li class="list-group-item">費用:¥{{ $content->costs }}</li> 15 <li class="list-group-item">滞在期間:{{ $content->span }}日間</li> 16 <li class="list-group-item"> 17 {!! link_to_route('index', '戻る', $content->id, ['class' => 'btn btn-info']) !!} 18 </li> 19 </ul> 20 </div> 21</div> 22@endsection

ContentModel

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Content extends Model 8{ 9 protected $fillable = ['user_id' ,'content' , 'title' , 'picture' , 'span' , 'costs' , 'continent' , 'country']; 10 11 protected $table = 'contents'; 12 13 public function user() 14 { 15 return $this->belongsTo(User::class); 16 } 17} 18
Route::get('/' , 'ContentController@index')->name('index'); Route::get('signup', 'Auth\RegisterController@showRegistrationForm')->name('signup.get'); Route::post('signup', 'Auth\RegisterController@register')->name('signup.post'); Route::get('login' , 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login' , 'Auth\LoginController@login')->name('login.post'); Route::get('logout' , 'Auth\LoginController@logout')->name('logout.get'); Route::get('search' , 'SearchController@index')->name('search'); Route::group(['middleware' => ['auth']], function(){ Route::resource('/content' , 'ContentController' , ['except'=>['index' ]]); Route::resource('users', 'UsersController', ['only' => ['index', 'show']]); });

試したこと

・{{ method_field('patch') }}の追加
・モデルの確認

補足情報(FW/ツールのバージョンなど)

Laravel6.0を利用しております。

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

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

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

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

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

yuki84web

2020/07/25 05:52

ルーティングの設定を掲載願います
kuwabaraakinori

2020/07/25 05:58

すいません、載せ忘れておりました。
guest

回答1

0

ベストアンサー

method指定の方法が間違っているようです。

「formタグのmethod属性」は、postgetしか対応していません。
挙動として言えば、値がpostで無ければget(初期値)になります。

今は、「formタグのmethod属性」が、putなので、get送信になっている筈。
送信ボタンを押した後に表示されるページで、URLを見てみたら、
後ろに入力値が?xxxx=xxxxxxx&・・・のように羅列されていませんか?

get送信content/{content}は、ルート設定でcontent.showに行くようになっているので、show.blade.phpが表示されるのは、そちらでそのように書いているからでしょう。

method指定を、PUT / PATCH / DELETEのいずれかに変更する方法は、
「formタグのmethod属性」はpostにしておき、formタグ内の子要素としてmethod指定を渡します。

コードを見ると、直す箇所は一か所だけですね。(なのでmethod属性はただの書き間違いかもしれない・・)

php

1× 2<form action="{{ route("content.update" , $content->id ) }}" method="put" enctype="multipart/form-data"> 3 45<form action="{{ route("content.update" , $content->id ) }}" method="post" enctype="multipart/form-data">

method指定{{ method_field('patch') }}は、{{ method_field('put') }}でも可。
それから、@csrfと同じように簡単に書くことのできる@methodというのもありますよ。

php

1 @method('PATCH')

以上、ご参考までに。。。


余談。。。質問とは関係ないので、読み飛ばして頂いても問題有りません。

edit.blade.phpから編集したら一度確認画面(contentconfirm.blade.php)に飛ぶようにしている

と書かれていて、
確かに、updateに行ったら、「確認画面」を出すようにしているようですが、
保存処理をした後に「確認画面」を出すのですか・・?

一般的なフォームのフローで「確認画面」と言えば

入力する → 確認する(★ここ) → 「保存」とかの処理を実行する

では?と思いまして、
保存後に出す画面を「確認画面」と表現するのは、語弊がありそうな気も。。。
保存結果を確認するための「確認画面」なのかな・・?

と、余計なお世話かと思いつつも、気になったので書いておきますネ。

投稿2020/07/27 00:18

mix-peach

総合スコア1910

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

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

kuwabaraakinori

2020/07/27 06:58

回答ありがとうございます。 回答を見る前に、Laravel CollectiveのFormでやったらうまくいきました。正直これも試行錯誤していろいろと試してなんとかうまくいった形でありますが、、。 回答の形でもう一度試してみたら、同じようにうまくいきました。また、初めて知るようなこともあり、ご教授していただき、ありがとうございます。 余談 確かに、その通りでした。保存する前に、やるべきですね。。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問