在提交表单后但在重定向和退出之前回显成功消息

Posted

技术标签:

【中文标题】在提交表单后但在重定向和退出之前回显成功消息【英文标题】:Echo success message after submitted form but before redirect and exit 【发布时间】:2019-07-10 16:59:07 【问题描述】:

不知道我在这方面工作了多长时间,但似乎没有任何效果。我要做的就是在重定向和退出之前输出一条成功消息。

这是我要检查数据库的成功/失败

$sql = ("INSERT INTO test3 (test1, betvalue, bookmaker, status, aktiv) VALUES ('$bettype', '$betvalue', '$bookmaker', '$status', '$aktiv')");

    $result = mysqli_query($conn, $sql);
    if(mysqli_affected_rows($conn) >0 ) 
      echo "Wow it works";                    <-- Not working
      header("Location: nybonus.php");
      exit;
     else 
      echo ("<div class='alert alert-danger' role='alert'>" . $sql . "</div><div class='alert alert-danger' role='alert'>" . mysqli_error($conn) . "</div>");
    

如果成功,它不会输出任何回显,我尝试通过正确的刷新使其休眠以尝试输出消息,但它根本不起作用。 有更好的方法吗?还有人可以解释为什么它不会在标题和退出之前回显吗?

【问题讨论】:

没有代码来回显成功消息可能是原因 @RGriffiths 已更新。 假设您的 $sql 正在工作,它正在回显结果,然后加载 nybonus.php,因此您看不到回显。注释掉标题,看看它是否有效。 @RGriffiths,是的,当我没有标题时,我已经这样做了检查并且它有效。但问题是我需要标题并退出所以刷新它不会再次发送。 不能把成功信息放到nybonus.php吗? 【参考方案1】:

您能否通过设置会话变量并在重新加载时检查该变量的状态来实现您想要的:

$message = '';
if(isset($_SESSION['success'])) 
    if($_SESSION['success'] == 'success') 
        $message = 'Success';
    


$sql = ("INSERT INTO test3 (test1, betvalue, bookmaker, status, aktiv) VALUES ('$bettype', '$betvalue', '$bookmaker', '$status', '$aktiv')");
mysqli_query($conn, $sql);
if(mysqli_affected_rows($conn) > 0) 
    $_SESSION['success'] = 'success';             
    header('Location: nybonus.php');
    exit;

else 
    $_SESSION['success'] = 'fail';
    ..... 


<script>
$("#message").fadeOut(2000, function() 
    $("#message").fadeIn(0, function() 
        document.getElementById("message").innerhtml ="<br>";

    );
);
</script>

<div id="message">
    <?php echo $message; ?>
</div>

【讨论】:

这可能是一个不错的方法,但我已经实现了代码,当我尝试触发它时,我根本没有收到成功或失败的消息。 你是否包含了 session_start();在你的 php 的开头?没有这一行,会话变量将无法访问。 确实不清楚您要达到的目标。您希望成功消息显示一会儿然后消失吗?您可以使用 setInterval 在给定时间后隐藏元素。 查看编辑 - 未经过全面测试,但让您了解如何淡出消息并将其替换为空行。 jsfiddle.net/hg6dwqmx 但在我看来这变得有点笨拙。您会不会发现直接转到单独的成功页面更容易,您可以在其中做所有您想做的事情,然后有一个按钮可以重定向回来,或者在设定的时间段后自动完成。【参考方案2】:

问题是当你使用“标题”时,它必须是第一个。 您不能在页眉之前将任何其他内容打印到屏幕上。 与设置 cookie 时相同。

因此,在您的情况下,您不能使用“标题”进行重定向。 您可以使用元刷新。

<meta http-equiv="refresh" content="0; url=http://www.somewebsite.com">

“内容”是刷新前等待的秒数。

【讨论】:

这行得通,但是,在元标记之前,我放了一个回显以显示成功消息,但它将消息放在空白页面上,然后元重定向回正确的原始页面。我如何让它在同一页面上而不是在空白页面上回显?【参考方案3】:

您必须更准确地解释您要完成的工作...例如步骤 1 执行此步骤 2 执行此操作,依此类推。 之前我了解到您曾问过如何在回显消息后进行重定向。

所以现在在步骤中更详细地解释您想要做什么,也许我可以提供帮助。

如果您的意思是用户是一个“page1”并且他们提交了一个表单,然后您希望在结果页面上显示该消息?然后重定向...

您只需将表单操作设置为与它们当前所在页面相同的 url 路径。

你跟着我吗?

【讨论】:

以上是关于在提交表单后但在重定向和退出之前回显成功消息的主要内容,如果未能解决你的问题,请参考以下文章

使用表单提交重定向进行延迟

如何正确地将 CSS 应用于 PHP 回显?

React js在重定向到新路由后显示通知

表单提交后返回“成功”消息

输出表单提交成功到页面而不是重定向

表单提交后如何在同一个html页面上回显?