为什么我的存储方法没有将表单输入保存到数据库中?

时间:2020-09-16 14:32:40

标签: php html laravel

我需要一些真正的快速帮助,它与我在ProductController @ store中的存储方法有关。基本上,我有一个表格createProduct.blade.php,该表格允许用户添加产品,名称,图像,描述和链接。然后,ProductController @ store拾取表单输入数据并将其保存在数据库中。现在我的问题是数据没有保存在数据库中,视图也没有返回到/ pr,即我的productManagement.blade.php页面,并且在运行代码时没有显示错误消息。单击提交后,当前输出只是一个空白表格。我希望输出是存储在数据库中的表单输入数据,并将用户重定向到/ pr。我已经包含了一些代码,我认为这应该引起这个严重的头痛问题。

ProductController @ store

boot

createProduct.blade.php

public function store(Request $request)
{
    $this->validate($request, [
        'input_img' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
    ]);
    if ($request->hasFile('input_img')) {
        $image              = $request->file('input_img');
        $name               = time().'.'.$image->getClientOriginalExtension();
        $destinationPath    = public_path('/images');
        $image->move($destinationPath, $name);
        $this->save();
    }
    $data = request()->validate([
        'productName'        => 'required',
        'productLink'        => 'required',
        'productPrice'       => 'required',
        'productDescription' => 'required',
    ]);
    $product = new Product([
        'productName'        => $request->get('productName'),
        'productLink'        => $request->get('productLink'),
        'productPrice'       => $request->get('productPrice'),
        'productDescription' => $request->get('productDescription')
    ]);
    $product->save();
    return redirect('/pr');
}

web.php

<form action="/storeProduct" method="post">
@csrf
  <label for="productName">Product Name:</label><br>
  <input type="text" id="productName" name="productName" autocomplete="off" value="{{ 
old('productName') }}"><br>
  @error('productName') <p style="color: red">{{ $message }}</p> @enderror
  <label for="productImage">Product Image:</label><br>
  <input type="file" id="productImage" name="productImage" autocomplete="off" value="{{ 
old('productImage') }}"><br>
  @error('productImage') <p style="color: red">{{ $message }}</p> @enderror
  <label for="productLink">Product Link:</label><br>
  <input type="text" id="productLink" name="productLink" autocomplete="off" value="{{ 
old('productLink') }}"><br>
  @error('productLink') <p style="color: red">{{ $message }}</p> @enderror
  <label for="productPrice">Product Price:</label><br>
  <input type="decimal" id="productPrice" name="productPrice" autocomplete="off" value="{{ 
old('productPrice') }}"><br>
  @error('productPrice') <p style="color: red">{{ $message }}</p> @enderror
  <label for="productDescription">Product Description:</label><br>
  <input type="text" id="productDescription" name="productDescription" autocomplete="off" value=" 
   {{ old('productDescription') }}"><br>
      @error('productDescription') <p style="color: red">{{ $message }}</p> 
@enderror
      <input type="submit" value="Submit">
    </form>

是的,我不知道为什么这不起作用。我从另一个有41个upvotes问题的堆栈溢出问题中读取了用于存储图像的解决方案,所以idk为什么该解决方案适用于除我以外的所有人...。感谢您的阅读和帮助。

1 个答案:

答案 0 :(得分:0)

请在您的视图(createProduct.blade.php)上尝试以下代码

    <form action="/storeProduct" method="post" enctype='multipart/form-data'>

别忘了调用位于控制器(ProductController)顶部的数据库模型(Product)

    use App\Product;

如果它不起作用,请尝试更改验证格式。 (这适用于我,而且空白页没有错误)

    $request->validate([
        'input_img' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
    ]);