2017-10-31 6 views
0

一貫してスタックオーバーフローでは、入力時や値変更後にユーザーをリダイレクトする方法の問題が提起されています.PHPでは、これを達成するためにヘッダーを修正するのが標準的な答えです。なぜPHP内で場所の変更、悪い習慣のためにJavaScriptを使用していますか?

しかし、PHPでは、HTMLやテキストを投稿する前にヘッダーを変更する必要があります。

だから、定期的に、私は次のようである私自身の個人的なソリューションを、ポスト:

「あなたがリダイレクトを実行し、次のことを書きたい時にPHPタグを終了:最後に、その後

<script> 
location.replace("Whatever.php"); 
</script> 

をとあなたのコードを完成させるためにもう一度あなたのPHPタグを手に入れてください。

私はそれを投稿したたびに、答えはほぼすぐに忘却にdownvotedされています。しかし、私の知る限り、それは完全に機能します。

私の質問は、なぜこれほど大きく下落しているのですか?そんなに悩んでいるこのソリューションを使用することはどうですか? (エスケープ機能を除く)全使用量の

例:

if(isset($_GET['role'])){ //If value set in GET 
    $role = $_GET['role'] 

    if($role == "Admin"){ ?> // Drop PHP tag 

    <script>location.replace("AdminPage.php");</script> //Solution 

    <?php else{ ?> 

    <script>location.replace("StandardPage.php");</script> //Solution 

    <?php } } ?> //Pick up Tag final time and Close isset. 
+3

本当にユーザーをリダイレクトしても、実際にテキストやHTMLを出力する点はありません。なぜなら、ブラウザを待つ代わりに 'header( 'Location ...')' htmlをレンダリングし、javascriptを実行して、ロケーションの変更を処理します。 –

+0

しかし、私が知っている限り、PHPで条件を実行したりテストしたりすることはできず、ヘッダを使って判断を下すこともできません。これは、場所の変更のヘッダーは事実上意味がないことを私に示唆しています。 – cmprogram

+1

_ "PHPの実行またはテスト条件" _は、あなたが話している条件によって異なります。明らかに、ユーザーのデスクトップの解像度をテストすることはできませんが、あなたの例では、既に示したようにPHPで完全にテストできるGETパラメータをテストしただけです –

答えて

1

ちょうどそれが働くからといって、それをするのにもっと合った方法を選ぶべきではありません。だから、なぜヘッダーがリダイレクトされるのが好ましいのですか?

  1. JavaScriptが無効にすることができ、あなたがあるために必要な承認(あなたの例では、それに基づいてリダイレクトしているように見える)のリダイレクト場合、誰かがちょうどJavaScriptを無効にして、そのページ上の「秘密のもの」を見ることができましたバックエンドに権限チェックがない場合は、リンク(データの削除)を介してアクションをトリガーすることさえできます。
  2. ヘッダーリダイレクトを使用している場合は、クライアントがヘッダーを取得するとすぐに発生します。コンテンツが転送される必要はありません(場合によっては、場所ヘッダーの直後にexit;を使用してもそれを防ぐことができます)。つまり、エンドユーザーのオーバーヘッドと反応時間が短縮されます。
0

まず、クライアントはただJavascriptをターンオフすることができます。それで、あなたのコードはすぐに壊れます。

クライアントにワークフローを変更または中断させる機会を与えないでください。

第2に、管理しにくいために悪い習慣です。それは別のスタイル、スクリプト、およびPHPコードを保つ。

関連する問題