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

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

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

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

Webサイト

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

PHP

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

Q&A

解決済

2回答

1093閲覧

編集画面で編集した文字をデータベースに保存したい。

kerokeroryu2631

総合スコア14

Laravel

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

Webサイト

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

PHP

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

0グッド

0クリップ

投稿2020/10/08 12:20

前提・実現したいこと

編集画面で編集した文字をデータベースに保存したいです。
全体的な流れとしては、トップページ(index.blade.php)に様々な文言があり、その文言の隣の「編集する」ボタンを押せば、
編集画面に飛び(edit.blade.php)、文言の編集ができ、編集画面の「更新する」ボタンを押せば、
データベースのproverb_contactという項目が更新される、という仕様です。

発生している問題・エラーメッセージ

トップページから編集画面に飛び、編集する文言をinputタグに表示するところまではできました。
しかし、編集画面の「更新する」ボタンを押しても、下記のエラーメッセージが表示され、解決方法がわかりません。
教えていただけませんでしょうか?

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException **The GET method is not supported for this route. Supported methods: POST.** http://127.0.0.1:8000/update/1?proverb_contact=ygp79CGWZPToIj0BK7xxdkladadaa%3Bdass%EF%BD%84%E3%81%8B%EF%BD%93%EF%BC%9B

ビュー

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> <title>Document</title> </head> <body> <div class="jumbotron"> <form action="/update/{{$values->id}}" method="POST"> <div> <label>格言:</label> <div class="input-group mb-3"> <input name="proverb_contact" type="text" class="form-control" value="{{ $values->proverb_contact }}" autofocus> </div> </div> <button type="submit" class="btn btn-info">更新する</button> </form> </div> </body> </html>

コントローラー

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use App\Models\ProverbForm; class ProverbFormController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // // $proverbs = DB::table('proverbs')->select('proverb_contact')->inRandomOrder() // ->first(); $proverbs = DB::table('proverbs')->inRandomOrder() ->first(); $proverbs_contact = DB::table('proverbs')->get(); //$value= ProverbForm::all();//Modelを使って取得してみたが、なぜかエラー return view('Proverb.index', compact('proverbs'), compact('proverbs_contact')); //return view('Proverb.index'); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show(Request $request) { // // 確認画面 // $proverb_contact = $request->proverb_contact; // // 確認画面に表示する値を格納 // $input_data = [ // 'proverb_contact' => $proverb_contact // ]; // return view('Proverb.confirm', $input_data); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // $values = DB::table('proverbs')->where('id', '=', $id)->first(); return view('Proverb.edit', compact('values')); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $values, $id) { // dd($id); $values_update = DB::table('proverbs')->where('id', '=', $id)->first(); // $contact = ContactForm::find($id); dd($values_update); $values_update->proverb_contact = $values->input('proverb_contact'); $values_update->save(); return redirect('Proverb.index'); } }

ルート

<?php use Illuminate\Support\Facades\Route; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ // Route::get('/', function () { // return view('welcome'); // }); Route::get('/', 'ProverbFormController@index'); // ↓編集画面に推移ルーティング Route::get('/edit/{id}', 'ProverbFormController@edit'); Route::post('/update/{id}', 'ProverbFormController@update'); Route::resource('Proverb', 'ProverbFormController');

試したこと

エラーメッセージ:
The GET method is not supported for this route. Supported methods: POST.

  • コントローラーとビューがポスト通信になっているか確認した。→なっていた。
  • エラーメッセージでググった。→特に有益な情報は見つからなかった。

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

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

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

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

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

m.ts10806

2020/10/08 21:22

Laravelのバージョンは幾つでしょうか。 @csrf の記述はなくても大丈夫でしたっけ(ドキュメント確認)
yuki84web

2020/10/09 01:05

ルーティング設定はどうなっていますか?編集は正確にはPOSTというかPATCHになるのでビューにその指定が必要なはずですが(公式ドキュメントをご覧ください)
kerokeroryu2631

2020/10/09 08:04

{{ csrf_field() }}を追加したら、動きました。 laravel のヴァージョンは下記です。 Laravel Framework 7.27.0
m.ts10806

2020/10/09 08:07

>動きました 解決でしょうか。
kerokeroryu2631

2020/10/09 08:30 編集

動いて保存処理を実行したら、上記エラーメッセージが出ました。 Error Call to undefined method stdClass::save() http://127.0.0.1:8000/update/3 コントローラーのUPDATEは下記のように実装しております。 何が問題なのでしょうか? /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $Request) { // $values_DB = DB::table('proverbs')->where('id', '=', $Request->id)->first(); $values_DB-> proverb_contact= $Request->input('proverb_contact'); $values_DB->save(); return redirect('Proverb.index'); }
m.ts10806

2020/10/09 08:31

$values_DBがnullとかでは。 ただ、質問に提示されている問題は解決したようなので、具体的にどのように解決したかを記載の上、質問を解決済みとしてください。
guest

回答2

0

削除しました。削除しました。

投稿2020/10/09 08:39

編集2020/10/09 08:40
kerokeroryu2631

総合スコア14

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

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

0

自己解決

ビューに{{ csrf_field() }}を追加したら、動きました。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> <title>Document</title> </head> <body> <nav class="navbar navbar-expand navbar-dark bg-secondary"> <a class="navbar-brand" href="#">格言編集サイト</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="ナビゲーションの切替"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbar"> <ul class="navbar-nav mr-auto"> <li class="nav-item active"> <a class="nav-link" href="#">ホーム <span class="sr-only">(現位置)</span></a> </li> <li class="nav-item"> <a class="nav-link" href="#">格言</a> </li> <li class="nav-item"> <a class="nav-link" href="#">管理者について</a> </li> <li class="nav-item"> <a class="nav-link" href="#">お問い合わせ</a> </li> </ul> <form class="form-inline my-2 my-md-0"> <input class="form-control" type="search" placeholder="検索..." aria-label="検索..."> </form> </div> </nav> <div class="jumbotron"> <form action="/update/{{$values->id}}" method="POST"> {{ csrf_field() }} <div> <label>格言:</label> <div class="input-group mb-3"> <input name="proverb_contact" type="text" class="form-control" value="{{ $values->proverb_contact }}" autofocus> </div> </div> <button type="submit" class="btn btn-info">更新する</button> </form> </div> </body> </html>

投稿2020/10/09 08:37

kerokeroryu2631

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問