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

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

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

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

Q&A

解決済

2回答

330閲覧

Laravel9 PHP 投稿時にcheckをつけた項目を編集画面でもcheckをつけて表示したい。

tkm0604

総合スコア552

PHP

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

0グッド

1クリップ

投稿2022/08/09 08:36

投稿時にcheckをつけた項目だけを編集画面でもcheckをつけて表示できるようにするにはどうすれば良いでしょうか?

新規投稿画面で以下のような項目にcheckをつけました。
イメージ説明

投稿の編集画面でも同じ状態で表示したいのですが、「施工事例1」にcheckを入れたのに「施工事例2」にもcheckがついて表示されてしまいます。

イメージ説明

投稿の編集画面のviewファイルでは以下のように書いています。

PHP

1<li class="info-category-list__item"> 2 @if (!is_null($post->jirei)) 3 <input id="example1" class="info-category-list__item--checkbox" 4 type="checkbox" name="jirei[]" value="1" checked> 5 @else 6 <input id="example1" class="info-category-list__item--checkbox" 7 type="checkbox" name="jirei[]" value="1"> 8 @endif 9 <label for="example1" class="info-category__item--label">施工事例1</label> 10</li> 11<li class="info-category-list__item"> 12 @if (!is_null($post->jirei)) 13 <input id="example2" class="info-category-list__item--checkbox" 14 type="checkbox" name="jirei[]" value="2" checked> 15 @else 16 <input id="example2" class="info-category-list__item--checkbox" 17 type="checkbox" name="jirei[]" value="2"> 18 @endif 19 <label for="example2" class="info-category__item--label">施工事例2</label> 20</li>

投稿編集のコントローラーメソッドは以下のように書いています。

PHP

1public function update(Request $request, Post $post){ 2 $oshirase=request()->input('oshirase'); 3 $jirei_flag=request()->input('jirei-flag'); 4 $jirei=request()->input('jirei'); 5 $inputs = request()->validate([ 6 'title'=>'required|max:255', 7 'body'=>'required|max:1000', 8 ]); 9 10 $post->title=$request->title; 11 $post->body=$request->body; 12 $post->oshirase=$oshirase; 13 $post->jirei_flag=$jirei_flag; 14 $post->jirei=json_encode($jirei); 15 $post->user_id=auth()->user()->id; 16 $post->save(); 17 return redirect('mypage/dashboard')->with('successMessage', 'お知らせの更新が完了しました。'); 18 19}

投稿の編集画面のviewファイルでdd($post); をすると以下のように情報が取得できています。
イメージ説明

「施工事例1」「施工事例2」の親カテゴリーに当たる「施工事例」('jirei_flag'カラム)はcheckをつけると”on”で渡されるので投稿の編集画面のviewファイルで以下のように書いて、編集画面でcheckの有無が取得できました。

PHP

1<input id="info-1" class="item info-category-list__item--checkbox" 2 type="checkbox" name="oshirase" 3 @if (old('oshirase', $post->oshirase) == 'on') checked @endif>

しかし、子カテゴリー('jirei'カラム)の「施工事例1」「施工事例2」.... は今後増えていく予定なのでコントローラーでjson_encode()しております。

"jirei"カラムがnullか?の判定だと全てのname="jirei"にcheckがついてしまうのは理解できたのですが、どうすればcheckをつけた"jirei"カラムにだけchecked をつけられるでしょうか?

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

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

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

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

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

guest

回答2

0

php

1 $post->jirei=json_encode($jirei);

何の意図があって json_encode してるんでしょうか?

投稿2022/08/09 13:25

phper.k

総合スコア3923

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

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

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

ベストアンサー

画像が見ずらいですがjireiの中身が文字列になっていますか?
jireiの中身が配列であれば以下のコードで動くはずです。

php

1<input type="checkbox" name="jirei[]" value="1" <?=(in_array(4, $post->jirei, true)? 'checked' : '')?>>

投稿2022/08/09 08:44

編集2022/08/09 08:46
slemntqe

総合スコア120

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

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

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

tkm0604

2022/08/09 09:29

早速コメントありがとうございます。 <input id="example1" class="info-category-list__item--checkbox" type="checkbox" name="jirei" value="1" <?=(in_array(4, [$post->jirei], true)? 'checked' : '')?>> としたのですが、投稿作成時にcheckをつけた項目にもcheckが付かなくなりました。 'jirei'カラムはstringで作成しております。
slemntqe

2022/08/09 09:40

jireiの中身が配列であれば以下のコードで動くはずです。
tkm0604

2022/08/09 09:51

ありがとうございます。 DBを確認すると複数の子カテゴリーカラムには["1","2","3","4"]と、配列で入っています。 いただいたコードを元にもう一度色々確認してみます
slemntqe

2022/08/09 09:56

配列に見える文字列がDBに文字列型として格納されている状態ではないですか? viewに渡された$post->jireiも文字列型では無いですか? 配列にする事で動くはずです。
tkm0604

2022/08/10 14:16

おっしゃる通り、DBに文字列型として格納されており、viewに渡された$post->jireiも文字列型でした。 view側で配列で取得する事で表示できました。 ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.69%

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

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

質問する

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

PHP

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