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

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

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

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

Q&A

解決済

2回答

1869閲覧

Laravelでセレクトボックスを使用してデータベース登録したい

kofaproki.0627

総合スコア4

Laravel

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

0グッド

0クリップ

投稿2022/07/19 08:36

前提

Laravelを独学で勉強中です。
Laravel Framework 9.20.0を使用し、
phpMyadminを使用しています。

実現したいこと

ユーザ登録の際、登録した日時をセレクトボックスで「年」「月」「日」をそれぞれ選択し、
DBにはdateカラムに「2022-07-19」と登録したいです。

行ったこと

一つの方法として、直接bladeの部分に書きました。

@include('layouts/admin_header') <h11>ユーザ情報編集</h11> <form action="/admin_add_confirm" method="post"> @csrf @method('PATCH') <div class=""> <div class="label">ID:</div> <div class="input-box"> <input class="id" name="id" placeholder="0123456789" value="{{ old('id')}}"> </div> <div class="label">名前:</div> <div class="input-box"> <input class="name" name="name" placeholder="山田 太郎" value="{{ old('name')}}"> </div> <div class="label">登録日:</div> @php $dt = new \Carbon\Carbon();  @endphp  <div class="mr-3">  @php $k = 'birth_date__year'; $class_name = 'form-control'; $style = ''; $input_values_array = [ "" => "年" ]; for ($i = 0; $i <= 100; $i++){ $input_values_array[$dt->format("Y")] = $dt->format("Y"); $dt->subYearNoOverflow(); } $_form_value = old($k);  @endphp  {{ Form::select($k, @$input_values_array, $_form_value, ['class' => $class_name, 'style' => $style]) }}  @error('birth_date__year') <div class="text-danger small">{{ $message }}</div>  @enderror  </div> <div class="mr-3">  @php $k = 'birth_date__month'; $class_name = 'form-control'; $style = ''; $input_values_array = [ "" => "月" ]; for ($i = 1; $i <= 12; $i++){ $input_values_array[$i] = $i; } $_form_value = old($k); @endphp {{ Form::select($k, @$input_values_array, $_form_value, ['class' => $class_name, 'style' => $style]) }} @error('birth_date__month') <div class="text-danger small">{{ $message }}</div> @enderror </div> <div class="mr-3"> @php $k = 'birth_date__day'; $class_name = 'form-control'; $style = ''; $input_values_array = [ "" => "日" ]; for ($i = 1; $i <= 31; $i++){ $input_values_array[$i] = $i; } $_form_value = old($k); @endphp {{ Form::select($k, @$input_values_array, $_form_value, ['class' => $class_name, 'style' => $style]) }} @error('birth_date__day') <div class="text-danger small">{{ $message }}</div> @enderror </div> <div class="input-box"> <select class="select" name="year" onchange="dropdort()"> <input class="date" name="date" placeholder="0123456789" value="{{ old('id')}}"> </div> <div class="btn-contents"> <a href="/admin_user">戻 る</a> </div> <div class="btn-contents"> <button>変 更</button> </div> </div> </form> @include('layouts/footer')

きちんとセレクトボックスが機能していますが、ここからどうデータベースに値を渡したらいいかわかりません。

また、PHPで生年月日のフォームを自作関数にしてLaravelのbladeで使ってみたを参考に別バージョンでセレクトボックスを作成しました。

@include('layouts/header') <h9>ユーザ登録</h9> <form action="/admin_add_confirm" method="post"> @csrf @method('PATCH') <div class=""> <div class="label">ID:</div> <div class="input-box"> <input class="number" name="number" placeholder="0123456789" value="{{ old('number')}}"> </div> <div class="label">名前:</div> <div class="input-box"> <input class="name" name="name" placeholder="山田 太郎" value="{{ old('name')}}"> </div> <div class="label">パスワード:</div> <div class="input-box"> <input class="password" name="password" placeholder="abcd1234" value="{{ old('password')}}"> </div> <li class="form-item"> <p class="form-item-title">登録日1</p> <select name="birthday_year"> <option value="">-</option> {{ MyFunction::yearSelect() }} </select> 年 <select name="birthday_year"> <option value="">-</option> {{ MyFunction::monthSelect() }} </select> 月 <select name="birthday_year"> <option value="">-</option> {{ MyFunction::daySelect() }} </select> 日 </li> <div class="btn-contents"> <button>登 録</button> </div> </div> </form> @include('layouts/footer')

