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

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

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

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

5992閲覧

LaravelでDBにデータをポストできない場合の調べ方を知りたい

lkjgffh

総合スコア37

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/12/21 03:34

###前提・実現したいこと
formからユーザー登録ができるようにしたい

###発生している問題・エラーメッセージ
formからのポストをデータベースで受け取れない

###試したこと
strage>logs>laravel.logのログに何か出ているのでは?と思い確認したのですが、本日分のログは無し

ではMysqlのクエリログには何かあるのではと思い確認したのですが、そもそもクエリ自体が実行されていないようでした

mysql> show full processlist\G; *************************** 1. row *************************** Id: 9 User: homestead Host: localhost db: homestead Command: Query Time: 0 State: starting Info: show full processlist 1 row in set (0.00 sec) ERROR: No query specified

データベースの設定に関してはLaravel5.5のデフォルトのまま使っています
config > database.phpの
'database'
'username'
'password'
はデータが入らなかったことから.envファイルの内容に合わせて書き換えました。書き換えてもデータは入りませんでした

###該当のソースコード
データの登録フォームはこのようにしています

<form action="{{ route('admin.signup') }}" method="post" class="form-horizontal" style="margin-top: 50px;"> {{ csrf_field() }} <div class="form-group"> <label class="col-sm-3 control-label" for="InputName">氏名</label> <div class="col-sm-9"> <input type="text" name="admin_name" class="form-control" id="InputName" placeholder="氏名"> <!--/form-group--></div> <div class="form-group"> <label class="col-sm-3 control-label" for="InputTel">PW</label> <div class="col-sm-9"> <input type="password" name="password" class="form-control" id="InputTel" placeholder="パスワード"> </div> <!--/form-group--></div> <div class="form-group"> <label class="col-sm-3 control-label" for="InputTel">郵便番号</label> <div class="col-sm-9"> <input type="number" name="postal_code" class="form-control" id="InputTel" placeholder="郵便番号"> </div> <!--/form-group--></div> <div class="form-group"> <label class="col-sm-3 control-label" for="InputPassword">住所</label> <div class="col-sm-9"> <input type="text" name="street_adress" class="form-control" id="InputPassword" placeholder="住所"> </div> <!--/form-group--></div> <div class="form-group"> <label class="col-sm-3 control-label" for="InputTel">電話番号</label> <div class="col-sm-9"> <input type="number" name="telephone_number" class="form-control" id="InputTel" placeholder="電話番号"> </div> <!--/form-group--></div> <div class="form-group"> <div class="col-sm-offset-3 col-sm-9"> <button type="submit" class="btn btn-primary btn-block">新規登録</button> </div> <!--/form-group--></div> </form>

コントローラーです(use App\Admin;を読み込んで使っています)

