【问题标题】:Why data isn't storing with controller@store method为什么数据不使用 controller@store 方法存储
【发布时间】:2019-03-31 12:16:51
【问题描述】:

我使用了来自控制器的方法存储,但数据没有存储在我的数据库中。

我想在原生 HTML 表单中的三个表格中插入 NOM_ARTICLEPHOTO_ARTICLETYPEDESCRIPTION_ARTICLE,但我不知道该怎么做。

我正在使用 ArticleController,其中有一个方法 store 和三个表模型。

public function create()
{
    return view('addarticle');
}

public function store(Request $request)
{
    $article = new article;
    $article->NOM_ARTICLE = $request->NOM_ARTICLE;
    $article->LABEL_TYPE = $request->LABEL_TYPE;
    $article->PHOTO_ARTICLE = $request->PHOTO_ARTICLE;
    $article->DESCRIPTION_ARTICLE = $request->DESCRIPTION_ARTICLE;
    $article->save();

    return redirect()->route('addarticle');
}

这是我的数据库表:

article ('ID_ARTICLE','NOM_ARTICLE','ID_TYPE,'DESCRIPTION_ARTICLE')
photo_articles('ID_PHOTO','ID_ARTICLE','PHOTO_ARTICLE') 
type('ID_TYPE','TYPE')

我的 HTML 表单:

<form method="post" action="" class="contact_form text-center" id="contact_form">
  <div class="">
    <div class="col-lg-4">
      <input type="text" class="contact_input" name="NOM_ARTICLE" placeholder="Nom d'article" required="required">
    </div>
    <br/>
    <div class="col-lg-4">
      <input type="text" class="contact_input" name="ID_TYPE" placeholder="Type d'article" required="required">
    </div>
    <div>  
      <input type="hidden" name="MAX_FILE_SIZE" value="250000" />
      <input type="file" class="contact_input" name="PHOTO_ARTICLE" placeholder="Capture de votre article" name="fic" size=50 required="required" />
      <!--  <input type="submit" value="Envoyer" /> -->
    </div>

  </div>
  <textarea class="contact_textarea contact_input" name="DESCRIPTION_ARTICLE"placeholder="Description" required="required"></textarea>
  <button class="contact_button" type="submit">Valider!</button>
</form>

我在 web.php 中有我的路线:

Route::resource('addarticle','ArticleController');

这是我的文章模型:

<?php
  namespace App;
  use Illuminate\Database\Eloquent\Model;

  class article extends Model {
    public $table = 'article';
    public $primaryKey ='ID_ARTICLE';
    return $this->belongsTo('photo_articles');
  }

单击提交按钮后,它会显示如下 URL:http://localhost/testprojet/public/addarticle?NOM_ARTICLE=test&ID_TYPE=book&MAX_FILE_SIZE=250000&PHOTO_ARTICLE=villle+icon.jpg&DESCRIPTION_ARTICLE=ss

并重定向到我的视图addarticle,但数据库中没有添加任何内容。

【问题讨论】:

  • 请问您可以添加article 模型中的代码吗?
  • 这是我的文章模型:belongsTo('photo_articles'); }

标签: php html laravel


【解决方案1】:

Yaa 你显然错过了通过表单传递的 csrf 令牌。如果你想在 Laravel 中提交任何表单,你应该传递 csrf 令牌。

使用@csrf,blade 会将唯一令牌传递给表单提交

https://laravel.com/docs/5.8/csrf

例子:

<form method="post" action="" class="contact_form text-center" id="contact_form">
    @csrf
    <div class="">
        <div class="col-lg-4">
            <input type="text" class="contact_input" name="NOM_ARTICLE" placeholder="Nom d'article" required="required">
        </div>
        <br/>
        <div class="col-lg-4">
            <input type="text" class="contact_input" name="ID_TYPE" placeholder="Type d'article" required="required">
        </div>
        <div>
            <input type="hidden" name="MAX_FILE_SIZE" value="250000"/>
            <input type="file" class="contact_input" name="PHOTO_ARTICLE" placeholder="Capture de votre article" name="fic" size=50 required="required"/>
            <!--  <input type="submit" value="Envoyer" /> -->
        </div>

    </div>
    <textarea class="contact_textarea contact_input" name="DESCRIPTION_ARTICLE" placeholder="Description"
              required="required"></textarea>
    <button class="contact_button" type="submit">Valider!</button>
</form>

【讨论】:

    【解决方案2】:

    我从您的form 看到的是,您没有在其中进行任何操作,只是将其留空:

    <form method="post" action="" class="contact_form text-center" id="contact_form">
    

    你应该在你的控制器中添加一个路由到你的store 方法,这样当表单被提交时,数据就会被传递到你的控制器中。

    此外,提供指向您的localhost 的链接并不能帮助我们了解您的问题,因为我们无法访问它。一个完整的屏幕截图就可以了。

    【讨论】:

    • 屏幕截图显示他将我重定向到“addarticle”,没有错误显示我发布的 url,这意味着他使用了函数存储,但数据库中没有任何存储
    【解决方案3】:

    你应该根据资源模式来放置动作。

    您的 web.php

    Route::resource('articles','ArticleController');
    

    您的表格:

    <form method="post" action="{{route('articles.store')}}" class="contact_form text-center" id="contact_form">
    @csrf
    

    您也应该包含@csrf Blade 指令。

    在你的控制器中:

    public function store(Request $request)
    {
        $article = new Article();
        $article->NOM_ARTICLE = $request->NOM_ARTICLE;
        $article->DESCRIPTION_ARTICLE = $request->DESCRIPTION_ARTICLE;
        $article->save();
    
        return redirect()->route('addarticle');
    }
    

    您将PHOTO_ARTICLE 添加到文章中,但您的文章表中没有您所说的此列,因此使用下面的行没有意义:

    $article->PHOTO_ARTICLE = $request->PHOTO_ARTICLE;
    

    此外,您的请求中没有收到任何LABEL_TYPE,并且您的文章表中也没有此列。所以你必须删除这一行:

    $article->LABEL_TYPE = $request->LABEL_TYPE;
    

    【讨论】:

    • 感谢您首先回答,我只想补充一点,我必须根据我创建的三个模型将表单中的数据添加到三个表中
    【解决方案4】:

    试试这个:希望对你有帮助。

    控制器

    public function store(Request $request)
    {
        $articleObj = new article;
        $articleObj->add($request);
    
        //second table
        $employerObj = new Employer();
        $employerObj->add($request);
    }
    

    根据您的数据表创建三个模型并将此代码粘贴到所有。

    function add($request)
    {
        $this->NOM_ARTICLE = $request->NOM_ARTICLE;
        $this->LABEL_TYPE = $request->LABEL_TYPE;
        $this->PHOTO_ARTICLE = $request->PHOTO_ARTICLE;
        $this->PHOTO_ARTICLE = $request->PHOTO_ARTICLE;
        $this->save();
    
        return $this->id;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 2022-11-23
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 2016-06-21
      相关资源
      最近更新 更多