🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

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

POST

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1907閲覧

laravelからDB登録がうまくいかない

Inukai.1192

総合スコア25

Laravel

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

POST

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/03/22 08:47

編集2021/03/22 13:19

前提・実現したいこと

送信フォームをlaravelで実装しています。
送信したデータをDBにいれたいんですが、うまくいっておりません。

ddでpostの内容がとれているか確認してみた所、
入力した値はとれているみたいです。

お手数おかけいたしますが、よろしくお願いします。
イメージ説明

■■な機能を実装中に以下のエラーメッセージが発生しました。

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

送信フォームからDBにデータが反映されない

該当のソースコード

controller

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\ContactForm; class ContactFormController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // return view('contact.index'); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // return view('contact.create'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $contact =new ContactForm; // $contact->name = $request->input('name'); // $contact->email = $request->input('email'); $contact->url = $request->input('url'); $contact->gender = $request->input('gender'); $contact->age = $request->input('age'); $contact->contact = $request->input('contact'); dd($contact); $contact->save(); return redirect('contact/index'); } ```views

@extends('layouts.app')

@section('content')

<div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">Dashboard</div>
<div class="card-body"> @if (session('status')) <div class="alert alert-success" role="alert"> {{ session('status') }} </div> @endif creeateです。 <form method="POST" action="{{route('contact.store')}}"> @csrf 氏名 <input type="text" name="name"> <br> メールアドレス <input type="email" name="email"> <br> ホームページ <input type="url" name="url"> <br> 性別 <input type="radio" name="gender" value="0">男性 <input type="radio" name="gender" value="1">女性 <br> 年齢 <select name="age"> <option value="">選択してください</option> <option value="1">~19歳</option> <option value="2">20~29歳</option> <option value="3">30~39歳</option> <option value="4">40~49歳</option> </select> <br> お問い合わせ内容 <textarea name="contact"></textarea> <br> <input type="checkbox" name="caution" value="1">注意事項 <br> <input class="btn btn-info" type="submit" value="登録する"> </form> </div> </div> </div> </div>
</div> @endsection ``` web.php(route) ```ここに言語を入力 <?php
/*
Web Routes
--------------------------------------------------------------------------
Here is where you can register web routes for your application. These
routes are loaded by the RouteServiceProvider within a group which
contains the "web" middleware group. Now create something great!
*/

Route::get('/', function () {
return view('welcome');
});

Route::get('tests/test','TestController@index');

Route::group(['prefix' => 'contact','middleware' => 'auth'],function(){
Route::get('index','ContactFormController@index')->name('Contact.index');
Route::get('create','ContactFormController@create')->name('contact.create');
Route::post('store','ContactFormController@store')->name('contact.store');

});
// Route::resource('contact', 'ContactFormController');

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

