2010-02-18 29 views
1

所以让我解释一下:PHP/JavaScript的消息传递到另一个页面

我基本上要这样当您发表的评论,(我用一个js/jQuery脚本发送字符串insert.php其插入到数据库)你将获得2+分。现在我已经完成了+2分,但是我想显示一条消息,比如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(div在index.php中称为“box”)。

但我应该怎么做?如果我喜欢的话,通过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。 我的问题是,操作和显示确认发生在不同的页面上。

+1

你可以使用堆栈溢出平台 - http://stackexchange.com/ – 2010-02-18 19:14:45

+1

我不想做一个整体的stackoverflow社区!阅读问题。谢谢.. – Karem 2010-02-18 19:27:23

+0

欢呼声,但你没有真正得到一个很好的答案吗? :)如果您使用评论讨论中获得的所有信息重新打开问题,请告诉我,我会看一看。这绝对是可以解决的,它刚刚出轨了一些,因为要求在开始时并不完全清楚。 – 2010-02-26 12:41:58

回答

6

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

一种方法是存储在用户的会话要显示的下一个页面上的消息:

// 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,则可能发生标签A的消息显示在标签B中。

您可以通过将随机生成的密钥添加到消息的变量名,并通过该键上的页面要显示的信息:

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

这是非常优雅的,因为

  • 要在内部会议显示遗体消息存储,并在任何时候都不会在浏览器中传递,从而减少安全漏洞的风险等。

  • 通过取消设置会话变量,即使用户重新加载页面,也要确保消息仅显示一次。

+0

嗨。这种方法似乎..好吧,我现在会测试它,但我有一个问题。我希望这显示在index.php,当你点击插入..我深入了解,我只是可以在index.php中创建一个部分,它需要消息并显示它们。但插入后,我不希望它的标题位置index.php。所以我应该如何通过它,另一种方法。例如javascript,不是? – Karem 2010-02-18 21:30:29

+0

另一个原因是标题位置无法使用它,是因为insert.php在一个框架内工作,而index.php在外部(设计和所有)。你觉得我吗?所以它会显示框架内的index.php .. – Karem 2010-02-18 21:39:42

+0

OPS,忘了提及,我的网站是从phpBB登录(phpBB论坛我有)会话集成,所以我不认为我可以使用$ _SESSION。但我给了它一个镜头,并进行了测试,但我只是出去未定义的变量_SESSION。使用$ _GET方法虽然工作,但我仍然有问题通过它..(标题将无法正常工作,我的情况)希望你能帮助我出Pekka – Karem 2010-02-18 21:56:53

0

如果insert.php是由需要显示mesage页面打开时,您可以使用window.opener来访问原始页面。我认为像这样的东西可能会工作:

window.opener。$(“#message”)。html($(“#box”)。html())。fadeIn(“slow”);

0

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

相关问题