この方法であれば、他の記事を投稿したりするときにもこの関数を使用できるので便利か?ともおもいましたが、
app.phpのtimezoneをAsia/Tokyoにしているにもかかわらず、2021年からしか表示されません。
またこの方法でも、どう年月日をdateカラムにまとめて登録できるのかわかりません。
検索しても出てこず・・・。
よろしくお願いいたします。

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

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

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

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

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

phper.k

2022/07/19 09:45

FormRequest は使ってますか?
phper.k

2022/07/19 13:52

つぎはぎでコードを書いているようですね・・・ Laravel を学習中とのことですが、どのレベルで使えるようになることを目標にしてますでしょうか?
kofaproki.0627

2022/07/20 04:52

そうなんです… 「実装したいもの」を決めて、そこからわからいものが出たら調べて、を繰り返しています。 今後は現場へ、と思っています。 まだLaravelは初めて1か月未満です。
phper.k

2022/07/20 04:59 編集

「今後は現場へ、と思っています」とのことなら、 https://readouble.com/laravel/9.x/ja/installation.html こちらのサイトをさらっとでいいので、Laravel にどんな機能があるのかを全てのページに目を通すことをお勧めします。(現場に出たいのであれば必須です) 全部覚える必要はありませんが、どんな機能があるのかを頭の中にインデックスする感じです。 「そういえばこんな機能があったな」と思い出せるくらい あなたの参考にしたページの筆者おそらく素人です。 あのコードだと絶対にレビューでOK出ません
kofaproki.0627

2022/07/20 11:20

ありがとうございます。 Laravelのドキュメントですね、わからない時にたまに確認しています。 ただ、理解できないことも多いので、きちんと理解できるようにします。 >あのコードだと絶対にレビューでOK出ません そういうこともあるんですね、わかりました。 勉強させていただきます。
phper.k

2022/07/20 14:11

とりあえずはちょっと暇がある時に本気の回答しておきます。
phper.k

2022/07/21 02:40

ログイン認証用のパッケージは何を使っていますか?
kofaproki.0627

2022/07/23 13:57

ありがとうございます。 Laravel UIを使用しています。 「ログイン認証」で調べてこちらが出てきたので使用しましたが、 調べたところ、もしかしたらなくなるかも?と出てました… そういうこともあるんですね。 私の調べ方が未熟で、これしか出てきませんでしたのでLaravel UIを使用しましたが、 今回聞かれて初めて、様々なログイン用のパッケージがあることを知りました。
guest

回答2

0

ベストアンサー

そもそも日付選択なら<input type="date">を使う。

投稿2022/07/19 22:26

kawax

総合スコア10377

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

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

kofaproki.0627

2022/07/20 05:12

ご回答ありがとうございます。 <input type="date">だとブラウザにもよりますが、 カレンダーのような表示になりますよね。 私が実装したいのは年、月、日をバラバラにセレクトボックスで選択する方法でした。 ただ、教えていただいた<input type="date">だと、 2/31を選択しないようにする等のバリデーション、や、年月日をひとつにまとめてcreated_atにし、 DBに登録する、等の手間が省けてとても便利ですね。 こちらで実装するかもう少し検討します。
guest

0

$dt = new \Carbon\Carbon();で、
$input_values_array = [ "" => "年" ];で、
$iのforループ内での
$input_values_array[$dt->format("Y")] = $dt->format("Y");
ってコードは明らかにおかしいよね。
$dtが今現在日時なら、日付時刻のまま年単位での引き算をやるか、
年成分だけ抽出してから単純に引き算するかになると思うし、
配列のインデックスは多分$iだよね。

$input_values_arrayが同じスコープ内で何度も使いまわしされているのも少し気になる。

投稿2022/07/19 09:01

編集2022/07/19 09:02
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2022/07/19 09:58 編集

引用している箇所は間違いないと思い込んで、コードのミスの指摘を拒否するなら、もう助言しないです。 お好きにやってください。 ブログに掲載のコードは絶対に間違いなく動くものなのですか? 間違いがあるから指摘しているんですよ、こちらは。
kofaproki.0627

2022/07/19 13:36

ご指摘ありがとうございます。 以後気をつけます。 ただ、そんな言い方&低評価する必要ありますか? 初学者に対してそこまで言わなくても…と思いました。 「拒否した」と捉えるのは自由ですが、「拒否」したつもりもありません。 このコードを採用する際に、合ってるかどうか確認するのも勉強中の身です。 その点ご容赦ください。
退会済みユーザー

退会済みユーザー

2022/07/20 00:58 編集

私の指摘内容に触れずに、引用したからって主張をされると、 引用した箇所は間違ってない、そこが問題点だとは認識していない、 という主張だと取られても仕方ないのではないですか? 少なくとも私はそう受け取ったので、もう助言するに値しないと判断しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問