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

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

ただいまの
回答率

90.61%

  • PHP

    19906questions

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

  • Laravel 5

    1810questions

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

Laravelでのフォーム作成

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 177

Nitta

score 32

お世話になってます。
今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');
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/06/21 13:19

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

    キャンセル

  • Nitta

    2018/06/21 16:48

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

    キャンセル

  • mts10806

    2018/06/22 10:48

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

    キャンセル

回答 2

checkベストアンサー

+2

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

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * CSRFバリデーションから除外するURI
     *
     * @var array
     */
    protected $except = [
        'nitta',
        'http://(実際のドメイン)/nitta',    // おそらく不要定義です('nitta'だけでうまくいくなら削除してください)
    ];
}

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/21 15:30

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

    キャンセル

  • 2018/06/26 07:40

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

    キャンセル

+2

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/21 15:30

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

    キャンセル

  • 2018/06/26 10:32 編集

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

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    19906questions

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

  • Laravel 5

    1810questions

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