【问题标题】:PHP/Javascript passing message to another pagePHP/Javascript 将消息传递到另一个页面
【发布时间】:2011-01-18 11:36:54
【问题描述】:

让我解释一下:

我基本上想要这样,当您发表评论时(我使用 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 在框架中打开。 我的问题是动作和确认的显示发生在不同的页面上。

【问题讨论】:

  • 你可以只使用堆栈溢出平台 - stackexchange.com
  • 我不想做一个完整的 stackoverflow 社区!阅读问题。谢谢你..
  • 为赏金干杯,但您并没有真正得到好的答案,是吗? :) 如果您使用 cmets 讨论中获得的所有信息重新提出问题,请告诉我,我会看看。这肯定是可以解决的,只是因为刚开始需求不完全清楚,所以有点脱轨了。
  • @Pekka 没关系,我使用会话解决了这个问题:在 insert.php 上保存变量,然后激活检查变量是否已保存的脚本..(检查 session.php 我做,检查是否 isset),无论如何,这很好用,所以我想我想给你赏金,因为你在这个问题上最有帮助..

标签: javascript html message-passing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      // 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
      

      这很优雅,因为

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

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

      【讨论】:

      • 嗨。这个方法看起来..好吧,我现在测试一下,但我有一个问题。当您单击插入时,我希望它显示在 index.php 中。我知道我可以在 index.php 中创建一个接收消息并显示它们的部分。但插入后我不希望它到 index.php 的标题位置。那么我应该如何通过它,另一种方法。例如javascript,不是吗?
      • 另外一个标题位置无法使用的原因是 insert.php 在框架内工作,而 index.php 在外部(设计和所有)。你感觉到我了吗?所以它会在框架内显示 index.php ..
      • Ops,忘了提,我的网站集成了来自 phpBB 登录的会话(我有 phpBB 论坛),所以我认为我不能使用 $_SESSION。但是我试了一下,并对其进行了测试,但我只是得到了未定义的变量_SESSION。使用 $_GET 方法虽然有效,但我仍然有传递它的问题..(标题不适用于我的情况)希望你能帮助我 Pekka
      • Rails 将此概念称为“Flash”数据 - 特殊会话数据,仅在请求下一页之前持续存在,然后被丢弃。在 PHP 中实现 flash_set($message)flash_get() 方法相当简单,而且它们非常有用。
      • @Azzyh 您应该更新您的问题以反映所有这些限制 - phpBB、insert.php 在框架中打开以及您不愿意重新加载 index.php 以显示通知。这些限制意味着完全不同的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      相关资源
      最近更新 更多