2011-12-21 12 views
2

私は、ユーザーがチェックアウトに進むまで、ユーザーが蓄積したフォームのアイテムを保持するために使用しているセッションを持っています。これは、ショッピングカートのようなもので、フォームから項目を追加することができます。コードの

論理内訳:

  1. ページをロード$ _SESSIONは、[ '設定']した場合、セッションは
  2. を開始TRUEに設定し、次に設定されていません。
  3. 残りのページとフォームを表示します。
  4. ユーザーが「別の項目を追加」ボタンを押したときに表示されます。
  5. ページデータが自身に送信されます
  6. $ _SESSION ['set'] = Trueおよび$ _POST ['add_item']が設定されているかどうかを確認します。
  7. Pageは、配列内にセッション変数を作成し、それらのセッションに投稿された値を追加します。
  8. ページずつ$ _SESSION [「tariff_count」]より多くのニーズが

を追加する場合、問題は私のコードは、それが必要として動作していないことです。 「新しい関税の追加」ボタンをクリックすると、初めてif関数で捕捉されません。これはすぐに捕らえられるべきです。しかし、私が行ってボタンをもう一度押すと、それは最終的に動作し、私のセッションにアイテムを追加します。ここで

はコードです:

//start a session to remember tariff items 
session_start(); 

//testing the session array 
print_r($_SESSION); 

//destroy session if this character is found in URL string 
$des = $_GET['d']; 
if($des == 1) 
{ 
    session_destroy(); 
} 

//checks to see if session data has been set 

//if a session variable count is set then 
if ($_SESSION['set'] == TRUE) 
{ 
    //perform a check to ensure the page has been called by the form button and not been accidently refreshed 
    if(isset($_POST['add_tariff'])) 
    { 
    //if user clicks Add another tariff button then increase tariff count by one 

    //temp variable set to the current count of items added 
    $count = $_SESSION['tariff_count']; 
    $_SESSION['tariff_name'][$count] = $_POST['tariff_name']; 
    $_SESSION['tariff_net'][$count] = $_POST['tariff_net']; 
    $_SESSION['tariff_inclusive'][$count] = $_POST['tariff_inclusive']; 
    $_SESSION['tariff_length'][$count] = $_POST['tariff_length']; 
    $_SESSION['tariff_data'][$count] = $_POST['tariff_data']; 
    //increment tariff count if more data needs to be added to the sessions later. 
    $_SESSION['tariff_count']++; 
    } 
} 
//if no session data set then start new session data 
else 
{ 
    echo "session set"; 
    $_SESSION['set'] = TRUE; 
    $_SESSION['tariff_count'] = 0; 
} 

コードSesssionデータの私の配列をfudgingしているようです。セッションで追加したアイテムはすべてテーブルに表示されます。

テーブルが6つのアイテムを表示している場合、セッションのprint_rを実行すると、アレイに4つのアイテムがあることがわかりますか?私はそれがアレイの同じインスタンスを再印刷していないことを確認するためにそれをテストしました。

ここには、6行を表示する配列のprint_rがありますが、この配列には4行しかありませんか?私はこの奇妙な問題に私は「= 6真の価値」をエコー出力しているが、セッションのしますprint_rで、それが唯一の5

http://i.imgur.com/jRenU.png

ノートを表示するだけでなく、スクリーンショットを撮るいる

[tariff_count] => 5 [tariff_name] => Array (
    [0] => STREAM1TARIFF [1] => STREAM1TARIFF [2] => CSS [3] => CSS [4] => CSS 
) 

したがって、私のコードは1つのインスタンス(n-1)を欠いています。

セッション配列内のすべてのインスタンスを出力する私のコードは、「< =」の比較によって不一致の問題が発生していますか? PHPページの

if(isset($_SESSION['tariff_count'])) 
{ 
    for ($i = 0; $i <= $count; $i++) 
    { 
    echo "<tr>"; 
    echo "<td>".$_SESSION['tariff_name'][$i]."</td>"; 
    echo "<td>".$_SESSION['tariff_net'][$i]."</td>"; 
    echo "<td>".$_SESSION['tariff_inclusive'][$i]."</td>"; 
    echo "<td>".$_SESSION['tariff_length'][$i]."</td>"; 
    echo "<td>".$_SESSION['tariff_data'][$i]."</td>"; 
    echo "</tr>"; 
    } 
} 

貼り付けビン - http://pastebin.com/petkrEck

任意のアイデアユーザーがボタン、それが押された最初の時間を、その後検出「別の関税を追加」押したときに、なぜ私のIfステートメントは、イベントをキャッチされていません後で?

ありがとうございました

メリークリスマス!

+0

あなたはまた、フォームのHTMLと任意のJavascriptがこれを提出します方法に関連し表示することができますしてください? – DaveRandom

+0

@DaveRandom - pastebin link http://pastebin.com/petkrEck – kaleeway

+0

@loosebruce:これはあなたが探している答えではありませんが、配列には0から始まるインデックスがあります。注意深く見れば、あなたが '[tariff_count] => 5'(print_rから)を投稿したときの部分は、実際には配列内に5つの項目(0,1,2,3,4)があります。 – netcoder

答えて

3

問題はコードフローです。単純化された擬似コードでは、あなたはこれをやっている:オン

if (session is not initialized) { 
    set = true 
    count = 0; 
} else { 
    add posted data to session 
} 

を最初のセッションを設定するように、「アイテムを追加」と呼ぶ、セッションは、設定されていません。投稿データを無視します。

コードの流れは次のようになります。

if (session is not initialized) { 
    set = true; 
    count = 0; 
} 

if (posting data) { 
    add data to session 
} 
+1

ありがとうございました!私はそれを修正し、今すぐ最初のクリック後に動作します!素敵なクリスマスを! – kaleeway