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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Laravel

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

PHP

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

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

Q&A

解決済

1回答

743閲覧

Laravel クエリ文字列でパラメータ指定してアクセスすると画面が真っ白になる

hideyov

総合スコア18

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Laravel

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

PHP

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

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

0グッド

0クリップ

投稿2019/06/22 10:00

Laravel初心者です。「PHPフレームワーク Laravel入門」という書籍で勉強中です。
http://homestead.test/hello は正常に表示されるのですが、個別のレコードをID番号で検索して表示するために、クエリ文字列で /hello?id=番号 とパラエータ指定してアクセスすると、画面が真っ白になります。
エラーメッセージが出ないため、原因がわかりません。さらに必要な情報があれば、御指摘ください。よろしくお願いします。

Controller

** app/Http/Controllers/HelloController.php **

php

1<?php 2namespace App\Http\Controllers; 3 4use Illuminate\Http\Request; 5use Illuminate\Http\Response; 6use App\Http\Requests\HelloRequest; 7use Validator; 8use Illuminate\Support\Facades\DB; 9 10class HelloController extends Controller 11{ 12 public function index(Request $request) { 13 if (isset($request->id)) { 14 $param = ['id' => $request->id]; 15 $items = DB::select('select * from people where id = :id', $param); 16 } else { 17 $items = DB::select('select * from people'); 18 return view('hello.index', ['items' => $items]); 19 } 20 } 21 22 public function post(Request $request) { 23 $items = DB::select('select * from people'); 24 return view('hello.index', ['items' => $items]); 25 } 26 27 public function add(Request $request) { 28 return view('hello.add'); 29 } 30 31 public function create(Request $request) { 32 $param = [ 33 'name' => $request->name, 34 'mail' => $request->mail, 35 'age' => $request->age, 36 ]; 37 DB::insert('insert into people (name, mail, age) values (:name, :mail, :age)', $param); 38 return redirect('/hello'); 39 } 40 41 public function edit(Request $request) { 42 $param = ['id' => $request->id]; 43 $item = DB::select('select * from people where id = :id', $param); 44 return view('hello.edit', ['form' => $item[0]]); 45 } 46 47 public function update(Request $request) { 48 $param = [ 49 'id' => $request->id, 50 'name' => $request->name, 51 'mail' => $request->mail, 52 'age' => $request->age, 53 ]; 54 DB::update('update people set name =:name, mail = :mail, age = :age where id = :id', $param); 55 return redirect('/hello'); 56 } 57}

ルーティング

** routes/web.php **

php

1use App\Http\Middleware\HelloMiddleware; 2 3Route::get('hello', 'HelloController@index'); 4Route::post('hello', 'HelloController@post'); 5Route::get('hello/add', 'HelloController@add'); 6Route::post('hello/add', 'HelloController@create'); 7Route::get('hello/edit', 'HelloController@edit'); 8Route::post('hello/edit', 'HelloController@update');

View

** resources/views/hello/index.blade.php **

php

1@extends('layouts.helloapp') 2@section('title', 'Index') 3@section('menubar') 4 @parent 5 インデックスページ 6@endsection 7 8@section('content') 9 <table> 10 <tr><th>Name</th><th>Mail</th><th>Age</th></tr> 11 @foreach ($items as $item) 12 <tr> 13 <td>{{$item->name}}</td> 14 <td>{{$item->mail}}</td> 15 <td>{{$item->age}}</td> 16 </tr> 17 @endforeach 18 </table> 19@endsection

環境

開発環境:Vagrant + VirtualBox / Homestead
言語:PHP 7.3.4-1+ubuntu18.04.1+deb.sury.org+3
フレームワーク:Laravel Framework 5.5.45
DB:SQLite
Mac OSX 10.11.6

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

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

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

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

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

kei344

2019/06/22 12:57

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
guest

回答1

0

ベストアンサー

php

1 public function index(Request $request) { 2 if (isset($request->id)) { 3 $param = ['id' => $request->id]; 4 $items = DB::select('select * from people where id = :id', $param); 5 } else { 6 $items = DB::select('select * from people'); 7 return view('hello.index', ['items' => $items]); //ここがelseの中にある 8 } 9 }

こちらで$request->idがあった場合はreturn viewしてないからではないでしょうか?
見た限りparameterのidがあった場合には$itemsを取得してるだけなので。
おそらくこれならいけると思います!

php

1 public function index(Request $request) { 2 if (isset($request->id)) { 3 $param = ['id' => $request->id]; 4 $items = DB::select('select * from people where id = :id', $param); 5 } else { 6 $items = DB::select('select * from people'); 7 } 8 return view('hello.index', ['items' => $items]); 9 }

投稿2019/06/22 10:29

fumito_94

総合スコア679

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

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

hideyov

2019/06/22 12:29

あ!  なんと、return命令が if の中に入ってましたね。初歩的すぎるミスで、お恥ずかしい限りです! 直したら解決しました。ありがとうございました!
fumito_94

2019/06/22 13:57

意外とこういうのって気づかないですよね。。。 解決してよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問