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に。

#messageを見つけて#box(index.phpでは "box"と呼ばれるdiv)にスローするように、現在のスクリプト(insert.phpに文字列を送信している)にコーディングすることを考えていました。

しかし、私はこれをどのように行うべきですか?必要に応じて、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

私があなたを正しく理解している場合、あなたの問題は、アクションと確認の表示が異なるページで行われることです.

これを行う 1 つの方法は、ユーザーのセッションの次のページに表示されるメッセージを保存することです。

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

これの潜在的な欠点は、ユーザーがサイトの 2 つ以上のページ/タブを開いていて、それらの間を何度も移動すると、メッセージが間違ったコンテキストで表示される可能性があることです。たとえば、タブ 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

これは非常にエレガントなので

  • 表示したいメッセージは内部セッション ストアに残り、ブラウザに渡されることはないため、セキュリティ ホールなどのリスクが軽減されます。

  • セッション変数の設定を解除することで、ユーザーがページをリロードしても、メッセージが 1 回だけ表示されるようにします。

于 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 に答える