0

スティックフォームの一部である必要があるチェックボックスに問題があります。これは、ユーザーがさまざまなページをナビゲートし、戻ったときにチェックボックスの選択を記憶できるように、セッションを介して記憶されます。

フォームの上部に入力した請求の詳細と同じ配達の詳細を表示する場合は、ユーザーがチェックボックスをクリックします。後のページで行うように、配達の詳細を請求の詳細と同じに割り当てる方法について心配する必要はありません。

注:Javascriptはこれに完全に対応しています。とにかく必要だとは思わないでください。ただし、注意が必要です:)。これは、すべての基準が満たされるまで自分自身に投稿し($flag == "ok")、ユーザーを次のページに送るスティッキーフォームの1つです。

ここで、関連するコードであると私が信じているものを提供します。

PHP(コードのこのセクションは関係ないかもしれませんが、私が見ることができるようにそれを含めて$_SESSION['sameasbilling']、ユーザーを次のページに送る前に最終的なものを設定します(order-confirm.php

if ($flag == "ok"){
    $sameasbilling = cleanString($_POST['sameasbilling']);
    $_SESSION['sameasbilling'] = $sameasbilling;

    if (!headers_sent()){
        //send user to next page
        header("Location: order-confirm.php");
    }else{
        echo "Not Sent";
    }
}

HTML / PHP

<p>Same as billing address? &nbsp;&nbsp;&nbsp;
<input type="checkbox" id="sameasbilling" name="sameasbilling" value="1" 
<?php 
if (isset($_POST['sameasbilling'])) {
    print ' checked="checked"';
    $_SESSION['sameasbilling'] = "1";
} else {
    $_SESSION['sameasbilling'] = "";
}
?> />

私が見る限り、最も重要なコードは、checked ='checked'を出力するかどうか、および'sameasbilling'セッション値をリセット/設定するかどうかを確認する上記のコードです。

PS私は何度も何度も繰り返してきたので、入力要素にあるIFステートメントはかなりだらしないですが、同じページにとどまってエラーを受け取ったときに選択を覚えていますが、次のページに戻って選択内容が記憶されておらず、実際にそれを実行するコードがないことは承知していますが、誰かがそれを実現する方法を提案してくれることを期待しています。

4

3 に答える 3

1

これは、入力ボックスが送信されたときの最初のページでのみ機能します。ページに戻った後に機能させるには、設定した$_SESSION変数も確認する必要があります。などのifステートメントにまたはセクションを追加してみてください。

if (!isset($_POST['sameasbilling']) && $_SESSION['sameasbilling'] != "1") {
     $_SESSION['sameasbilling'] = "";
} else { 
print ' checked="checked"';
    $_SESSION['sameasbilling'] = "1";

}

**編集

if(isset($_POST['your_submit_button'])){
        if (isset($_POST['sameasbilling'])) {
            print ' checked="checked"';
            $_SESSION['sameasbilling'] = "1";
        } else {
            $_SESSION['sameasbilling'] = "";
        }
    }else if ($_SESSION['sameasbilling'] == "1") {
        print ' checked="checked"';
    }
于 2013-02-08T11:18:33.190 に答える
0

headers_sent()スクリプトがすでにヘッダーに何かを送信しているかどうかをチェックします。たとえば、テキストを出力バッファーにダンプしてから、trueを返すように要求した場合などです。

私はあなたが意味すると思います

if ($_SESSION['sameasbilling']){
    header("Location: order-confirm.php");
    exit();
}

または、チェックボックスの値を再度送信する場合は、ここでセッションビットをスキップしてください

if (isset($_POST['sameasbilling'])){
于 2013-02-08T11:10:34.173 に答える
0

これをより論理的にするために、$_POST['sameasbilling']がチェックボックスであると仮定して、次のようにします。

if(isset($_POST['sameasbilling']) && !empty($_POST['sameasbilling']))
    $_SESSION['sameasbilling'] = 1;
else
    $_SESSION['sameasbilling'] = 0;

if (isset($_POST)) //or check if the submit has been sent or even the session
{
    //send user to next page
    header("Location: order-confirm.php");
    exit();
}
else
    die("Not Sent"); //or set the header location to the previous page with an error

よりも

<input type="checkbox" id="sameasbilling" name="sameasbilling" value="1" <?php echo $_SESSION['sameasbilling'] == 1 ? 'checked="checked"' : '';?> />
于 2013-02-08T11:24:26.787 に答える