【问题标题】:laravel pass data from blade file to Controllerlaravel 将数据从刀片文件传递到控制器
【发布时间】:2016-06-25 13:56:52
【问题描述】:

我正在尝试将用户输入到表单中的数据、在刀片中创建的数据传输到我的控制器。那时我可以使用控制器中的函数将数据写入 MySQL。

这是我的刀片文件中的表单代码。

<form action="{{ route("users") }}" method="post">

<input type ="form" id="firstname"> firstname </input> <br>
<input type ="form" id="lastname"> lastname </input> <br>
<input type="form" id="email"> email </input> <br>
<input type="form" id="userlevel"> userlevel </input> <br>
<input type="form" id="password"> password </input> <br>


<br> <br>
<button type="submit"> Submit
</button>
</form>

这是我的控制器中将数据写入 MySQL 的代码。当我使用虚拟数据而不是 $name$lastname 变量时,该代码有效。

public function users()
{
    $name = $_POST["firstname"];
    $lastname = $_POST["lastname"];

    DB :: table("newUsers") -> insertGetId
    (
        array("firstname" => $name, "lastname" => $lastname, "email" => "test")
    );

    return view("pages.users");
}

我目前收到一条错误消息,提示

未定义索引:名字

理想情况下,我希望将用户输入的名字和姓氏写入我的 MySQL 表中。

【问题讨论】:

    标签: php html mysql laravel blade


    【解决方案1】:

    您需要在输入中添加name 属性并正确格式化它们,它们应该看起来更像:

    <input type="text" id="firstname" name="firstname"></input>
    

    如果您在打开和关闭输入标记之间放置“名字”以获取占位符值,请改用占位符属性。

    <input type="text" id="firstname" name="firstname" placeholder="first name"></input>
    

    但请注意,占位符属性在 older browsers 中不起作用

    也不要使用$_POST laravel 内置了从表单中获取值的方法。

    Laravel 5

    $request->input('firstname');
    

    像这样:

    public function users(Request $request)
    {
        $name = $request->input('firstname'); // This is better than using $_POST
        $lastname = $request->input('lastname');
    
        DB :: table("newUsers") -> insertGetId
        (
            array("firstname" => $name, "lastname" => $lastname, "email" => "test")
         );
    
        return view("pages.users");
    }
    

    注意,我已经像users 方法中的变量一样传入了Request $request。您还需要将use Illuminate\Http\Request as Request; 添加到班级顶部:

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request as Request; //here
    
    class MyController extends Controller
    {
    }
    

    Laravel 4

    Input::get('firstname');
    

    【讨论】:

      【解决方案2】:

      如下更改您的表单:

      <form action="{{ route("users") }}" method="post">
        <input type ="form" name=firstname" id="firstname" placeholder="First name"> 
        <input type ="form" name=lastname" id="lastname">
        <input type="form" name="email" id="email">
      
        <button type="submit"> Submit </button>
      </form>
      

      您必须为表单字段提供name 属性。

      并且在控制器中,您不必再使用$_POST

      只需使用:

      public function users(Request $request)
      {
         $firstname = $request->input('firstname');
         $lastname = $request->input('lastname');
      
          DB :: table("newUsers") -> insertGetId(
             array("firstname" => $name, "lastname" => $lastname, "email" => "test")
          );
          return view("pages.users");
       }
      

      【讨论】:

        【解决方案3】:

        例如,您可以使用$request-&gt;get('first_name') 访问表单数据。

        要使其工作,请将name 标签添加到您的表单inputs 并捕获数据,例如,如果您使用存储操作:

        function store(Request $request){
        
        }
        

        在这种情况下,您还可以easily 使用自定义 Reuqest 类验证输入数据: https://laravel.com/docs/master/validation#form-request-validation

        【讨论】:

          猜你喜欢
          • 2019-04-13
          • 2017-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-31
          • 2019-12-19
          • 2019-11-13
          • 1970-01-01
          相关资源
          最近更新 更多