CI 묻고 답하기

제목 컨트롤에서 디코딩 후 뷰에 출력하기
글쓴이 비오는날 작성시각 2014/02/20 18:56:18
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 17681   RSS
아무래도 엉뚱한 곳에다가 삽질을 하는 것 같아 질문을 던져봅니다.

생초보이니 엉뚱하더라고 이해 부탁드립니다.

어제 웅파님과 불의회상의 도움을 받아 db에서 불러온 값을 뷰에 출력하고 난 뒤

2차로  컨트롤에서 인코딩하여 db에 저장한 값을 뷰에 불러오기를 시도해 보았습니다.

일단 뷰에서 디코딩하여 암호화된 db값을 복호화하는 것은  잘 되는 것 같아

이번에는 컨트롤에서 디코딩하여 뷰에 db 값을 출력하려고 하는데

문제가 생겼습니다.

뷰에 출력되는 값은 db상의 가장 마지막 값만 되니다. 앞에 입력된 값은 싸악 무시하고요.

제가 의도하는 것은 인코딩하여 db에 저장된 모든 값을 컨트롤에서  디코딩하여

뷰에서 보는 것인데 db상의 마지막 값만 출력되니 갑자기 나침반을 바다에 떨어트린 항해사가 된

기분입니다.

아무래도 제가 엉뚱한 삽질을 하고 있는 것고 어떤 것으로 다시 시작해야 될지 감이 오지 않아

여러 고수님들의 조언을 부탁드립니다.

인코딩하여 db에 저장된  값을 컨트롤에서 디코딩하여 뷰에 몽땅 출력시키려면 어떻게 해야할까요!

도와주세요!!!!
컨트롤입니다.
 function gets(){        
     
        $this->load->model('dbtest_m');
        $data['gets']=$this->dbtest_m->gets();
        $this->load->library('encrypt');
        foreach ($data['gets'] as $row) {
     
        

            }
            $ss4=array('ss'=>$this->encrypt->decode($row->name),
                      'sss'=>$this->encrypt->decode($row->phon),
                      'ssss'=>$this->encrypt->decode($row->bd));
            $this->load->view('gets_v',$ss4);
      
       }



모델입니다.


 function gets(){
        $query = $this->db->query("select * from test;");
        return $query->result();
    }


뷰입니다.


<html>


<?php
      
         echo $ss;
         echo ".";
         echo $sss;
         echo ".";
         echo $ssss;

?>
</html>

 다음글 select시 값이 없을때 처리하는법좀 알려주세요 (6)
 이전글 include를 적용하려면 ? (5)

댓글

