Php “使”按钮将数据发送到数据库(重新加载时可用空白页?)

Php “使”按钮将数据发送到数据库(重新加载时可用空白页?),php,laravel,Php,Laravel,我有一个CRUD系统,允许用户创建、编辑和删除他们自己的社交组。然后,这些组将显示在公共页面上,其他用户可以查看和加入社交组 create_group系统工作正常,组显示在公共页面上。信息存储在数据库表组中 我希望用户能够单击“加入组”按钮,并在数据库中记录组标题 这样一来,他们就可以从仪表板上查看后来加入的组 我不是100%确定如何去做,因为我是新的编码。我的直觉是创建另一个CRUD系统,称为Join,但这可能是过度杀戮吗 我采取了以下步骤: 已创建名为“联接”的数据库表 创建了与“创建组”C

我有一个CRUD系统,允许用户创建、编辑和删除他们自己的社交组。然后,这些组将显示在公共页面上,其他用户可以查看和加入社交组

create_group
系统工作正常,组显示在公共页面上。信息存储在数据库表

我希望用户能够单击“加入组”按钮,并在数据库中记录组标题

这样一来,他们就可以从仪表板上查看后来加入的组

我不是100%确定如何去做,因为我是新的编码。我的直觉是创建另一个CRUD系统,称为Join,但这可能是过度杀戮吗

我采取了以下步骤:

  • 已创建名为“联接”的数据库表

  • 创建了与“创建组”CRUD相同的CRUD系统。我想我不会使用这个CRUD的编辑或创建功能

  • 我将此按钮放置在公共组可查看页面上:

  • 
    
    单击按钮时发生了一些非常奇怪的事情,它将我带到正确的页面
    http://version2.test/join
    但页面为空白,显示

    页面过期

    错误。但是,如果我刷新页面,甚至将URL复制到新页面,它将正确显示

    此外,在查看
    http://version2.test/join
    ,我看不到显示的组标题

    更新#1-然后我在按钮上添加了@csrf,如下所示:

    
    @csrf
    
    起初,我认为这可以修复“页面过期”错误,但后来意识到它没有。“加入组”按钮仍指向
    http://version2.test/join
    但页面显示“页面已过期”错误。但是,如果我刷新页面,甚至将URL复制到新页面,它将正确显示

    JoinController.php

    
    第419页

    这意味着路由
    join.store
    位于
    VerifyCsrfToken
    中间件下,该中间件可保护您的应用程序免受跨站点请求伪造攻击,并且发布的表单数据没有(或无效)令牌
    \u

    你需要做的就是添加一个CSRF令牌,而且你没有发布任何东西,所以你可以从验证中得到一个重定向

    <form method="post" action="/test">
        @csrf
        <input type="hidden" name="group_title" value="{{ $group->group_title }}">
        <input type="submit" value="Join Group" class="btn btn-success" />
    </form>
    
    另一个选项是在中间件中禁用路由保护(这对于使用Postman的API测试很有用)

    不要这样做

    
    第419页

    这意味着路由
    join.store
    位于
    VerifyCsrfToken
    中间件下,该中间件可保护您的应用程序免受跨站点请求伪造攻击,并且发布的表单数据没有(或无效)令牌
    \u

    你需要做的就是添加一个CSRF令牌,而且你没有发布任何东西,所以你可以从验证中得到一个重定向

    <form method="post" action="/test">
        @csrf
        <input type="hidden" name="group_title" value="{{ $group->group_title }}">
        <input type="submit" value="Join Group" class="btn btn-success" />
    </form>
    
    另一个选项是在中间件中禁用路由保护(这对于使用Postman的API测试很有用)

    不要这样做


    如果这是一个表单,您可以检查

    'group_title' => $request->get('group_title')
    
    进入

    在你的
    存储中
    方法就可以做到这一点

    由于此字段是必需的,并且您没有收到错误,因此数据将传递给您的操作。检查是否有效


    如果这是一个表单,您可以检查是否更改

    'group_title' => $request->get('group_title')
    
    进入

    store
    方法中,将实现这一功能

    由于此字段是必需的,并且您没有收到错误,因此数据将传递给您的操作。检查是否有效


    我认为
    csrf
    在这里不是问题,因为他的表单已经有
    @csrf
    blade指令,除非laravel版本低于5.6。@Caddy DZ非常有效,谢谢。我现在正在查看页面,但我没有看到显示组标题,并且数据库是空的。我开始想,也许我不应该创建一个名为“Join”的表,而应该创建一个名为“groups\u ive\u Join”的现有“Users”表的字段?@MateusJunges CSRF位于
    group\u Join.destroy
    路径中,但他在第一个表单
    Join.store中缺少它。我已经从表单中删除了CSRF,并将其插入到了`join.store``并指向空页。将其插入到
    join.store
    中是什么意思?用更改更新您的问题,我将用插入数据库的工作代码更新它。我认为
    csrf
    不是这里的问题,因为他的表单已经有
    @csrf
    blade指令,除非laravel版本低于5.6。@Caddy DZ工作顺利,谢谢。我现在正在查看页面,但我没有看到显示组标题,并且数据库是空的。我开始想,也许我不应该创建一个名为“Join”的表,而应该创建一个名为“groups\u ive\u Join”的现有“Users”表的字段?@MateusJunges CSRF位于
    group\u Join.destroy
    路径中,但他在第一个表单
    Join.store中缺少它。我已经从表单中删除了CSRF,并将其插入到了`join.store``并指向空页。将其插入到
    join.store
    中是什么意思?用更改更新您的问题,我将用插入数据库的工作代码更新它。这不起作用。我仍然被引导到一个死页,这个死页可以刷新,数据仍然不能进入数据库。这不起作用。我仍然被引导到一个死页上,这个死页可以进行刷新,数据仍然无法进入数据库。