CI 묻고 답하기

제목 제이슨 형식으로 db에 값 넣은 후 수정하기하면 값이 지워집니다..
카테고리 CI 2, 3
글쓴이 개멧 작성시각 2017/07/20 17:24:25
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 14147   RSS

제이슨 형식으로 db에 값 넣은 후 수정하기하면 값이 지워집니다..

무슨 방법으로 해야 값 유지가될까여..

 

예를들면 이미지 4개가있는데

처음에 4개 등록은 잘됩니다

그 후에 3번쨰꺼만 수정하고 다시 저장하면

1,2,4 번은 날라가고 3번만 수정된걸로 db에 입력됩니다.

도움좀 주세요..!

컨트롤러
private function _addNews()
    {
        $this->load->helper(array('mobon_upload', 'security', 'replace_str_helper'));

        $arrPost = $this->input->post(NULL, TRUE);
        $oPost = (object) $arrPost;

        $arrRatingInfo[] = [
            'ctg' => $this->input->post('ctg', true),
            'rating' => $this->input->post('rating', true),
        ];
        $arrRatingInfo[] = [
            'ctg' => $this->input->post('ctg_two', true),
            'rating' => $this->input->post('rating_two', true),
        ];
        $arrRatingInfo[] = [
            'ctg' => $this->input->post('ctg_thr', true),
            'rating' => $this->input->post('rating_thr', true),
        ];

        $jsonRatingInfo = json_encode($arrRatingInfo);

        $card_img_info = [];
        if( ! empty($_FILES['cardImg_1'])) {
            $card_img_info[0] = saveCpiImage("cardImg_1", do_hash(microtime(), 'md5'), 'Fourcardnews', APPMOA_FOUR_CARDNEWS_IMAGE_URL); // 저장될 파일 경로
        }

        if( ! empty($_FILES['cardImg_2'])) {
            $card_img_info[1] = saveCpiImage("cardImg_2", do_hash(microtime(), 'md5'), 'Fourcardnews', APPMOA_FOUR_CARDNEWS_IMAGE_URL); // 저장될 파일 경로
        }

        if( ! empty($_FILES['cardImg_3'])) {
            $card_img_info[2] = saveCpiImage("cardImg_3", do_hash(microtime(), 'md5'), 'Fourcardnews', APPMOA_FOUR_CARDNEWS_IMAGE_URL); // 저장될 파일 경로
        }

        if( ! empty($_FILES['cardImg_4'])) {
            $card_img_info[3] = saveCpiImage("cardImg_4", do_hash(microtime(), 'md5'), 'Fourcardnews', APPMOA_FOUR_CARDNEWS_IMAGE_URL); // 저장될 파일 경로
        }

        $jsonCardNews = json_encode($card_img_info);

        $arrNews = array(
            'no' => $oPost->no,
            'title' => replace_special_charater($oPost->title),
            'journal_list_no' => $oPost->journalist,
            'card_img_info' => $jsonCardNews,
            'rating_info' => $jsonRatingInfo,
            'app_no' => $oPost->app_no,
        );

        if(isset($_FILES['thumbnail_img']) === TRUE) {
            $thumbnail_img = saveCpiImage("thumbnail_img", do_hash(microtime(), 'md5'), 'thumbnail', APPMOA_FOUR_CARDNEWS_IMAGE_URL); // 저장될 파일 경로
            if($thumbnail_img) {
                $arrNews['thumbnail_img'] =  $thumbnail_img;
            }
        }

        $oNews = (object) $arrNews;
        echo $this->FourcardnewsService->addNews($oNews);
    }
서비스
public function addNews($oNews)
    {
            //$this->output->enable_profiler(TRUE);
        $this->load->model('Fourcardnews/Fourcardnews_service', 'FourcardnewsService');
        if(isset($oNews->no) === TRUE && empty($oNews->no) === FALSE) {

            $arrCardImgList = json_decode($oNews->card_img_info);

            if(isset($oNews->card_img_info) === true OR empty($oNews->card_img_info) === false) {
                for ($i = 0; $i < 4; $i++) {
                    if ( ! empty($arrCardImgList[$i])) {
                        $arrCardImgList[$i] = $arrCardImgList[$i];
                    }
                }
            }

            $arrSet = array(
                'title' => $oNews->title,
                'rating_info' => $oNews->rating_info,
                'journal_list_no' =>$oNews->journal_list_no,
                'app_no' =>$oNews->app_no,
                'card_img_info' => json_encode($arrCardImgList),
            );

            $arrWhere = array(
                'no' => $oNews->no,
            );

            if(isset($oNews->app_no) === FALSE OR empty($oNews->app_no) === TRUE) {
                $arrSet['app_no'] = NULL;
            }

            if(isset($oNews->journal_list_no) === FALSE OR empty($oNews->journal_list_no) === TRUE) {
                $arrSet['journal_list_no'] = NULL;
            }

            /*처음에 썸메일 이미지 없이 등록 후 다시 수정하면..*/
            if(isset($oNews->thumbnail_img) === TRUE OR empty($oNews->thumbnail_img) === FALSE) {
                $arrSet['thumbnail_img'] = $oNews->thumbnail_img;
            }

            $this->FourcardnewsModel->update($arrSet, $arrWhere);
            $msg = '수정';

        } else {
            if(isset($oNews->app_no) === FALSE OR empty($oNews->app_no) === TRUE) {
                $oNews->app_no = NULL;
            }

            $new_news_no = $this->FourcardnewsModel->insert($oNews);
            $msg = '등록';
        }

        $msg .= "에 성공 했습니다.";
        return jsonResult(TRUE, $msg, FALSE);
    }

 

db에 저장되는 값은 json 형식 입니다

 다음글 $this->db->update($this-... (4)
 이전글 계층형 댓글 정렬 질문입니다. (4)

댓글

유창화 / 2017/07/21 09:51:23 / 추천 0

이부분은 제가 보기에는

등록시와는 다르게 수정시에는 필용한것만 업데이트 하는데

그게 한 필드에 json_encode 한 상태로 들어가기 때문에

이번에 수정한 이미지만 저장되는 것입니다.

 

이런경우 수정시에는

기존 저장된 데이터를 json_decode 해 논 상태에서

업데이트 되는 이미지만 교체 해서 다시 json_encode 해서 저장하셔야 합니다.