私は、ユーザーがチェックアウトに進むまで、ユーザーが蓄積したフォームのアイテムを保持するために使用しているセッションを持っています。これは、ショッピングカートのようなもので、フォームから項目を追加することができます。コードの
論理内訳:
- ページをロード$ _SESSIONは、[ '設定']した場合、セッションは
- を開始TRUEに設定し、次に設定されていません。
- 残りのページとフォームを表示します。
- ユーザーが「別の項目を追加」ボタンを押したときに表示されます。
- ページデータが自身に送信されます
- $ _SESSION ['set'] = Trueおよび$ _POST ['add_item']が設定されているかどうかを確認します。
- Pageは、配列内にセッション変数を作成し、それらのセッションに投稿された値を追加します。
- ページずつ$ _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
ノートを表示するだけでなく、スクリーンショットを撮るいる
[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ステートメントは、イベントをキャッチされていません後で?
ありがとうございました
メリークリスマス!
あなたはまた、フォームのHTMLと任意のJavascriptがこれを提出します方法に関連し表示することができますしてください? – DaveRandom
@DaveRandom - pastebin link http://pastebin.com/petkrEck – kaleeway
@loosebruce:これはあなたが探している答えではありませんが、配列には0から始まるインデックスがあります。注意深く見れば、あなたが '[tariff_count] => 5'(print_rから)を投稿したときの部分は、実際には配列内に5つの項目(0,1,2,3,4)があります。 – netcoder