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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

2666閲覧

【laravel】モーダルが表示されない。

youplus40

総合スコア19

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/08/27 10:35

前提・実現したいこと

PHP(larvel)でタスク管理システムを作っています。
経験値を保存し、indexページをリダイレクト後、モーダルを表示する機能を実装しようとしましたが、モーダルが表示されずただリダイレクトされるだけの状態です。経験値およびレベルアップ機能はできております。

モーダル表示に関して、コードにおかしな部分がないか確認いただきたいです。

該当のソースコード

laravel

1// index.blade.php内 2 3{{-- <!--完了ボタン -->--}} 4 <td class="button"><form action="{{ route('todo.complete',$todo["id"]) }}" method="post"> 5 {{ csrf_field() }} 6 {{ method_field('patch')}} 7 <button type="submit" class="btn btn-success" id="openModal">完了</button> 8 </form> 9 </td> 10 <!-- モーダルエリアここから --> 11 @if (session('flash_message')) 12 <section id="modalArea" class="modalArea"> 13 14 <div id="modalBg" class="modalBg"> 15 </div> 16 <div class="modalWrapper"> 17 <div class="modalContents"> 18 {{ session('flash_message') }} 19 </div> 20 <div id="closeModal" class="closeModal"> 21 × 22 </div> 23 </div> 24 25 </section> 26 @endif 27 28 <main class="mt-4"> 29 @yield('content') 30 </main> 31 <!-- モーダルエリアここまで --> 32 33 <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 34 <script> 35$(function () { 36 $('#openModal').load(function(){ 37 $('#modalArea').fadeIn(); 38 }); 39 $('#closeModal , #modalBg').click(function(){ 40 $('#modalArea').fadeOut(); 41 }); 42}); 43 </script> 44 </body> 45

laravel

1 public function complete($id) { 2 // 完了日を入力 3 $todo = Todo::find($id); 4 $todo->completed_at = date("y-m-d"); 5 $todo->save(); 6 7 // 経験値を加算 8 $userLevel = userlevel::whereIn('id', function ($query) { 9 $query->select(DB::raw('MAX(id) As id'))->from('user_levels'); 10 })->first(); 11 $levelSetting = levelsetting::where('level', '<=', $userLevel->users_level) 12 ->sum("thresold"); 13 $totalExp = $userLevel->experience_point; 14 $totalExp += $todo->difficultyLevel; 15 $userLevel->experience_point = $totalExp; 16 $userLevel->save(); 17 // レベルを上げる 18 if ($levelSetting <= $userLevel->experience_point) { 19 $userLevel->users_level = $userLevel->users_level +1; 20 $userLevel->save(); 21 session()->flash('flash_message', 'レベルが上がりました'); 22 } 23 return redirect('todos/index'); 24 } 25

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

PHP 7.4.9
laravel 6.18.35
MySQL 5.7.26

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

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

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

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

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

guest

回答2

0

「経験値を保存」をAjaxでされては。

投稿2020/08/27 11:14

m.ts10806

総合スコア80875

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

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

youplus40

2020/08/28 06:02

なるほど、Ajaxは触ったことがなかったです。 complete()はいくつかの処理がありますが、経験値の保存のみAjaxで処理する理由を教えていただけないでしょうか。
m.ts10806

2020/08/28 06:11

あくまで質問内容の文章を引用しただけですが、ひとまずバックグラウンドで実行するので十分かと思います。「送信したあとにモーダル」というのは制御が難しいですし、挙動しても違和感があります。
youplus40

2020/08/28 08:34

回答ありがとうございます。 なるほど、理解しました。おっしゃるとおり、モーダルの表示は制御が難しいので、 フラッシュメッセージをリダイレクトしたページに表示する方向で再度設計し直そうと思います。
guest

0

自己解決

モーダルからフラッシュメッセージに変更し、実装できました。
最終のコードを記載します。

laravel

1 <!--index.blade.php --> 2 <!--完了ボタン --> 3 <td class="button"> 4 <form action="{{ route('todo.complete',$todo["id"]) }}" method="post"> 5 {{ csrf_field() }} 6 {{ method_field('patch')}} 7 <button type="submit" class="btn btn-success">完了</button> 8 </form> 9 </td> 10

laravel

1 public function complete($id) 2 { 3 // 完了日を入力 4 $todo = Todo::find($id); 5 $todo->completed_at = date('y-m-d'); //完了ボタンを押した日付を保存 6 $todo->save(); 7 8 // 経験値を加算 9 // ユーザーレベルテーブルの取得 10 $userLevel = userlevel::find(1) 11 ->first(); 12 $levelSetting = levelsetting::where('level', '<=', $userLevel->users_level) 13 ->sum('thresold'); //ユーザーレベルと同じレベルまでに必要な経験値の合計を取得 14 $totalExp = $userLevel->experience_point; //現在の獲得経験値を変数に入れる 15 $totalExp += $todo->difficultyLevel; //現在の獲得経験値に新たに獲得した経験値を足す 16 $userLevel->experience_point = $totalExp; //足した経験値をテーブルへ入れる 17 $userLevel->save(); 18 19 // レベルを上げる 20 if ($levelSetting <= $userLevel->experience_point) { //獲得経験値が経験値テーブルを上回っていた場合 21 $userLevel->users_level = $userLevel->users_level + 1; //ユーザーレベルを一つ上げる 22 $userLevel->save(); 23 session()->flash('flash_message', 'レベルが上がりました!引き続き頑張りましょう!'); 24 } 25 return redirect('todos/index');

js

1jQuery(function ($) { 2 $(function () { 3 $('.checkbox').on('click', function () { 4 if ($(this).prop('checked')) { 5 // 一旦「なし」をクリアして再チェックする 6 $('.checkbox0').prop('checked', false); 7 $(this).prop('checked', true); 8 } 9 }); 10 $('.checkbox0').on('click', function () { 11 if ($(this).prop('checked')) { 12 // 一旦他の曜日をクリアして再チェックする 13 $('.checkbox').prop('checked', false); 14 $(this).prop('checked', true); 15 } 16 }); 17 }); 18});

投稿2020/09/04 08:55

youplus40

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問