0

セッション値の保存に問題があります。関数に渡される値を使用してAJAXJquery呼び出しを介してセッション数変数をインクリメントすることはできません。また、セッションを格納する以前に設定した配列も新しい配列に変更されます。

ここでの問題は何ですか:

1>コントローラー機能を1つ使用する場合

startOnlineTest($testid=0)
 i set session countnew as 0
$this->session->set_userdata('countnew',0);
  and in view i use jquery to pass data to other function of same controller
  public function ResponseOnline($qid,$response)

jqueryの変更効果を使用する

 echo "[removed]$(document).ready(function(){";
         foreach($question['childQuestion'] as $q=>$aq){  // 
echo "\$(\"input:radio[name=qid-$q]\").live('change',function(){
var sr=\$(\"input:radio[name=qid-$q]:checked\").map(function() {
          return $(this).val();
          }).get().join(); 
       var qid = \$(\"input:radio[name=qid-$q]\").attr(\"qaid\");
       "; echo "\$.get('"; echo base_url();echo "testpapers/ResponseOnline/'+qid+'/'+sr,{},function(data)
 {\$('#res').html(data)});
 });";}
 echo"});[removed]" ;// this script is working fine

今問題はこれです私は配列を使用していますが、現在のセッション値で上書きされますResponseOnlineのコードは

public function ResponseOnline($qid,$response)
  {
  echo "this" .$this->session->userdata('countnew'); // this is not echo as set above by function  startOnlineTest($testid=0)[/color]
     i set session countnew as
     $this->session->set_userdata('countnew',0)

 echo $d=$qid; // i know its no use but to save time as tested on $d

 $s=$response;

if($this->session->userdata('countnew')==0)   //  algo for this function i check the                                       
                                               //countnew session varaible   if 0 do this 
{                                                
$sc=$this->session->userdata('countnew');     // store the countnew variable
echo $sc=$sc+1;                               // increment the counter variable
$this->session->set_userdata('countnew',$sc);  // store it in session 
echo "this is incrementes session value";     
echo $this->session->userdata('countnew');
$r2[$d]=$s;                               // store array value $r2 with key $d and value $s
$this->session->set_userdata('res',$r2);  //set this array value in session 
}
else{                                  // if session countnew!=0 then do this
$r2=$this->session->userdata('res');  // first store $r2 as array return from session
 $r2[$d]=$s;                         //then add value to this array                      

 $this->session->set_userdata('res',$r2); // storing this array to session
}
echo '<pre>';
print_r($r2);       // printing the array


}

たとえば、最初の呼び出しでは問題ないという結果が得られますが、2番目の呼び出しでは、値は上書きセッションになります。Array([32323]=>23))関数に合格する(32323,23)(33,42)Array([33]=>42)古い値が破棄されます。

4

1 に答える 1

0

codeigniter のセッションでは単一のアイテムしか保存できないため、おそらく php で通常のセッションを使用する必要があります。このようなもの:

$_SESSION['item'][] = $array;

または、次のようにして CodeIgniter セッションを引き続き使用することもできます。

$items = $this->session->userdata('items');
array_push($items, $new_item);
$this->session->set_userdata('items', $items);

キーも定義したい場合:

$items = $this->session->userdata('items');
$items['your_key'] = $new_item; 
$this->session->set_userdata('items', $items);
于 2012-07-07T06:42:30.687 に答える