为什么没有使用controller @ store方法存储数据

时间:2019-03-30 03:32:22

标签: php html laravel

我从控制器使用了方法存储,而数据没有存储在数据库中。

我想在本机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');

这是我的Article模型:

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

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

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

然后重定向到我的视图addarticle,但数据库中未添加任何内容。

4 个答案:

答案 0 :(得分:0)

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

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

您应该在控制器中添加一条通往store方法的路由,以便在提交表单时,数据将被传递到您的控制器中。

此外,提供指向您的localhost的链接也无法帮助我们理解您的问题,因为我们无法访问它。可靠的屏幕截图即可。

答案 1 :(得分:0)

Yaa您显然错过了csrf令牌以与表格一起传递。如果要在Laravel中冒用任何形式,则应传递csrf令牌。

使用@csrf和Blade将唯一令牌传递给表单Submit

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 :(得分:0)

您应该根据资源模式进行操作。

您的 web.php

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

您的表单:

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

您还应该包括@csrf刀片指令。

在您的控制器中:

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,并且您的articles表中也没有此列。因此,您必须删除以下行:

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

答案 3 :(得分:0)

尝试一下:希望对您有所帮助。

控制器

My Keyword That Accepts Optional List
    [Arguments]    ${the_list}=${None}

    ${the default value}=    Create List   member0    the other one
    ${the_list}=    Set Variable If    $the_list is None    ${the default value}    # no argument passed when the keyword was called
                            ...        ${the_list}    # an argument was passed, leave the variable as it was

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

public function store(Request $request)
{
    $articleObj = new article;
    $articleObj->add($request);

    //second table
    $employerObj = new Employer();
    $employerObj->add($request);
}