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

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

ただいまの
回答率

89.20%

postした場合、タイムアウトとなってしまう

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 595

toll_tree

score 35

laravelを学習していたのですが、postした際に、ページが表示できない問題が発生しています。
以下は、ルート情報を記載した、「web.php」です

<?php

/*
|--------------------------------------------------------------------------
| 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::post('hello','HelloContoroller@post');

//use App\Http\Middleware\HelloMiddleware;

Route::get('hello/add','HelloController@add');
Route::post('hello/add','HelloController@create');

// Route::get('hello/other','HelloController@other');


以下はコントローラ部分の「HelloController.php」です

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Requests\HelloRequest;
use Validator;
use Illuminate\Support\Facades\DB;


class HelloController extends Controller{

    public function index(Request $request)
    {


        $items = DB::select('select * from people');
        return view('hello.index',['items' => $items]);

    }

    public function post(Request $request)

    {
        $items = DB::select('select * from people');
        return view('hello.index',['items' => $items]);

    }
    public function add(Request $request)
    {
        return view('hello.add');
    }

    public function create(Request $request)
    {
        $param = [
            'name' => $request->name,
            'mail' => $request->mail,
            'age' => $request->age,
        ];

        DB::insert('insert into people (name, mail, age) values 
        (:name, :mail,:age)',$param);
        return redirect('./hello');
    }




}


下記はview部分である「add.blade.php」です

@extends('layouts.helloapp')
@section('title','Add')
@section('menubar')
  @parent
  新規作成ページ
@endsection

@section('content')
  <table>
    <form action="/hello/add" method="post">
      {{ csrf_field() }}
      <tr><th>name:</th><td><input type="text" name="name"></td></tr>
      <tr><th>mail:</th><td><input type="text"></td></tr>
      <tr><th>age: </th><td><input type="text" name="age"></td></tr>
      <tr><th></th><td><input type="submit" value="send"></td></tr>
    </form>
  </table>
  @endsection

  @section('footer')
  copyright 2017 tuyano.
  @endsection


起きている問題としましては、/hello/addにgetアクセスした場合は、add.blade.phpが表示されるのですが、add.blade.phpからフォーム部分の入力値を空にしてpostした場合、「Maximum execution time of 30 seconds exceeded」となってしまい、画面が表示できません。
原因が分からない為、ご助言頂けましたら幸いです。
よろしくお願いします

以下は、タイムアウトした際のエラーログ(Connection.php)になります。

        // To execute the statement, we'll simply call the callback, which will actually
        // run the SQL against the PDO connection. Then we can calculate the time it
        // took to execute and log the query SQL, bindings and time in our memory.
        try {
            $result = $callback($query, $bindings);
        }

        // If an exception occurs when attempting to run a query, we'll format the error
        // message to include the bindings with SQL, which will make this exception a
        // lot more helpful to the developer instead of just the database's errors.
        catch (Exception $e) {
            throw new QueryException(
                $query, $this->prepareBindings($bindings), $e
            );
        }

        return $result;
    }

    /**
     * Log a query in the connection's query log.
     *
     * @param  string  $query
     * @param  array   $bindings
     * @param  float|null  $time
     * @return void
     */
    public function logQuery($query, $bindings, $time = null)
    {
        $this->event(new QueryExecuted($query, $bindings, $time, $this));

Arguments
"Maximum execution time of 30 seconds exceeded"
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • mix-peach

    2019/05/20 18:11

    Laravelでも名前付きプレースホルダ―は、掲載のコードで使えると思いますので、そこに問題はないと思います。。。
    エラーログに、timeoutが発生した場所が、記載されているのではないかと思いますが、確認はされましたか?

    キャンセル

  • toll_tree

    2019/05/20 18:41

    >エラーログに、timeoutが発生した場所が、記載されているのではないかと思いますが、確認はされましたか?
    はい。その部分を質問本文に追記した方が良いでしょうか?

    キャンセル

  • toll_tree

    2019/05/20 19:36

    質問本文に追記いたしました。

    キャンセル

回答 2

0

データベース(Mysql)のサーバ名かIPアドレスが間違っている気がします

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/05/22 22:23

    環境によりますので、まずは自分のデータベースはどこにあって
    なんていう名前か調べることをお勧めします

    キャンセル

  • 2019/05/22 23:00 編集

    ありがとうございます。
    そうですね。。
    今、.envファイル及び、configのdatabase.phpもチェックしてみたのですが、正しくデータベースファイルのパスなども設定されておりました。
    原因一体なんなのでしょうね...

    キャンセル

  • 2019/05/22 23:04

    不思議なのが、postした時のみ、ってとこなんですよね...
    getで、/helloにアクセスして、index.blade.phpを呼び出した際は普通にDBからselectして、表示できていますし。。

    キャンセル

0

不思議なのが、postした時のみ、ってとこなんですよね...

postした時のみを考えるとformを送るプログラムに問題があるかもしれません

気になった部分は、 mailの部分に name がない所ですね

<tr><th>mail:</th><td><input type="text"></td></tr>

nameがないから、Requestからデータが取れていないので、postできない事を検証してみてください

    public function create(Request $request)
    {
        $param = [
            'name' => $request->name,
            'mail' => $request->mail,
            'age' => $request->age,
        ];

        DB::insert('insert into people (name, mail, age) values 
        (:name, :mail,:age)',$param);
        return redirect('./hello');
    }

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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