0

これが私のコードです

    <?php
      if (!isset($_SESSION)) { session_start(); }
      if (!isset($_SESSION['username'])) { header("Location: index.php");  }
      ob_start();

      if($_POST) {
        $id = $_POST['book_id'];
        $command = $_POST['command'];
        $sourcePage = $_POST['source'];
      } else if ($_GET){
        $command = $_GET['command'];
        $sourcePage = $_GET['source'];
        $id = $_GET['book_id'];
      } else {
        header("Location: index.php");
      }
      // if command is 2 then show cart content
      if($command == 2) {
        showCart();
      // if command is 1 then add book to cart
      } else if($command  == 1) {
        addToCart($id);
       header("Location: $sourcePage");
      // if command is 0, then remove book from cart
      } else if($command == 0) {
        deleteFromCart($id);
        header("Location: $sourcePage");
      } else if(!isset($command)){
        header("Location: index.php");
      }

  ob_flush();
    ?>

ログインしていなくてもリダイレクトされないのはなぜですか?

4

3 に答える 3

1

exit() または die 関数を使用すると、問題が解決する場合があります。しかし、これらの関数のいずれかを実際に使用する必要がある状況は非常に限られています。

条件を追加することで if else 条件を強化できると思います。ただし、これによりコード行が増加します。

于 2013-01-31T06:41:51.740 に答える
1

$_POSTまたはが存在する状態でページが単純に更新され$_GET、後のheader("Location: ...")コマンドのいずれかに該当する可能性はありますか?

もしそうなら、die(); を追加して問題を解決したいと思うでしょう。

if (!isset($_SESSION['username'])) { header("Location: index.php"); die(); }
于 2013-01-31T04:40:05.393 に答える
0

私の経験から、ヘッダー経由のリダイレクトがあるたびに、次の接続されたコードが実行される傾向があります。

例:(リダイレクトコードを持つ)else/else ifと一緒にある場合if、それらも実行され、リダイレクトは発生しません。ただし、条件を個別ifsに分割し、1 つを入力した後if、リダイレクトが存在し、そのヘッダー コードの後に​​後続のコードがないif場合、リダイレクトが発生します。

矛盾を避けるためにdie()/全体に使用することをお勧めします。exit()

于 2013-02-01T11:57:46.720 に答える