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

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

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

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

Laravel 5

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

Q&A

解決済

2回答

2254閲覧

Laravelでのフォーム作成

Nitta

総合スコア96

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2018/06/21 04:00

編集2018/06/21 04:01

お世話になってます。
今phpのlaravelでフォームを作成しています。
sumitボタンを押したら、入力内容を表示できるよう
にしたいのですが、うまく表示できません。
お分かりの方ご教示ください。

・やりたいこと
phpのlaravelでフォームを作成。
フォーム中のsumitボタンを押す⇒
テキストに入力⇒内容を画面表示。

・エラー
The page has expired due to inactivity.
Please refresh and try again.
有効期限が切れているので、更新し直して下さい。

app\Http\Controllers\HeloController.php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class HeloController extends Controller { public function getIndex(Request $request) { $res = 'URL : ' . $request->url() . '<br> Long URL : '. $request->fullurl() . '<br> PATH : '. $request->path(); return view('helo', ['message' => $res]); } public function postIndex(Request $request) { $res = "you typed: " . $request->input('str'); return view('helo', ['message' => $res ]); } }

resources\views\helo.php

<!doctype html> <html> <head> <title>Sample</title> <style> body { color:gray; } h1 { font-size:18pt; font-weight:bold; } </style> </head> <body> <h1>Sample</h1> <p><?php echo $message; ?></p> <form method="post" action="/nitta"> <input type="text" name="str"> <input type="submit"> </form> </body>

routes\web.php

Route::get('/helo', 'HeloController@getIndex'); Route::post('/nitta', 'HeloController@postIndex');

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

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

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

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

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

m.ts10806

2018/06/21 04:19

LaravelのBladeを利用しているわけではないのでしょうか。Form要素の内容再表示も含めたら最適だと思うのですが。ドキュメントはどこまで確認されたのでしょうか?
Nitta

2018/06/21 07:48

返信ありがとうございます。恥ずかしながら、ドキュメントは特には確認はしていません。下記の方が言うようにCSRF対策をうまくやれば、行けると思うんですがちょっと苦労してます(泣)。またよろしくお願いします。
m.ts10806

2018/06/22 01:48

初心者ことまずドキュメントを読んでください。基本をおさえないことには自分のやりたいことは実現できません。 あと質問編集画面タイトル横にある「初心者アイコン」をご活用ください。「初心者」と質問で書くよりも伝わりますし、質問一覧に表示されるのでわかりやすくなります。
guest

回答2

0

https://qiita.com/marcon/items/da59ca5e289a979f8221
上でも他の方が書かれていますがCSRF対策がされていないからのように見受けられます。またviewもbladeを使用した方が良いかと思います。詳しくは公式を参照ください

投稿2018/06/21 04:40

trewa-nek9585

総合スコア116

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

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

Nitta

2018/06/21 06:30

返信ありがとうございます。 CSRF対策は全くでした。初心者のためご勘弁下さい。 再度よく確認してみます。またよろしくお願いします。
Nitta

2018/06/26 01:33 編集

CSRF対策の件、下記のnakさんの情報より 完了しました。再度PDOの勉強をし直す予定です。 今回はありがとうございました。
guest

0

ベストアンサー

CSRF対策のTokenが無いからエラーになっているのでは?と思います。

対応方法は大きく分けて2つあります。

・form中にTokenを追加する
・MiddleWareでCSRF対策を無効にする設定を行う

いずれの対応方法も、公式マニュアル
https://readouble.com/laravel/5.5/ja/csrf.html
に具体的に記載されておりますので、詳しくはそちらをご覧ください。


質問への追記

下記の方が言うようにCSRF対策をうまくやれば、行けると思うんですがちょっと苦労してます(泣)。

を受けて。

すみません、もしかして、こちらの問題、まだ解決されていないのでしょうか?(回答へのコメントを拝見して「わかっていなかったが、回答を見て理解した」という旨かと勘違いしておりました。失礼いたしました)

各対応内容について、ご紹介した公式マニュアルの内容をもう少し具体的に記載します。
※両方の対応を行う必要はありません。いずれか1つの対応を実施してください(おススメは「form中にTokenを追加する」のほうです。Laravelで「実施するべし」と定義されているCSRF対策が正しく行える実装なので)。

なお、以下の記載内容はLaravel5.5のマニュアルを元に記載しています。
バージョンが異なる場合、対応方法が異なる場合がありますので、実際に使われているLaravelのバージョン番号をお知らせください。

####「form中にTokenを追加する」の場合
マニュアルですと、下記の部分に該当します。

アプリケーションでHTMLフォームを定義する場合はいつでも、隠しCSRFトークンフィールドをフォームに埋め込み、CSRF保護ミドルウェアがリクエストの有効性をチェックできるようにしなければなりません。トークン隠しフィールドを生成するには、csrf_fieldヘルパ関数を使ってください。 <form method="POST" action="/profile"> {{ csrf_field() }} ... </form>

具体的に記載すると、
resources\views\helo.php

<form method="post" action="/nitta">
のすぐ下に、
<?php echo csrf_field(); ?>
という記述を追加してください(動作未検証)。

※Bladeテンプレートを使用している場合は、ご紹介したマニュアル内の記載のとおり、
{{ csrf_field() }}ですが、Bladeテンプレートを使用しない場合は中かっこを使った関数呼び出し(例:{{ hoge() }} )ができません。
そのため、 <?php echo hoge(); ?> で関数を呼び出します。

####「MiddleWareでCSRF対策を無効にする設定を行う」の場合
マニュアルですと、「URIの除外」項全体が該当します。

具体的には、ご自身の

app\Http\Middleware
ディレクトリ(無かったら作成してください)の中に
VerifyCsrfToken.php
というファイルを作っていただき、その中に、下記の内容を記載してください。

php

1<?php 2 3namespace App\Http\Middleware; 4 5use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; 6 7class VerifyCsrfToken extends Middleware 8{ 9 /** 10 * CSRFバリデーションから除外するURI 11 * 12 * @var array 13 */ 14 protected $except = [ 15 'nitta', 16 'http://(実際のドメイン)/nitta', // おそらく不要定義です('nitta'だけでうまくいくなら削除してください) 17 ]; 18}

追伸:
みなさんがおっしゃっている「blade」というのは、こちらのことです。
https://readouble.com/laravel/5.5/ja/blade.html
ご参考まで。

投稿2018/06/21 04:32

編集2018/06/25 03:24
nak

総合スコア696

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

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

Nitta

2018/06/21 06:30

返信ありがとうございます。 CSRF対策及びform中にTokenを追加とわかりませんでした。 初心者のためご勘弁下さい。 またよろしくお願いします。
Nitta

2018/06/25 22:40

nak様、詳細なご回答ありがとうございます。 上記の内容で何とかできるようになりました。 PDO含め再度基本的な内容をもう一度抑える 予定です。頑張ります。 今後ともよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問