1

私はCIを初めて使用しますが、パラメーターを渡す方法がわからない場合、私のシナリオは次のとおりです。

1)online_booking.phpとして表示される複数のチェックボックスを備えたフォームでは、ユーザーは複数のオプションをチェックします。

2)ユーザーがボタンをクリックしてjsonでjq ajax postを呼び出すと、コントローラーのbooking_processからコールバックパラメーターが取得されます。

3)返された結果は、#resultdivブロックのビューに出力されます。

OK、上記のプロセスは正常に機能し、結果はユーザーがチェックしたもののように印刷されます。

これが私の問題です。ビューページに結果を印刷しても、コールバックの結果をビューで再利用したいのですが、結果をさらに処理するために使用できません。返された結果を変数にするにはどうすればよいですか。ビューで?

私はいくつかの方法を試しましたonline_booking?selected=mutipleCheckedValue&sum=500が、$ config ['permitted_uri_chars']を変更してメソッドを渡すという古い方法を試しましたが、すべてのチェック値ではなく、最後にチェックされた値のみを取得します。つまり、タイプA+でチェックボックスをチェックした場合でもB + C、URLでタイプCの唯一の値を示しているので、これはCIでの良い習慣ではないことはわかっていますが、適切な解決策が見つからない場合は、疑問を解決するのに役立つ可能性があります。

コントローラで見られるように、チェックされた値をセッションに保存しようとさえしますが$this->session->set_userdata('selected', $conf_type.":".$conf_charge);、それでも最後にチェックされた値のみが表示されます。

私はすでにこの部分にかなりの時間を費やしているので、この問題を克服する方法についてアドバイスをお願いします。

online_booking.php表示:

<?php
$is_logged = $this->simplelogin->is_logged();
$active = $this->simplelogin->get_data_user('activate');
$user_email = $this->simplelogin->get_data_user('email');

if(!$is_logged) {

    echo "<p>Please login to get access</p>";

}else if($active == 0){
    echo "<p>Your account is inactive to proceed this page</p>";

}else{

?>

<p><h2>Online Booking</h2></p>

<p><div id="result_msg"></div></p>

<p>
<form id="conf_booking_form">
    <input type="checkbox" name="cType[]" value="A,200">&nbsp;Type A - USD200<br>
    <input type="checkbox" name="cType[]" value="B,150">&nbsp;Type B - USD150<br>
    <input type="checkbox" name="cType[]" value="C,100">&nbsp;Type C - USD100<br>
    <input type="checkbox" name="cType[]" value="D,50">&nbsp;Type D - USD50<br>
    <input type="hidden" name="user_email" value="<?php echo $user_email ?>" />
    <input type="button" id="btn_conf" name="" value="Book" />
    <span id="wait"><img src="<?php echo base_url();?>assets/img/loader.gif" /></span><br />
</form>
</p>
<p><div id="result" style="color:#606;"></div></p>

<?php
}
?>

JQuery ajax投稿:

$('#btn_conf').click(function(){
    var parameters = $('#conf_booking_form').serialize();

    //alert(parameters);
    $.ajax({
        url: baseurl + 'site/booking_process',
        type: 'POST',
        data: parameters,
        dataType: 'json',
        success: function(output_str){
            if(output_str == "false"){
                $('#result_msg').html("Select at least one type to proceed booking");

            }else{
                $('#result').html(output_str);
                //window.location.replace(baseurl + 'site/online_booking?selected='+output_str.selected+'&sum='+output_str.sum);
            }
        }
    });
});

コントローラ:

class Site extends CI_Controller {

public function online_booking() {
    $this->load->view('header');
    $this->load->view('online_booking');
    $this->load->view('footer');
}

public function booking_process(){
    $confTypes = $this->input->post('cType');
    $user_email = $this->input->post('user_email');
    $output_str = NULL;
    $conf_charge_total = 0;

    if(!empty($confTypes)){

        foreach($confTypes as $confType){
            $explode_value = explode(",", $confType);

            $conf_type = $explode_value[0];
            $conf_charge = $explode_value[1];

            $conf_charge_total += $conf_charge; //sum up checked values

            $output_str .= $conf_type.":".$conf_charge.",";
            /*$output_str = array(
                    'selected' => $conf_type.','.$conf_charge,
                    'email' => $user_email,
                    'sum' => $conf_charge_total,
                    'flag' => 'true'
                );*/

            //$this->session->set_userdata('selected', $conf_type.":".$conf_charge);
        }

        $output_str .= $conf_charge_total;

        //$this->session->set_userdata('sum_conf_charges', $conf_charge_total);

    }else{
        $output_str = "false";
    }

    echo json_encode($output_str);
}
}

ありがとう。

4

1 に答える 1

0

set_userdata('selected', ...)ループ内に保存すると、ループselectedするたびに上書きされます。これにより、観察したように、最後の値が保存されます。これをループの外に移動することができます。前または後のいずれかで、

$this->session->set_userdata('selected', $confTypes);

または配列を準備してそれを保存します

foreach ($confTypes as $confType){
    ...
    $selected_conf_types[$conf_type] = $conf_charge;
}

$this->session->set_userdata('selected', $selected_conf_types);
于 2013-02-02T15:52:46.110 に答える