0

私の見解では、私は次のコードを持っています:

  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');
 }

私のコントローラーの機能は次のとおりです。

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);
    } 

ここで、ニュースビデオを削除したい最初のリンクをクリックすると、ニュースビデオフィールドを更新しようとすると、newsvideo_enが更新されます。つまり、後で配列の値を上書きします。誰かがそれを回避し、正しいフィールドを更新する方法を知っていますか?

よろしく、ゾラン

4

1 に答える 1

1

1)なぜ空とnullをチェックしているのですか?

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

あなたはおそらくただ使うことができます

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

not empty AND かどうかを確認するつもりでない限りnot null、その場合は

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

die()2)セッションデータの設定を解除する前に、スクリプトに指示するのはなぜですか?

    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');

スクリプトはコードに到達する前に終了するためunset_userdata、unsetは実行されません。セッションデータをクリアしたい場合は、それを取り除く必要がありますdie()

3)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();
于 2012-11-05T16:10:12.140 に答える