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

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

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

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

PHP

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

Blade

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

Q&A

解決済

1回答

3407閲覧

【Laravel】ViewからControllerへ値を渡したい(カレンダーの前月、翌月をボタンで操作)

pararinrinrin

総合スコア26

Laravel

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

PHP

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

Blade

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

0グッド

0クリップ

投稿2020/07/19 09:55

現在のカレンダーを生成した後、上部の矢印ボタンを押すと、それぞれ異なる値をControllerに送信し、
その値を元に前月、翌月のカレンダーを再表示するという内容にしたいのですが、矢印ボタンを押しても現在の年月が表示されてしまい、正常に日付が変更されません。

イメージ説明

blade

1 <div class="col-lg-6"> 2 <div class="month-area"> 3 <h2 class="contents-name">Month</h2> 4 <a href="{{ url('additem/month') }}"> 5 <img class="plus-icon" src="{{ asset('images/plus.png') }}" width="40" height="40 " alt="plus"> 6 </a> 7 <p class="calendarTitle">{{ $calendarTitle }}</p> 8 <div class="parent"> 9 <?php $m = 1; ?> 10 <form action="{{ url('home/month/changemonth') }}" method="POST"> 11 {{ csrf_field() }} 12 <input name="monthChange" type="hidden" value="prev"> 13 <button type="submit" name="changemonth" style="background-color:transparent;"><i class="fas fa-angle-double-left fa-2x"></i></button> 14 </form> 15 <?php $m = 2; ?> 16 <form action="{{ url('home/month/changemonth') }}" method="POST"> 17 {{ csrf_field() }} 18 <input name="monthChange" type="hidden" value="next"> 19 <button type="submit" name="changemonth" style="background-color:transparent;"><i class="fas fa-angle-double-right fa-2x"></i></button> 20 </form> 21 </div> 22 <table class="table table-bordered" style="table-layout:fixed;"> 23 <tr> 24 @foreach (['月', '火', '水', '木', '金', '土', '日'] as $dayOfWeek) 25 <th>{{ $dayOfWeek }}</th> 26 @endforeach 27 </tr> 28 @foreach ($dates as $date) 29 <?php $modalMonthData = array(); ?> 30 <?php $modalMonthDataJson = array(); ?> 31 <?php $modalMonthId = array(); ?> 32 <?php $modalMonthIdJson = array(); ?> 33 @if ($date->day == 1 && $date->format('N') != 1) 34 35 <td colspan="{{ $date->format('N')-1 }}"></td> 36 37 @endif 38 @if ($date->format('N') == 1) 39 <tr> 40 @endif 41 <td> 42 {{ $date->day }} 43 @foreach ($monthData as $md) 44 @if ($date->year == $md->year && $date->month == $md->month && $date->day == $md->day) 45 <?php array_push($modalMonthData, $md->task); ?> 46 <?php array_push($modalMonthId, $md->id); ?> 47 <?php $flg = "true"; ?> 48 @endif 49 @endforeach 50 <?php $cnt = count($modalMonthData); ?> 51 <?php $modalMonthDataJson = json_encode($modalMonthData); ?> 52 <?php $modalMonthIdJson = json_encode($modalMonthId); ?> 53 @if ($cnt >= 1) 54 <button type="button" style="background-color: transparent;" data-toggle="modal" data-day="{{ $date->day }}" data-task="{{ $modalMonthDataJson }}" data-id="{{ $modalMonthIdJson }}" data-target="#Modal"> 55 <img src="{{ asset('images/flg.png') }}" width="15" height="15 " alt="flg"> 56 </button> 57 @endif 58 </td> 59 @if ($date->format('N') == 7) 60 </tr> 61 @endif 62 @endforeach 63 </table> 64 </div> 65 </div>

route

1Route::post('/home/month/changemonth', 'HomeController@index');

HomeController

1 2public function index(Request $request) 3 { 4 //ログインしている認証ユーザー情報(名前)を取得 5 $name = Auth::user()->name; 6 7     内容省略 8 9 //クエリビルダでsql文実行 10 $monthData = DB::table('month') 11 ->select(DB::raw('year, month, day, task, username, id')) 12 ->where('username', '=', $name) 13 ->get(); 14 15 //デフォルトで現在の年と月をカレンダーとして表示 16 $now = new Carbon; 17 $year = $now->format('Y'); 18 $month = $now->format('m'); 19 20 $makeDate = $request->monthChange; 21 22 if ($makeDate == "prev") { 23 24 $prevDate = $now->addMonths(-1); 25 $year = $prevDate->format('Y'); 26 $month = $prevDate->format('m'); 27 } elseif ($makeDate == "next") { 28 29 $nextDate = $now->addMonths(1); 30 $year = $nextDate->format('Y'); 31 $month = $nextDate->format('m'); 32 } 33 34 $calendarTitle = $year . "年" . $month . "月"; 35 36 //yyyy-mm-ddの形式にする 37 $dateStr = sprintf('%04d-%02d-01', $year, $month); 38 //date型に整形 39 $date = new Carbon($dateStr); 40 $count = $date->daysInMonth; 41 $dates = []; 42 43 for ($i = 0; $i < $count; $i++, $date->addDay()) { 44 // copyしないと全部同じオブジェクトを入れてしまうことになる 45 $dates[] = $date->copy(); 46 } 47 48 内容省略↓ 49 50 }

おそれいりますが、間違った点についてご指摘いただけますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2020/07/19 10:00

それぞれ想定の情報は渡ってきているのでしょうか? ただ、いずれにしても「現在表示している年月」を渡してないように見受けられるので「更に翌月」「更に前月」はいかないように思いますが…
pararinrinrin

2020/07/23 23:37

ご質問を受け、デバッグバーを導入し確認したところ渡ってきていませんでした。 そもそもViewからControllerへの値渡しについてを理解する必要がありますね。
guest

回答1

0

ベストアンサー

$makeDateの比較を "==" でやっているのが問題ですね。
PHPでは文字列の比較を "==" で行うと文字列ではなく数値に変換して比較しようとします。

ですので、strcmpを使うべきかと思います。

投稿2020/07/21 10:41

posaune

総合スコア31

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

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

pararinrinrin

2020/07/23 23:40

ありがとうございます。文字列比較にはstcmpを使用したいと思います。今回の原因を確認したところviewからControllerに値が渡せていないことがわかりまして、まずはそちらの解決からしていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問