2

いくつかの異なるページからアクセスできるコードがあります。どのページから来て、どの変数を送信するかに基づいて、わずかに異なることを行います。

参照ページごとにまったく新しいページを作成できると思いますが、機能が似ているため、実際にはそうしたくありません。

エラーが発生した場合は、リファラー ページにリダイレクトしたいと考えています。同様に、成功したらリファラーページにリダイレクトしたいと思います。ただし、エラーを説明するパラメーターを追加するか、失敗と成功を区別するために成功したことをユーザーに知らせたいと思います。

2 つのリファラー ページ、emailstory.php?id=231 と emailsignup.php があるとします。1 つには疑問符があり、もう 1 つにはありません。ユーザーをリファラーに送り返したいのですが、error=1 を追加します。最初のリファラーに &error=1 を追加し、2 番目のリファラーに ?error=1 を追加し、多くのバリエーションに対して堅牢なコードが必要です。

php

$referer = $_SERVER['HTTP_REFERER'];
$id = $_POST['id'];
$returnpage = $referer."&error=1";
if (!isset($_REQUEST['id'])) {
header("Location:$returnpage");
}

上記は場合によっては機能しますが、既に ? がある場合のみです。クエリ文字列の起動

これを行うための簡単で確実な方法はありますか?

ありがとう

4

2 に答える 2

4
<?php
$returnpage = $_SERVER['HTTP_REFERER'] . '?querystring';

if (!isset($_REQUEST['id'])) 
{
    header("Location:$returnpage");
    exit();
}

さて、最初の「?」の後から 他のすべて '?' 無視されます。上で行ったことを実行できます...完全に機能し、完全に有効です

さらに、アプリケーションを終了または強制終了することを忘れないでくださいheader。明示的に終了しない場合、関数の後でもアプリケーションは引き続き実行されます。

しかし、疑問符が 1 つあることにまだ固執している場合は、以下のスニペットで作業できます...

$mark = strpos($_SERVER['HTTP_REFERER'], '?') === false ? '?' : '&';
$returnpage = $_SERVEr['HTTP_REFERER'] . $mark . 'abc=1&def=2&is=t';
于 2013-09-01T14:56:11.140 に答える
0

$_POST[id]おそらく、設定されているかどうかを確認する必要があります

$strErrAppend = isset($_POST['id']) ? '&error=1' : '?error=1';

&error=1これは、の場合emailstory.php?id=123?error=1場合に追加する必要がありますemailsignup.php

于 2013-09-01T14:57:34.397 に答える