DB情報 ![![イメージ説明](37d0d219bb5c7f4e1623bbd60780f109.png) 読み込みのディレクトリ ![イメージ説明](4bbe26aa9a75cc68d7580640150907bd.png) 追加 contact form model ![イメージ説明](de2c5f858cb33e9f50db54a9030c7ef5.png) ![イメージ説明](db0ff7e95c384556ed3c5f99df6d9550.png) 追加実装2 ![イメージ説明](63f7626afc483eca5b1a7aeae6870815.png) 追加情報3 ![イメージ説明](6a56cbede2066c17fbeb13b5ce1802bc.png) 追加情報4 ![イメージ説明](2eb269c10c25087d4ca843d757e3881f.png) 追加情報5(別画面表示) ![イメージ説明](232af00a25062a640a3bbb863438521b.png) ### 試したこと 登録したデータが取得できているか確認。 バグがないか確認 記事をよんで、確認 https://katsusand.dev/posts/laravel-save-data-db/ ドキュメントで確認 https://readouble.com/laravel/8.x/ja/controllers.html (リソースコントローラの部分) 送信フォームの @csrfを追記 コントローラで use App\Models\ContactForm; $contact =new ContactForm; $contact->save(); スペルミスがないか確認 ### 補足情報(FW/ツールのバージョンなど) Laravel Framework 6.18.43 ここにより詳細な情報を記載してください。

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

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

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

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

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

phper.k

2021/03/22 08:58

ContactForm モデルの実装はどうなってますか?
Inukai.1192

2021/03/22 09:07

ContactForm モデルの実装はartisanコマンドでファイルを作っただけの状態になります。 追加で画像アップいたしました。追加 contact form modelです。 返信の回答こちらでよろしいでしょうか?
退会済みユーザー

退会済みユーザー

2021/03/22 10:16

すでに回答されてるのでここに書くと、Laravelでは$fillableはものすごく重要。間違った情報では$guarded使ってるけど$guardedなんてよっぽどの理由がない限り使わない。$guarded使ってる本やブログを見たらここは見る価値ないと判断して二度と見なくていい。
phper.k

2021/03/22 10:26

コードをスクショで上げるのはNG。テキストで。
Lulucom

2021/03/22 11:05

> DBにいれたいんですが、うまくいっておりません。 と書かれていますが、データベースのcontact_formsテーブルを見て、レコードが登録されていないことを確認されたのですか?(念のための確認です)
Lulucom

2021/03/22 11:24 編集

あと、エラーが出たかどうか明記されていませんが、エラーは出ていないということでしょうか。 「うまくいっていない」という表現ですと曖昧ですので、起きていることをもう少し具体的に説明していただくと良いでしょう。
Inukai.1192

2021/03/22 12:44 編集

アドバイスありがとうございます。 追加実装後、テーブルが反映されないのおかしいと思いサイドDB回りを調べていたら下記のような問題が新しくでてきました。追加情報3 キャプチャー追記しました。 下記エラー #1142 - INSERT, DELETE command denied to user 'pma'@'localhost' for table 'pma__recent'
Lulucom

2021/03/22 12:56

そのエラーはphpMyAdminで出ているのかと思いますので、Laravelとは関係無いのかなと思いました。 確認したいのは、ContactFormControllerのstoreメソッドが実行されたときにエラーが出るかどうかです。 あと、掲載されているphpMyAdminの画面の図では、「構造」タブの画面が表示されていますが、その左の「表示」タブの画面を表示すると、contact_formsテーブルにレコードがあるかどうか確認できるはずです。そこで確認してもLaravelアプリから登録しようとしたレコードが無いということでしょうか?
Inukai.1192

2021/03/22 13:05

Lulucomさん 表示ボタンを押そうとすると、追加情報4のようなエラーがでて表示ボタンを押せない状態になっております。
Lulucom

2021/03/22 13:08 編集

phpMyAdmin以外の方法で、contact_formsテーブルにレコードがあるかどうかを確認できますでしょうか?
Inukai.1192

2021/03/22 13:28 編集

Lulucomさん mysqlで表示する事はできます。追加情報5(別画面表示)にて表示いたしました。 全部で9件入ってまして、私のメアド、本名が入っていたので、表示は一件だけにしてあります。 新しくデータをいれてみた所、 8 | 田中 | test@gmail.com | https://www.sssss.com | 0 | 1 | test | 2021-03-22 22:26:18 | 2021-03-22 22:26:18 下記のように表示されました。
Lulucom

2021/03/22 13:24

追加情報5ですかね。contact_formsテーブルにレコードは登録されているように見えますが、それらはContactFormControllerのstoreメソッドで登録されたレコードではありませんか?
Inukai.1192

2021/03/22 13:30

ContactFormControllerのstoreメソッドで入れてたやつです。本日は、お昼からずーっとはまっていたので間違いないとおもいます!
guest

回答2

0

ベストアンサー

contact_formsテーブルにレコードが登録されているかどうかを、データベースにログインして直接確認してみましょう。

投稿2021/03/22 13:32

Lulucom

総合スコア1899

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

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

Inukai.1192

2021/03/22 13:39

無事解決できました。アドバイスくれた皆様ありがうございます。
Lulucom

2021/03/22 14:01

おそらく、登録後に表示されるcontact/indexのページを、まだちゃんと実装できていないのかと思いました。そのため登録できていないと勘違いされたのでしょう。 解決できてよかったです^ ^
guest

0

php

1class ContactForm extend Model 2{ 3 protected $fillable = [ 4 'name', 'email', 'url', 'gender', 'age', 'contact', 5 ]; 6 7}

fillableを追加してください。

Eloquent Model を用いたDBへの保存では、fillableで指定されているcolumn名のデータのみ保存が許可されます。

投稿2021/03/22 10:01

kaya754

総合スコア133

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

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

Inukai.1192

2021/03/22 10:30

すみません。うまくいかなったみたいです。 質問の所に、追加実装2という形えで実装結果表示いたしました。 DBリロード、php artisan serveでやり直したんですが。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問