0

このページを開くと、いくつかのセッション変数を読み込んで新しい変数に割り当て、設定を解除するだけです。これを行うと、別のページに持ち越されなくなります。これはすべてうまくいきます。

ただし、同じページにフォーム付きの送信ボタンもあります。何らかの理由で、送信ボタンを押すと、必要なクエリが完了せず、セッションチェックコードを再利用するだけです。これは、セッション変数が設定されていないため、それらの検証に失敗します。

このセッション検証を再実行し、送信ボタンコードを実行しないのはなぜですか/

これはページの最上部にあるセッション検証であり、何らかの理由で送信ボタンのクリック時に再実行されるコードです。

$ahid="";
    $bid="";
    $np="";
    $nt="";

if (isset($_SESSION['ahid'])) {

          $ahid = $_SESSION['ahid'];
          unset($_SESSION['ahid']);
          if (isset($_SESSION['bid'])) {

                $bid = $_SESSION['bid'];
                unset($_SESSION['bid']);
                if (isset($_SESSION['nt'])) {

                        $nt = $_SESSION['nt'];
                        unset($_SESSION['nt']);
                        if (isset($_SESSION['np'])) {


                            $np = $_SESSION['np'];
                            unset($_SESSION['np']);
                         }else{
                                  header('Location: builders.php?hi=1');
                                  exit();
                              }
                 }else{
                          header('Location: builders.php?hi=2');
                          exit();
                      }
         }else{
                  header('Location: builders.php?hi=3');
                  exit();
              }
     }else{
              header('Location: builders.php?hi=4');
              exit();
          }

これは実行する必要がある送信ボタンコードですが、代わりに触れられていません

if(isset($_POST['build_chk_finish'])){

        $construction_insert = mysql_query("INSERT INTO construction (user_id, estate_id, addon_h_id, builder_id, con_total_price, con_total_time, con_time_started, con_time_ending, con_completed) 
     VALUES('$user_id', '$estate_id', '$ahid', '$bid', '$np', '$nt', now(), '$future_date', '0')", $general)  
     or die (mysql_error());

     $construction_id = mysql_insert_id();

     $con_error="";
     $con_error = "Congratualtions! Your Builder has been hired and has begun work.";
            $_SESSION['error'] = $con_error;
            header("Location: houses.php");

    }

追加情報のために、送信ボタンを押すと、最初のセッションの検証に失敗しますbuilders.php?hi=4

これが送信ボタンです

<input name="build_chk_finish" type="submit" class="build_chk_finish" id="bc_submit"/>

4

1 に答える 1

1

私が理解しているように、このブランチは実行されます:

}else{
        header('Location: builders.php?hi=4');
        exit();
}

私が理解しているように、そうすべきではないとき。しかし、分岐するかどうかを見てください。上記の1つは、$ _SESSION['ahid']が設定されていない場合はいつでも実行されます。それは他に関連しているからif (isset($_SESSION['ahid'])) {です:

    if (isset($_SESSION['ahid'])) {
        ....// a lot of other if statements here
    }else{
            header('Location: builders.php?hi=4');
            exit();
    }
于 2012-09-11T23:28:59.023 に答える