Laravel 从视图中的表单填充数据库表并将其显示在同一视图中

Posted

技术标签:

【中文标题】Laravel 从视图中的表单填充数据库表并将其显示在同一视图中【英文标题】:Laravel fill DB table from form in view and display it back on the same view 【发布时间】:2018-06-19 09:34:49 【问题描述】:

我是 Laravel 框架的新手,我正在尝试构建一个工具来管理数据库。我已经创建了我的表格并且我设法从视图中填充它,我没有得到的是将表格显示回视图。我构建了两个函数,一个只显示表单'Project_create@showpform',另一个应该使用插入的数据'Project_create@showtable' 更新同一视图。我收到错误消息:"Undefined variable: project_data (View:/var/www/tcc/src/resources/views/form_project.blade.php)"

在这里你可以看到我的路线:

Route::get('/', 'DataController@overview');

Route::get('/myproject', 'Project_create@showpform');
Route::post('/myproject', 'Project_create@showtable');

Route::get('/upload','DataController@showform');
Route::post('/upload', 'DataController@read_xsl');

Route::get('/scrape', 'DataController@scrape');

这是我的Project_createcontroller:

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;

class project_create extends Controller

    public function showpform()
    
        return view('form_project');
    

    public function showtable(Request $request)
    
        $name = $request->input('name');
        $description = $request->input('description');

        \DB::table('projects')->insert(
            [
                'project_id' => 1,
                'name' => $rawUrl,
                'description' => $hashedUrl,
                'created_at' =>  \Carbon\Carbon::now(),
            ]);

        $project_data = \DB::table('projects')->select('*')->get();
        return View::make('form_project', compact('project_data'));
    

这是我的观点:

<html lang="en">
    <head>
        <title>File Upload</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
        <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
    </head>
<body>

    <div class="container">
        <h3 class="jumbotron">Create here your project</h3>

        <form class="w3-container w3-light-grey" action=action('DataController@showform') enctype="multipart/form-data">
        csrf_field()
            <p>
            <label>Project Name</label>
            <input class="w3-input w3-border w3-round" name="name" type="text"></p>
            <p>
            <label>Project Description</label>
            <input class="w3-input w3-border w3-round" name="description" type="text"></p>

        <button type="submit" class="btn btn-primary" style="margin-top:10px">Create Project</button>
        </form>

    </div>

    <table>
        <thead>
            <tr>
                <th> id</th>
                <th> name</th>
                <th> description</th>
                <th> created_at </th>
            </tr>
        </thead>
        <tbody>
             @foreach($project_data as $data)
              <tr>
                  <td> $data->id </td>
                  <td> $data->name </td>
                  <td> $data->description </td>
                  <td> $data->created_at </td>
              </tr>
             @endforeach
       </tbody>
   </table>


</body>
</html>

感谢您的帮助。

【问题讨论】:

【参考方案1】:

你的视图有一行

@foreach($project_data as $data)

但是当你打电话时

public function showpform()

你没有通过

$project data

喜欢

public function showtable(Request $request)

....

return View::make('form_project', compact('project_data'));

在 Blade 文件中添加 isset 函数。例如

@if(isset($project_data)) @foreach($project_data as $data) <tr> <td> $data->id </td> <td> $data->name </td> <td> $data->description </td> <td> $data->created_at </td> </tr> @endforeach @endif

【讨论】:

感谢@if 声明,它解决了我的问题。在public function showpform() 中,我不是简单地添加了$project data,而是return view('form_project', [ 'project_data' =&gt; \DB::table('projects')-&gt;select('*')-&gt;get(), ]); 以这种方式有效!

以上是关于Laravel 从视图中的表单填充数据库表并将其显示在同一视图中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中将变量从视图传递到控制器而不使用 URL 或表单

Laravel 4 从数据库中获取下拉表单的信息

如何为表单输入分配默认值 - Laravel 8

使用“锁定”截断/填充从 Oracle 中的视图填充表

Laravel 4 - 表单提交以更新 MySQL 表

如何从Laravel中的数据库记录中填充下拉菜单项