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

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

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

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

Laravel 5

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

Q&A

1回答

9928閲覧

【Laravel】確認画面から入力画面に戻った時のcheckbox値を保持する方法

SENNA0510

総合スコア10

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2019/01/24 03:04

編集2019/01/24 06:32

CRUDの流れを作っている際に、以下の件でハマりました。

入力 → 確認 → 完了 という流れで
確認から入力に戻った際、input type="text"の場合は「{{ old('ClientName') }}」でデータを保持しておけると思いますが
input type="checkbox"の場合、どのようにしてデータを保持するのか教えて頂きたいです。

現在、以下のようにコーディングしています。

■controllerファイル

php

1 //追加ページ 2 public function create() { 3 $month = Client::$month; 4 return view('client.create', compact('month')); 5 } 6 //追加の確認 7 public function confirm(ClientRequest $request) { 8 $data = $request->all(); 9 if (isset($request->month)) { 10 $data['month'] = implode(', ',$request->month); 11 } 12 return view('client.confirm')->with($data); 13 } 14 15 //追加の処理 16 public function store(ClientRequest $request) { 17 $action = $request->get('action');// name=action の value名を取得 18 $input = $request->except('action');// 入力内容を取得 19 20 if ($action === "確定") { 21 $clients = new Client(); 22 $clients->name = $request->ClientName; 23 $clients->month = $request->ClientMonth; 24 $clients->body = $request->ClientBody; 25 $clients->save(); 26 return redirect('/client/list'); 27 } else { 28 return redirect('/client/create')->withInput($input); 29 } 30 31 }

■viewファイル(入力画面)

php

1<form class="" action="{{ url('/client/confirm') }}" method="post"> 2 {{ csrf_field() }} 3 4 <p> 5 <input type="text" name="ClientName" placeholder="名前" value="{{ old('ClientName') }}"> 6 @if($errors->has('ClientName')) 7 <span class="error">{{ $errors->first('ClientName') }}</span> 8 @endif 9 </p> 10 11 <p> 12 @foreach($month as $key => $value) 13 <label class="checkbox-inline"> 14 {!! Form::checkbox('month[]', $value) !!} 15 {{ $value }} 16 </label> 17 @endforeach 18 </p> 19 20 <p> 21 <textarea name="ClientBody" rows="8" cols="80" placeholder="本文">{{ old('ClientBody') }}</textarea> 22 @if($errors->has('ClientBody')) 23 <span class="error">{{ $errors->first('ClientBody') }}</span> 24 @endif 25 </p> 26 27 <input type="submit" value="登録"> 28</form>

■viewファイル(確認画面)

php

1<form class="" action="{{ url('/client') }}" method="post"> 2 3 <input type="hidden" name="ClientName" value="{{ $ClientName }}"> 4 <input type="hidden" name="ClientMonth" value="{{ $month }}"> 5 <input type="hidden" name="ClientBody" value="{{ $ClientBody }}"> 6 {{ csrf_field() }} 7 8 この内容で登録します。 9 10 <ul> 11 <li>{{ $ClientName }}</li> 12 <li>{{ $month }}</li> 13 <li>{!! nl2br(e($ClientBody)) !!}</li> 14 </ul> 15 16 <input type="submit" name="action" value="戻る"> 17 <input type="submit" name="action" value="確定"> 18 19</form>

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

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

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

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

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

guest

回答1

0

// 追加ページ public function create() { // 配列が入っているなら Client::$month も Client::$months の複数形にしたほうが混乱が少ないかも return view('client.create', ['months' => Client::$month]); } // 追加の確認 public function confirm(ClientRequest $request) { return view('client.confirm') ->with(compact('request')); } //追加の処理 public function store(ClientRequest $request) { if ($request->action === '確定') { Client::make($request->only('name', 'body')) ->fill(['month' => implode(', ', $request->months ?? [])]) ->save(); return redirect('/client/list'); } return redirect('/client/create') ->withInput($request->except('action')); }
<form class="" action="{{ url('/client/confirm') }}" method="post"> {{ csrf_field() }} <p> {!! Form::text('name', old('name'), ['placeholder' => '名前']) !!} @if ($errors->has('name')) <span class="error">{{ $errors->first('name') }}</span> @endif </p> <p> @foreach ($months as $key => $value) <label class="checkbox-inline"> {!! Form::checkbox("months[$key]", $value, old("months.$key")) !!} {{ $value }} </label> @endforeach </p> <p> {!! Form::textarea('body', old('body'), [ 'rows' => 8, 'cols' => 80, 'placeholder' => '本文', ]) !!} @if ($errors->has('body')) <span class="error">{{ $errors->first('body') }}</span> @endif </p> <input type="submit" value="登録"> </form>
<form class="" action="{{ url('/client') }}" method="post"> {{ csrf_field() }} {!! Form::hidden('name', $request->name) !!} @foreach ($request->months ?? [] as $key => $value) {!! Form::hidden("months[$key]", $value) !!} <!-- ← ここで配列にしていなかったのが根本的な原因 --> @endforeach {!! Form::hidden('body', $request->body) !!} この内容で登録します。 <ul> <li>{{ $request->name }}</li> <li>{{ implode(', ', $request->months ?? []) }}</li> <li>{!! nl2br(e($request->body)) !!}</li> </ul> <input type="submit" name="action" value="戻る"> <input type="submit" name="action" value="確定"> </form>

投稿2019/01/24 03:23

編集2019/01/24 10:38
mpyw

総合スコア5223

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

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

SENNA0510

2019/01/24 04:05

お早いご返信ありがとうございます! さっそく試してみたのですが、、、ダメでした。。。
mpyw

2019/01/24 04:28

よく見たら $month の渡し方がそもそもおかしいような… implodeしたら配列じゃなくて文字列になってるはずですね
SENNA0510

2019/01/24 04:38

文字列に変換しないと配列のままでは以下のエラー文が出てしまうのです。 htmlspecialchars() expects parameter 1 to be string, array given https://qiita.com/mpyw/items/f298828002bbc488fe89 上記URLなどを参照すると配列だからエラーになる?ようなことが書いてありました。 さらに文字列に変換する というやり方は以下ページを参照しました。 https://www.webopixel.net/php/1316.html
SENNA0510

2019/01/24 04:42

only('month')について monthだけではなく他の項目として ClientName ClientBody があります。
SENNA0510

2019/01/24 05:12

やはり文字列に変換しないと 「htmlspecialchars() expects parameter 1 to be string, array given」が出てしまいますね。。。
mpyw

2019/01/24 05:59

ご提示のコードでは $month を foreach で回していますが,これ以外の場所で $month が使われていませんか?「配列を期待している $month」「文字列を期待している $month」が混在していると思われます。名前がかぶらないようにしたほうがいいかも…
SENNA0510

2019/01/24 06:33

変数名に被りがない事がわかった頂けるよう コードをさっきよりも詳細に書き直したのでご確認して頂ければと思います。
mpyw

2019/01/24 10:35

修正&リファクタリングしてみました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問