2010-02-18 49 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向用戶顯示通知?

相關問題