변종원(웅파) / 2014/02/20 21:43:02 / 추천 0
$ss4=array('ss'=>'aa); <- 이렇게 하면 $ss4 변수에 똑같은 내용만 계속 들어가죠.
당연히 맨 마지막 값만 나옵니다.

$ss4[] = array(...); 이렇게 해줘야 합니다.
비오는날 / 2014/02/20 22:39:28 / 추천 0
 웅파님 가르쳐 주신대로 컨트롤을 

 function gets(){        
     
        $this->load->model('dbtest_m');
        $data['gets']=$this->dbtest_m->gets();
        $this->load->library('encrypt');
        foreach ($data['gets'] as $row) {
     
        

            }
            $ss4[] = array('ss'=>$this->encrypt->decode($row->name),
                      'sss'=>$this->encrypt->decode($row->phon),
                      'ssss'=>$this->encrypt->decode($row->bd));
            $this->load->view('gets_v',$ss4);
      
       }



해당 부분에 [ ]을 삽입했습니다.

그리고 나더니 뷰에서 정의되지 않은 변수라고 에러 메세지가 뜨네요.

그래서 이런 저런 방법으로 컨트롤과 뷰를 수정해 보았는데 역시나

각종 에러만 뜨고.........

삽질만 하다가 다시 한번 올려봅니다.

혹시 좀더 생각해 보라고 힌트만 살짝 주신거라면

조금만 더 주세요.

평안한 밤 되세요.
변종원(웅파) / 2014/02/20 23:49:16 / 추천 0
아직 컨트롤러에서 뷰로 데이터 전달하는 방식을 숙지하지 못하셨네요.

$ss4[] <- 최종 값만 들어가는 것을 배열로 담아 처리하도록 말씀드린거구요.

뷰에 전달해서 뷰에서 $ss4라는 이름으로 사용하려면 어떻게 해야할까요?

답 알려드리면 아주 간단하지만 왜 그렇게 되는지 이해하시라고 힌트만 드립니다.
비오는날 / 2014/02/21 08:42:28 / 추천 0
 웅파님 다시 한번 질문 올립니다.

새벽부터 여태 삽질만 하네요. 개념 자체가 부족한 것 같습니다.

$ss4[]에 최종값을 넣으라는 말씀은 'ss'=>$this->encrypt->decode($row->name)라는
전체적인 내용을 넣지 말고 
'ss' 라는 값을 먼저 정의한 뒤에
$ss4[변수명]=array('ss',sss','sss')라는 식으로 넣고

이것을 뷰에 전달한 뒤에 뷰에서 출력하라는 말씀이시가요?

http://codeigniter-kr.org/user_guide_2.1.0/general/views.html  도 참고하고

뷰에서 foreach도 다시 넣어보고 

아무래도 어떤 개념자체가 명확하게 잡혀 있지 않아 그런 것 같아 더 속상합니다.

새벽부터 삽질하고 있는데 한번 더 힌트를 주셨으면 합니다.

참고할만한 예문이라도 알려주세요.

그럼 수고하세요.
 

변종원(웅파) / 2014/02/21 10:29:42 / 추천 0
자. 간단하게 정리해드릴께요.

컨트롤러에서는 2차배열로 넘깁니다.  
2차 배열을 사용하는 이유는 컨트롤러에서 데이터를 여러 개 넘길 수 있기 때문입니다.

$data['one'] = array('a','b');
$data['two']  = array('c',''d');
$this->load->view('a', $data);

뷰에서는 다음과 같이 사용합니다. 컨트롤러에서 넘긴 배열의 키가 변수명이 됩니다.
$one (내용은 array('a','b'))
$two (내용은 array('c','d'))

위 질문에서 $ss4라는 변수명을 뷰에서 사용하고 싶으시다면 $data['ss4'][] 이런식으로 담아야 하고
또는 foreach가 끝나고 $data['ss4'] = $ss4; 라고 넣어주시면 됩니다.

데이터가 잘 만들어졌는지 컨트롤러나 뷰에서 출력해보세요. 기본입니다.

var_dump(변수명) 또는 print_r(변수명)
비오는날 / 2014/02/21 12:32:32 / 추천 0
 점심 식사 맛있게 하셨는지요?

답변을 확인한 뒤 쉬는 시간에 이어 한손에는 젓가락을

한손은 키보드 위를 열심히 헤매고 있습니다.

배열을 파고 들다가 가정 먼저 배열을 사용하려고 했는지를 놓치고 말았습니다.

제 DB에는 다음과 같은 값이 있습니다.

id   name   phon     bd
1       1            2          3 
2     한식    중식      양식
3       A           B           C

이렇게 3행 3컬럼에 값이 있습니다.

실제로는 db 입력값은 컨트롤에서 암호화를 걸쳐 저장되어 있으며

1차 시도에서 뷰에서 복호화를 걸쳐 9개의 값을 모두 정상적으로 불러오는 데 성공 했습니다.
컨드롤

 function gets(){        
     
        $this->load->model('dbtest_m');
        $data['gets']=$this->dbtest_m->gets();
        $this->load->library('encrypt');       
        $this->load->view('gets_v', $data);
       }


뷰에서 복호화 후 출력

<?php
      foreach ($gets as $row) {
         
         echo $this->encrypt->decode($row->name);
         echo $this->encrypt->decode($row->phon);
         echo $this->encrypt->decode($row->bd);
      }

?>

출력결과

123한식 중식양식ABC
여기까지는 성공한 뒤에 2차로 컨트롤에서 복호화 과정을 모두 거치고 난 뒤

그 값을 뷰에서 출력하려고 했는데 변수가 db에 저장된 마지막 값인 'ABC'만 출력되더라구

그래서 array의 사용까지 온 것입니다.(이게 맨위에 첫번째 글인데 제 설명이 조금 빈약했던 모양입니다.)

웅파님의 도움으로 다음과 같이 코드를 일부 수정하여 돌렸더니
컨트롤에서 복호화 후 

function gets(){        
     
        $this->load->model('dbtest_m');
        $data['gets']=$this->dbtest_m->gets();
        $this->load->library('encrypt');
        foreach ($data['gets'] as $row) {
     
        

            }
            $data1['ss4'] = array('ss'=>$this->encrypt->decode($row->name),
                      'sss'=>$this->encrypt->decode($row->phon),
                      'ssss'=>$this->encrypt->decode($row->bd));
            
            $this->load->view('gets_v',$data1);
      
       }


뷰에서 출력


<?php  
foreach($ss4 as $item):?>

<?php echo $item;?>

<?php endforeach;?>
 

 결과
A B C
마찬가지로 db의 마지막 값만 출력되네요!

모델에서의 쿼리 명령은 둘다 입니다.
 function gets(){
        $query = $this->db->query("select * from test;");
        return $query->result();
    }
컨트롤에서 array로 복호화 과정을 배열하는 과정에서 문제가 있는 것일까요?

제가 의도하는 바는 컨트롤에서 3행의 모두 값을 복호화 하여
뷰에 출력하는 것인데.......
뷰에서 복호화 할때랑
컨트롤에서 복호화할 때랑 결과가 달라 당황스럽네요.

모두 즐거운 점심시간 보내세요!


 
변종원(웅파) / 2014/02/21 14:13:28 / 추천 0
제 답글 다시 보세요. 그리고 php 배열 부분 찾아서 보시구요.

ci문제는 벗어났습니다.