LoginSignup
ao711
@ao711

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

laravel 新規登録遷移

解決したいこと

新規登録ボタンを押した際画面遷移しない

例)
laravelで商品一覧画面等作成しております。
新規登録ボタンを押した際画面遷移しない理由がわからず
解決方法を教えて下さい。

発生している問題・エラー

画面遷移しない。新規登録画面へ切り替わらない。
controller

//新規登録画面regist
   public function Regist(Request $request){
    $productes_model= new Productes();
    $productes = $productes_model->Regist();
    $company_model= new Companies();
    $companies = $company_model->getAll();
    return view('regist', ['productes' => $productes,'companies' => $companies]);
   }
   
  //新規登録処理
  public function Registform(){
    return view('list');
   }
     public function registsubmit(Request $request){
       DB::beginTransaction();
       try {
       $model = new Productes();
       $model->registsubmit($request);
       DB::commit();
       } catch (\Exception $e) {
           DB::rollback();
           return back();
       }
       return redirect()->route('list');
     }

例)

@extends('app')

@section('title','商品新規登録')

@section('content')
    <div class="container">
        <div class="row">
        <link href="{{ asset('css/app.css') }}" rel="stylesheet">
        <h1>商品新規登録画面</h1>
            
            <form action="{{ route('submit') }}" method="post" enctype='multipart/form-data'>
              @csrf
               <table>
                <tr>
                <div class="form-group">
                    <td><label for="product_name">商品名*</label></td>
                    <td><input type="text" class="form-inline"id="product_name" name="product_name"></td>
                </div>
                </tr>
                <tr>
                <div class="form-group">
                    <td><label for="company_id">メーカー名*</label></td>
                    <td><select class="company_id" id="company_id" name="company_id">
                    
                        @foreach($companies as $company)
                        <option value="{{ $company -> id }}">{{ $company -> company_name }}</option>
                        @endforeach
                    </select> </td>
                </div>
                </tr>
                <tr>
                <div class="form-group">
                    <td><label for="price">価格*</label></td>
                    <td><lavel><input type="text" class="form-inline"id="price" name="price"></td> 
                </div>
                </tr>
                <tr>
                <div class="form-group">
                    <td><label for="stock">在庫数*</label></td>
                    <td><input type="text" class="form-inline"id="stock" name="stock"></td>
                </div>
                </tr>
                <tr>
                <div class="form-group">
                    <td><label for="comment">コメント</label></td>
                    <td><input textarea type="text" class="form-inline"id="comment" name="comment"></textarea></td>
                </div>
                </tr>
                <tr>
                <div class="form-group">
                    <td><label for="img_path">商品画像</label></td>
                    <form action="route('regist')" method="GET" enctype='multipart/form-data'>
	                <td><input type="file" name="image"></form></td>
                </div>
                </tr>
                <div>
                
                <a href="{{ route('list') }}" method="get">
                    <td><button type="submit" class="btn btn-primary">新規登録</button></td>
                    <td><button type="button" onClick="history.back()">戻る</button></td>
               
                </table>
            </form>
        </div>
    </div>
@endsection

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード モデル

 //新規登録画面regist
    public function Regist() {
        $productes = DB::table('productes')->get();
        return $productes;
    }
    //新規登録画面regist
    public function RegistForm() {
        return $productes;
    }
    //新規登録処理
    public function registsubmit($request){
       DB::table('productes')->insert([
        'product_name' => $request->input('product_name'),
        'company_id' => $request->input('company_id'),
        'price' => $request->input('price'),
        'stock' => $request->input('stock'),
        'comment' => $request->input('comment'),
        'img_path' => $request->input('image'),
        ]);
     }

例)
web.php

Route::get('/registform', [App\Http\Controllers\ProductesController::class, 'Registform'])->name('registform');
Route::post('/submit', [App\Http\Controllers\ProductesController::class, 'registsubmit'])->name('submit');

自分で試したこと

画面遷移させるにはどこに原因があるかわからない為詳しい方がおられましたらお力添えをいただきたいです。

0

「画面遷移しない」といっても、2つのパターンが考えられます。

  • ボタンやリンクが動作しない(リクエストが発生しない)クライアントサイドの問題
  • リクエストが発生するものの、同じ画面に戻ってきているサーバーサイドの問題

まずはどちらの問題なのか切り分ける必要があります。
例えばブラウザの開発者ツールでリクエストの様子を観察したり、サーバーサイドのログなどを確認します。

現時点で気になるのは、データベースエラーが発生しているケースです。下記のコードのreturn back();している箇所ですね。
こういった部分も含めて、ログを出力などしてひとつずつ確認していくことが大切です。

     public function registsubmit(Request $request){
       DB::beginTransaction();
       try {
       $model = new Productes();
       $model->registsubmit($request);
       DB::commit();
       } catch (\Exception $e) {
           DB::rollback();
           return back();
       }
       return redirect()->route('list');
     }

参考

0

質問以前にモデルの使い方を完全に間違っていてLaravelのことを何一つ理解してない。

ここもhtmlレベルで破綻している。

<a href="{{ route('list') }}" method="get">
                    <td><button type="submit" class="btn btn-primary">新規登録</button></td>
                    <td><button type="button" onClick="history.back()">戻る</button></td>

こんな壊れたhtmlは誰も書かないので新規登録ボタン押してもどうなるかは分からない。
aが有効でroute('list')に移動してるだけかもしれない。

ここまで意味不明すぎる質問は回答しようがないのでhtmlから勉強のやり直しが必要。
htmlも理解してない初心者がLaravelを使うのは絶対に不可能。
小学生でもできるコピペで真似するだけの段階。頭で理解してコードを書いてない。

0

まず、この内容は意見交換ではなくQ/Aです。
加えて、少しは自分で調べてからしましょう。

0

Your answer might help someone💌