1

所以让我解释一下:

我基本上想要这样,当您发表评论时(我使用 js/jquery 脚本将字符串发送到插入数据库的 insert.php),您将获得 2+ 分。现在我已经完成了,所以你得到了 +2 分,但是我想显示一条像 stackoverflow 这样的消息。我已经知道如何显示像 stackoverflow 这样的消息,但不知何故我需要从 insert.php 发送(插入后),这个:

<div id='message' onclick="closeNotice()" style="display: none;">
Hey, <b><? echo $pusername; ?></b> - You've just got +<? echo $gpm; ?> points for your comment!
<a href="#" class="close-notify" onclick="closeNotice()">X</a>
</div>

到 index.php..

我正在考虑可能编码到我当前的脚本(正在向 insert.php 发送字符串)它应该找到#message 并将其放入#box(在 index.php 中称为“box”的 div)。

但是我该怎么做呢?我是否应该喜欢,在你通过 insert.php 之后,然后你在 javascript 中激活一个函数:

function showmessage()  { 
    $("#box").html(data).find("#message").fadeIn("slow")
}

正如我所说,您激活脚本:

<script type="text/javascript" language="javascript">
showmessage();
</script>

在您成功插入数据库并向用户提供积分之后?我刚刚测试过这个,我不能让它工作。我的网站集成了来自 phpBB 登录的会话(我有 phpBB 论坛),所以我认为我不能使用 $_SESSION。insert.php 在框架中打开。我的问题是动作和确认的显示发生在不同的页面上。

4

3 回答 3

8

如果我对您的理解正确,您的问题是操作和确认的显示发生在不同的页面上。

执行此操作的一种方法是将要在用户会话的下一页上显示的消息存储:

// insert.php
$_SESSION["user_message"] = "You were awarded +2 points.";

并将其输出到以下页面:

// thankyou.php
echo $_SESSION["user_message"]; // Or show the box, or whatever
$_SESSION["user_message"] = null; // Clean up

这样做的潜在缺点是,如果用户打开了您网站的两个或多个页面/选项卡,并且在它们之间进行了很多导航,则消息可能会出现在错误的上下文中。例如,如果我在选项卡 A 中单击“保存”并刷新选项卡 B,则可能会在选项卡 B 中显示用于选项卡 A 的消息。

您可以通过将随机生成的密钥添加到消息的变量名称并将该密钥传递到您要在其上显示消息的页面上来帮助实现这一点:

// insert.php
$key = "123456"; // Insert random generation method here, e.g. using rand()
$_SESSION["user_message_$key"] = "You were awarded +2 points.";
header ("Location: thankyou.php?message=$key"); // Pass the key to the next page

// thankyou.php
$key = $_GET["message"]; // No sanitation necessary here AFAICS
echo $_SESSION["user_message_$key"]; // Or show the box, or whatever
$_SESSION["user_message_$key"] = null; // Clean up

这非常优雅,因为

  • 您要显示的消息保留在您的内部会话存储中,并且绝不会在浏览器中传递,从而降低了安全漏洞等风险。

  • 通过取消设置会话变量,您可以确保消息只显示一次,即使用户重新加载页面也是如此。

于 2010-02-18T20:38:32.567 回答
0

如果 insert.php 正在被需要显示消息的页面打开,您可以使用 window.opener 访问原始页面。我认为这样的事情可能会奏效:

window.opener.$("#message").html($("#box").html()).fadeIn("slow");

于 2010-02-25T18:42:41.737 回答
0

我不确定我是否理解正确,但是如果用户在 index.php 上的字段中进行输入,那么也许您可以使用 ajax 请求将其发送到 insert.php,并使用 ajax 的回调来显示通知用户?

于 2010-02-26T10:49:40.847 回答