【问题标题】:How to output message after form submit on the same page?在同一页面上提交表单后如何输出消息?
【发布时间】:2019-04-05 13:40:26
【问题描述】:

当用户提交表单时,我需要在同一页面上为他输出消息。

当我提交表单时,页面刷新,处理程序触发(php 函数),一些 POST 数据插入数据库,我设置 $this['success'] = 1,然后使用 Twig 检查:

{% if success %}
  here is many tags with information and a message
{% else %}
   here is a form
{% endif %}

但如果我按 F5 重新提交表单,插入查询会再次执行。

使用 AJAX 执行此请求不是一个真正的选择。

【问题讨论】:

  • 您是在问如何在不重新加载页面的情况下提交表单?
  • 不,我如何在同一页面上提交表单并输出消息(带有许多标签的块)。不使用 AJAX。
  • 哦,好像我发现了。表单提交页面重新加载后,执行一个 PHP 函数,最后我设置 cookie 并重定向到该页面(现在发布请求消失了)。在onStart 函数中,我检查是否设置了该cookie,并将$this['success'] 设置为输出所需的带有消息的块(代码在上面)并取消设置cookie。
  • 嗯,我不确定 cookie 是否可行,尤其是因为您需要在之后取消设置 cookie 等,您不能只使用 url 中的参数进行重定向。所以提交后你重定向到http://yourwebsite.nl/submitpage?message=succes
  • 我使用带有请求参数的form_open 函数。 {{ form_open({ request: 'onBook', url: 'booking?success=1' }) }} 当我想获得 post('success') 时,会发生错误(偏移量 0)。我被困住了。

标签: laravel octobercms


【解决方案1】:

有很多方法可以回答这个问题(使用缓存、数据库、cookies、会话)。使用Session Flashing 真的很容易,或者在这种情况下,我将向您展示如何使用Returning a redirect with flash data. 来做到这一点

  1. 启动 CMS 页面
  2. 放置 HTML 表单代码:*注意 {{ something }} 对在提交表单后显示我们的回复很重要。此请求不使用 AJAX。

    {{ something }}
    {{ form_open({ request: 'onSubmit', class: 'row', autocomplete: 'off' }) }}
    {{ form_input('text', 'something', '', { class: 'input padding' }) }}
    {{ form_submit('Submit', { class: 'button padding' } ) }}
    {{ form_close() }}
    
  3. PHP 代码:

    function onStart() {
    $something = Session::get('something');
    $this['something'] = $something; 
    }
    
    function onSubmit() {
    $something = Input::get('something');
    return Redirect::refresh()->with('something', $something);
    }
    
  4. 在提交表单后测试并享受一种创建消息的方式。

【讨论】:

  • 非常感谢!我是否理解with 函数设置一个会话并在第一次检索后会话消失?
  • 当用户浏览网站时会创建一个会话。 with 函数将数据闪烁到会话中以获取一个响应。 “由于 HTTP 驱动的应用程序是无状态的,会话提供了一种跨请求存储用户信息的方法。” -OctoberCMS
【解决方案2】:

如果您使用的是 laravel,那么您可以轻松实现来处理此功能

在查看文件中,您需要编写此代码,它将在您显示表单的同一页面上显示消息。

file.blade.php 文件

   @if(Session::has('success'))
                    <div class="alert alert-success">
                        {{ Session::get('success') }}
                    </div>
      @endif

FormController.php

    public function addUser(Request $request){
     User::create([
                'name' => $request->name,
                'email' => $request->email,
                'gender' => $request->gender,
                'contact' => $request->contact,
                    .....]);
      //below code help to display the message that you want on same page whereuser entered data
      return back()->with('success', 'Thanks you for adding!!');
}

    

return back()->with('success', '谢谢添加!!'); 将此代码用于 laravel 项目以在同一页面上显示消息

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    相关资源
    最近更新 更多