public function getSignup(){ return View ('admin.signup'); } public function postSignup(Request $request){ // バリデーション $this->validate($request,[ 'admin_code' => 'required|max:6|integer', 'password' => 'required|max:45', 'admin_name' => 'required|max:45', 'postal_code' => 'required|max:8|integer', 'street_adress' => 'required|max:800', 'telephone_number' => 'required|max:13|integer' ]); //ランダムでユニークなIDを生成 $admin_code = uniqid(rand(1,6)); $admin = new Admin([ 'admin_code' => $request->input($admin), 'password' => $request->input('password'), 'admin_name' => $request->input('admin_name'), 'postal_code' => $request->input('postal_code'), 'street_adress' => $request->input('street_adress'), 'telephone_number' => $request->input('telephone_number') ]); //保存 $admin->save(); //リダイレクト return redirect()->route('admin.profile'); } public function getProfile(){ return view('admin.profile'); }

モデルとマイグレーションファイルです

<?php namespace App; use Illuminate\Database\Eloquent\Model; class Admin extends Model { protected $fillable = [ 'admin_code','password','admin_name', 'postal_code', 'street_adress','telephone_number', ]; }
public function up() { Schema::create('admins', function (Blueprint $table) { $table->string('admin_code', 6)->unique('admin_code_UNIQUE')->comment('管理者コード管理者毎に付与ランダム英数字6桁'); $table->string('password', 45)->comment('パスワード'); $table->string('admin_name', 45)->comment('管理社名'); $table->string('postal_code', 8)->nullable()->comment('郵便番号'); $table->string('street_adress', 800)->nullable()->comment('住所'); $table->string('telephone_number', 13)->nullable()->comment('電話番号'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('admins'); }

ルートです

Route::group(['prefix' => 'admin'], function() { Route::get('/signup', 'AdminController@getSignup')->name('admin.signup'); Route::post('/signup', 'AdminController@postSignup')->name('admin.signup'); Route::post('/profile', 'AdminController@getProfile')->name('admin.profile'); });

自分では原因になりそうなところに気がつくことができませんでした
この設定は終わっているか?こう言うテストをすると問題の切り分けができるなど何かありましたらご指摘お願いいたします

###補足情報(言語/FW/ツール等のバージョンなど)
Laravel5.5
DB = Mysql
PC Mac
PHP 7.0.26

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

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

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

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

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

guest

回答2

0

ベストアンサー

すいません。ざっと眺めただけなので、直らないかもしれませんが…

その1(Controller)
admin_codeの設定内容がおかしい

php

1 $admin = new Admin([ 2 //'admin_code' => $request->input($admin), 3 'admin_code' => $admin_code,//生成しているのに使っていない? 4 'password' => $request->input('password'), 5 'admin_name' => $request->input('admin_name'), 6 'postal_code' => $request->input('postal_code'), 7 'street_adress' => $request->input('street_adress'), 8 'telephone_number' => $request->input('telephone_number') 9 ]);

その2(Model)
primary_keyの設定がされていない。

php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Admin extends Model 8{ 9 // プライマリキー設定 10 protected $primaryKey = 'admin_code'; 11 public $incrementing = false; 12 13 protected $fillable = [ 14 'admin_code','password','admin_name', 'postal_code', 'street_adress','telephone_number', 15 ]; 16 17}

追記

後は、divタグの閉じ忘れがありましたね。

html

1 <div class="form-group"> 2 <label class="col-sm-3 control-label" for="InputName">氏名</label> 3 <div class="col-sm-9"> 4 <input type="text" name="admin_name" class="form-control" id="InputName" placeholder="氏名"> 5 </div><!-- ここが無かった! --> 6 <!--/form-group--></div>

さらに追記

すいません。ちゃんと見ました(苦笑)
直接の原因としては、validationで引っかかっていて元の画面にredirectされているだけでした。
まず、ご自身のbladeに下記のコードを追記してみてください。
これにより、エラー内容が見られるようになります。

html

1@if (count($errors) > 0) 2 <div class="alert alert-danger"> 3 <ul> 4 @foreach ($errors->all() as $error) 5 <li>{{ $error }}</li> 6 @endforeach 7 </ul> 8 </div> 9@endif

こうすると、こんな感じでいくつかのエラーが出てきます。

The admin code field is required.

The postal code may not be greater than 8.
The telephone number may not be greater than 13.
The telephone number must be an integer.

これが出ていなかったので、単純にリダイレクトされた時のエラーに気づかなかったのでしょう。

というわけで、validationを直しましょう。
ちなみに、maxは数値の場合には、単純に入力された数字がmax以下かどうかを判定します。(桁数ではないです!)
その為、郵便番号を入れてもエラーとなってしまいます。
私のvalidationの修正案です。ご自身のやりたいことに合わせて調整してください。

php

1 $this->validate($request,[ 2// 'admin_code' => 'required|max:6|integer', 3 'password' => 'required|max:45', 4 'admin_name' => 'required|max:45', 5 'postal_code' => 'required|digits:7', 6 'street_adress' => 'required|max:800', 7 'telephone_number' => 'required|digits_between:10,11' 8 ]);

あと、migrationにはtimestampが無かったので、必要ないのであれば、Modelに

public $timestamps = false;

を追記して下さい。
また、uniqidは13桁でしかデータを作れないので、6桁に合わせるなら

php

1$admin_code = rand(1,6);

とするか、データベースの桁数を13桁に拡張しましょう。

これでデータの登録はできるはずです。

投稿2017/12/21 04:28

編集2017/12/21 06:15
motuo

総合スコア3027

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

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

lkjgffh

2017/12/21 04:55

admin_codeの変数間違い気がつきませんでした。ご指摘ありがとうございます。ご指摘いただきました箇所の修正をしましたが、以前うまくPostされないので他の箇所も見直します。 プライマリーキーの設定のご指摘もありがとうございました
motuo

2017/12/21 05:12

bladeの誤りも追記しました。
lkjgffh

2017/12/21 05:21

見つけてくださってありがとうございます
motuo

2017/12/21 06:09

すいません。ちゃんとプログラムをみました。 回答を追記したので、ご確認下さい。
lkjgffh

2017/12/21 07:36

上記のようにエラーを出せばよかったんですね! バリデーションは公式を見ながら書いたのですが、いまいち説明を理解しないままこんな感じなのだろうか・・・? と言うようにやってしまったので(汗) 無事登録することができました。セキュリテー面なども踏まえ、今後バリデーションなどを書き込んでいきたいと思います。 なんどもありがとうございました
guest

0

下記を確認してみてください。

・envファイルにDBの状態は正しくかかれていますか?

・Adminモデルにテーブル名が指定されていませんので、この場合使われるテーブル名は「admins」になります。テーブル名は「admins」になっていますか?

・上記2点が問題なければ、下記のコードで動くか試してみてください。

$data = [ 'admin_code' => $request->input($admin_code), 'password' => $request->input('password'), 'admin_name' => $request->input('admin_name'), 'postal_code' => $request->input('postal_code'), 'street_adress' => $request->input('street_adress'), 'telephone_number' => $request->input('telephone_number') ]; $admin = new Admin(); $admin->insert($data);

【追記】
motuoさんのおっしゃる通り、 $adminではなく$admin_codeですね。

投稿2017/12/21 04:32

編集2017/12/21 04:35
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

lkjgffh

2017/12/21 05:11

コメントくださいましてありがとうございます envファイルの設定はおそらく問題ないかと思います モデルに対してDBで確認したテーブルを指定し、上記のコードを試して見ましたがデータベースでデータが格納されていることは確認できませんでした。
退会済みユーザー

退会済みユーザー

2017/12/21 05:33

テーブル名は「admins」だったということですよね?ではカラム名と配列のキーは完全に一致してますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問