Reputation: 1371
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
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