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

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

ただいまの
回答率

87.37%

【laravel】変数にddをかけたところ、Undefined indexがエラー表示されます。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 3,054

score 33

前提・実現したいこと

検索ができないバグを探していたところ、インデックスが定義されていないと表示されおそらくこれがバグの原因と思われます。
ただ、このインデックスの未定義の問題を解消する方法が見つかっておりません。
ご教授いただけますでしょうか。
よろしくお願いいたします。

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

ErrorException in SearchController.php line 59:
Undefined index: search

該当のソースコード

public static function searchCommon($where = null, $sortFunc = null)
    {
        $input = request()->all();
        $validator = \Validator::make($input, [
            'q' => 'string|max:255',
            'page' => 'integer|not_in:0,1',
            'search' => 'integer'
        ]);
        if ($validator->fails()) return app()->abort(404);
        $page   = isset($input['page']) ? (int)$input['page'] : 1;
        $search = isset($input['search']) ? (int)$input['search'] : 0;dd($input['search']);
if ($search) {
            $data = Search::select('result', 'query')->where('id', $search)->first();
            $ids = $data ? $data['result'] : [];
            $q   = isset($data['query']['q']) ? $data['query']['q'] : '';
        } else {
            $q = isset($input['q']) ? $input['q'] : '';
            $query = Fulltext::where('type', '<>', 'job');
            if ($q !== '') $query->whereIndex($q);
            if (!is_null($where)) $query->where($where);
            $ids = NULL;
            if ($sortFunc) {
                $query = $query->select('id', 'type', 'main_id')->get()->toArray();
                usort($query, $sortFunc);
                $ids = array_pluck($query, 'id');
            } else {
                $ids = array_map('intval', $query->orderBy('time','DESC')->lists('id')->toArray());
            }
            // $search {{{
            $search = new Search();
            $search['result'] = $ids;
            $search['query']  = ['q' => $q];
            $search->save();
            $search = $search['id'];
            // }}}
        }
}
<form class="clearfix m-t-50" method="GET" action="{{url('search')}}">
<div class="input-group input-group-lg col-sm-offset-2 col-sm-8 p-a-0">
<input type="text" name="q" class="form-control submit13" placeholder="検索語句を入力してください" title="検索語句" value="{{$q or ''}}">
<span class="input-group-btn">
<button class="btn btn-success" type="submit">検索</button>
</span>
</div>
</form>

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

他に必要な情報等ありましたら、ご連絡いただけますでしょうか?
何卒よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • Archsted

    2017/07/13 18:44

    formから、name="search" の要素が送られていない可能性が高いです。可能であれば(キーワード入力と検索ボタンだけでなく)form要素の中身を全て追記してもらえないでしょうか?

    キャンセル

  • YYama

    2017/07/13 18:47

    formの中身すべて追記いたしました。よろしくお願いいたします。

    キャンセル

回答 3

checkベストアンサー

+1

$input['search']が無い、というエラーが出ているようですが…

$input = request()->all();ですが、requestの$が抜けているようですが大丈夫ですか?

後は、viewに設定されているnameに誤字等が無いかどうか確認してみては如何でしょうか?
「検索ができないバグ」というのは常に$searchが0になっているからではありませんか?

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/07/14 15:12

    ご回答ありがとうございます。
    仰る通り「会計」という文字を入れて検索をかけました。
    この場合、入力された文字が化けてしまっているのでしょうか?
    それともmysql内で設定されている文字コードがおかしいのでしょうか?

    キャンセル

  • 2017/07/14 15:42

    入力されている文字が化けているのだと思います。
    私の環境で漢字を入れると下記の様に出力されますので。

    Request {#40 ▼
    #json: null
    ##中略##
    +request: ParameterBag {#41 ▼
    #parameters: array:4 [▼
    "searchString" => "会計"
    ]
    }
    ##中略##
    #defaultLocale: "en"
    }

    キャンセル

  • 2017/07/14 16:03

    ご確認ありがとうございます。
    入力された文字のコードを設定する箇所を探して、そこを修正してみます。

    キャンセル

+1

サーバに来たリクエスト中にsearchが無いのが原因っぽいです。

Viewは一部分のようなので推測になりますが$input['search']はクエリストリング中で渡しているような感じでしょうか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

検索条件を入力して検索するのとは別に、検索した条件と結果はDBに保持しておき
過去に検索した事のある条件を選ぶ事でも検索結果が表示されるシステムとお見受けします。
恐らく、後者の検索をした時にのみsearch=(Searchテーブルのid)が付与されるのでしょう。

「検索ができない」とおっしゃっている原因は一度置いておき、本題となっていた
「ddでUndefined index: searchが出る」という理由については、
dd($input['search']);という記述は,$inputにsearchというキーが必ず存在する事を前提としており、
少なくても前者の検索ではリクエストの中にsearchというキーで値が存在しないから、となるかと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/07/13 19:35

    ご回答ありがとうございます。
    仰る通り、検索内容を保存するようになっているものと思われます。
    Archsted様が仰りたいのは、みるべきポイントを誤っている可能性があるということでしょうか?

    キャンセル

  • 2017/07/13 21:14

    検索内容を入力して検索ボタンを押した時にエラーが発生するのはある意味正しいですが、
    もし保存した検索を選んだ時にも同様のエラーが発生した場合はおかしいと考えられます。

    その場合はルーティングの設定、エラーが出た時のURL、Viewの保存した検索を表示している部分のコードなど、追加でお聞きしなくてはならない項目が多く、現在の質問とは少し離れた内容となってしまうため「リクエストに含ませたはずのパラメータが取得できない」というような内容の質問で再度質問された方がよいかなと思います。

    また、パラメータは取得できるのに結果が正しくないとなると別の観点で見る必要があるため、「検索ができないバグ」の具体的な内容(エラーが表示される、画面が真っ白、想定していないデータが表示されてしまう等)を記載の上、改めて質問されるとよいかと思います。

    キャンセル

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

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

関連した質問

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