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

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

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

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

Q&A

解決済

1回答

2320閲覧

laravelで作成中の掲示板について、selectタグ(プルダウンメニュー)の選択保持をさせたいです。

paypay12

総合スコア1

Laravel

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

0グッド

0クリップ

投稿2021/04/18 15:02

編集2021/04/19 08:34

前提・実現したいこと

Laravelで掲示板の投稿内容を編集する機能をつけようとしています。
フォーム内容にプルダウンメニューがあるのですが、編集画面にユーザーが遷移した際にもともと入力していた内容をフォームの初期表示としたいです。
フォームのページはbladeファイルで作成しています。

例:
選択肢 → A, K, Q
編集前の投稿で選択していた項目 → K
編集画面のプルダウンメニューの初期入力内容 → K

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

編集画面にユーザーが遷移した際、未選択の状態に(選択肢の一番上のものが選択された状態)なってしまいます。

例:
選択肢 → A, K, Q
編集前の投稿で選択していた項目 → K
編集画面のプルダウンメニューの初期入力内容 → A

該当のソースコード

現在、コード量を減らすためにforeach文でプルダウン内の選択肢を表示しています。
※bladeファイルの一部のみではlaravelの要素として、不足していたかと思われますのでソースコードを追加しています。

▼bladeファイル

php

1@csrf 2<div class="md-form"> 3 <label>タイトル</label> 4 <input type="text" name="title" class="form-control" required value="{{ $article->title ?? old('title') }}"> 5</div> 6<div class="form-group"> 7 8 9 <label>ハンド</label><br /> 10 <select name="rank"> 11 <?php 12 $rank = array('A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2'); 13 foreach($rank as $rank){ 14 print('<option value="' . $rank . '">' . $rank . '</option>'); 15 } 16 ?> 17 </select> 18</div>

 
▼コントローラー

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Article; 7use App\Http\Requests\ArticleRequest; 8 9class ArticleController extends Controller 10{ 11 public function __construct() 12 { 13 $this->authorizeResource(Article::class, 'article'); 14 } 15 16 function index(){ 17 //@TODO 投稿一覧画面を表示 18 $articles = Article::all()->sortByDesc('created_at'); 19 return view("articles.index", [ 20 "articles" => $articles 21 ]); 22 } 23 24 //投稿処理を行う 25 function create(Request $request){ 26 return view('articles.create'); 27 } 28 29 //新規作成処理 30 public function store(ArticleRequest $request, Article $article) 31 { 32 $article->fill($request->all()); 33 $article->user_id = $request->user()->id; 34 $article->save(); 35 return redirect('articles.index'); 36 } 37 38 //編集処理 39 public function edit(Article $article) 40 { 41 return view('articles.edit', ['article' => $article]); 42 } 43 44 //更新処理 45 public function update(ArticleRequest $request, Article $article) 46 { 47 $article->fill($request->all())->save(); 48 return redirect()->route('articles.index'); 49 } 50 51 //記事削除処理 52 public function destroy(Article $article) 53 { 54 $article->delete(); 55 return redirect()->route('articles.index'); 56 } 57 58 //詳細表示処理 59 public function show(Article $article) 60 { 61 return view('articles.show', ['article' => $article]); 62 } 63}

 
▼モデル

<?php namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $fillable = [ 'title', 'rank', ];

試したこと

webで調べて、以下のように「もし$_POST[‘rank’]のvalue(値)がPOSTされていて、かつAであればselectedをechoせよ。もし空であれば ” をechoせよ。」といった意味の記述をしてみましたが、変化がありませんでした。
※ここで試したことは以下のサイトを参考にしておりました。
http://webukatu.com/blogs/butterfly_engineer/2019/08/04/%E3%80%90php%E3%80%91select%E3%82%BF%E3%82%B0%E3%81%AE%E9%81%B8%E6%8A%9E%E5%86%85%E5%AE%B9%E3%81%AE%E4%BF%9D%E6%8C%81/#i-2

▼bladeファイル

php

1<select name="rank"> 2<option value="A" <?php echo array_key_exists('rank', $_POST) && $_POST['rank'] == 'A' ? 'selected' : ''; ?>>A</option> 3<option value="K" <?php echo array_key_exists('rank', $_POST) && $_POST['rank'] == 'K' ? 'selected' : ''; ?>>K</option> 4//以下略

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

・ソースコード欄にコントローラーとモデルを追加しております
・「試したこと」内に参照サイトのリンク先を追加しております

編集・追記依頼に対してお応えしたつもりではありますが、もしまだ不足店があればお伝えいただけますと幸いです。

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

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

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

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

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

m.ts10806

2021/04/18 23:19

どこにLaravel要素があるのでしょうか。 何を参考に作りましたか? 提示されたコードは単にPHPをガリガリ書いてるだけでLaravelを全く使ってないものに見受けられます。
退会済みユーザー

退会済みユーザー

2021/04/19 00:41 編集

viewで直接$_POSTなんて参照できないのでは。コントローラーからパラメータをもらわないと。
m.ts10806

2021/04/19 03:46

m6uさん 自分はほとんど使わないですが、@php〜@endphpで囲った中は従来のPHPコード書けるので参照できないことはないですが、スーパーグローバル変数を直接参照しようとしていることは大きな間違いですし、提示されたコードでフレームワークであると認識できる人はいないと思います。
paypay12

2021/04/19 08:42

m.ts10806さん m6u 追記・修正依頼ありがとうございます。 まだプログラミングの学習を始めて数週間の初学者ですので、適切な修正ができているかはわかりませんが、さらなるご指摘もいただけますと幸いです。 laravelの要素として、コントローラーとモデルも該当コードに用意しました。 参考にしたのは、techpitというプログラミング学習サイトの「Laravel(+Vue.js)でSNS風Webサービスを作ろう!」という教材です。 (そこには今回質問させていただいている内容についての記述がありませんでした) スーパーグローバル変数をviewで直接参照してはいけないこと、承知いたしました。 それがなぜなのかについて、調べて理解しようと思います。
m.ts10806

2021/04/19 09:44

>スーパーグローバル変数をviewで VIEWに限らず、Laravelで用意されたRequestを使ってください。詳細はドキュメント参照。
guest

回答1

0

ベストアンサー

Formファサードをそもそも知らないと見たので、こちらを参考にしてください。

selectの場合
https://pgmemo.tokyo/data/archives/1317.html
まとめ
https://laraweb.net/practice/7965/

投稿2021/04/22 05:55

raichi

総合スコア278

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問