Zoran
Zoran

Reputation: 1371

codeigniter session values are overwritten

In my view I have the following code:

  if (($news['newsvideo'] !="") || ($news['newsvideo'] != NULL)) {

     $newdata4 = array(
     'tablename'  => 'news',
     'recordid'     => $news['newsid'],
     'fieldname' => 'newsid',
     'fieldToUpdate' => 'newsvideo',
     'dpage' => 'news/editNews'
     );

     $this->session->set_userdata($newdata4);
     echo anchor('news/updateOneField', 'Delete Video?','class=btn');
 }

  if (($news['newsvideo_en'] !="") || ($news['newsvideo_en'] != NULL)) {

     $newdata5 = array(
     'tablename'  => 'news',
     'recordid'     => $news['newsid'],
     'fieldname' => 'newsid',
     'fieldToUpdate' => 'newsvideo_en',
     'dpage' => 'news/editNews'
     );

     $this->session->set_userdata($newdata5);
     echo anchor('news/updateOneField', 'Delete Video?','class=btn');
 }

Function in my controller is the following:

public function updateOneField() 
    {  

        $tablename = $this->session->userdata('tablename');
        $id = $this->session->userdata('recordid');
        $fieldname = $this->session->userdata('fieldname');
        $fieldToUpdate = $this->session->userdata('fieldToUpdate');   
        //$this->newsModel->save(array($fieldToUpdate => ''), $id);        
        //$newsid = $id;

        echo "Table name: ". $tablename . "<br/>";
        echo "Id: " . $id. "<br/>";
        echo "Field name: " . $fieldname. "<br/>";
        echo "Field to update: " . $fieldToUpdate. "<br/>";
        die();
        // destroy the session after the update
        $this->session->unset_userdata('tablename');
        $this->session->unset_userdata('recordid');
        $this->session->unset_userdata('fieldname');
        $this->session->unset_userdata('fieldToUpdate');

        $this->displayEditNewsForm($newsid);
    } 

Now, if i click on the first link i want to delete newsvideo, when try to update the newsvideo field, newsvideo_en is updated. That means that I overwrite the values of the array later. Does anyone has idea how to avoid that, and to update the correct field?

Regards,Zoran

Upvotes: 0

Views: 882

Answers (1)

stormdrain
stormdrain

Reputation: 7895

1) Why are you checking for empty AND null?

if (($news['newsvideo_en'] !="") || ($news['newsvideo_en'] != NULL)) {

you can probably just use

if ($news['newsvideo_en'] !=""){

unless you meant to check if not empty AND not null in which case you want

if (($news['newsvideo_en'] !="") AND ($news['newsvideo_en'] != NULL)) {

2) Why are you telling the script to die() before unsetting the session data?

    echo "Table name: ". $tablename . "<br/>";
    echo "Id: " . $id. "<br/>";
    echo "Field name: " . $fieldname. "<br/>";
    echo "Field to update: " . $fieldToUpdate. "<br/>";
    die();//anything below here WILL NOT RUN
    // destroy the session after the update

    //this code will never run...
    $this->session->unset_userdata('tablename');
    $this->session->unset_userdata('recordid');
    $this->session->unset_userdata('fieldname');
    $this->session->unset_userdata('fieldToUpdate');

Because the script dies before ever reaching the unset_userdata code, the unset never runs. If you want to clear out the session data, you have to get rid of that die().

3) Why don't you just use POST?

echo form_open("video_edit");

if ($news['newsvideo'] !="") {
    echo form_hidden('fieldToUpdate','newvideo');
}
if ($news['newsvideo_en'] !="") {
    echo form_hidden('fieldToUpdate','newvideo_en');
}
echo form_hidden("tablename","news");
echo form_hidden("recordid",$news['newsid']);
echo form_hidden("fieldname","newsid");
echo form_hidden("dpage","news/editNews");

echo anchor("news/updateOneField", "Delete Video?","class=btn");

echo form_close();

Upvotes: 1

Related Questions