CI 묻고 답하기

제목 controller에서 넘겨준 객체,배열 -> view, 객체 radio버튼 체크 하기
카테고리 일반
글쓴이 배고프당 작성시각 2017/04/06 21:33:49
댓글 : 13 추천 : 0 스크랩 : 0 조회수 : 1864   RSS

쌩초짜가 질문을 올립니다 ㅜㅠ

마땅히 제목을 지으려니 쉽지가 않네요 ㅠㅠ

 

모델에서 where를 이용하여 해당 study_id값을 찾았습니다.

	public function get_arr_it_study($study_id)
	{
		echo '<br/>-----Study_items_m - get-----<br/>';
		// items에서 수정하고자 하는 현재 study_id 값 불러오기

		$this->db->where('study_id', $study_id);
		$study_query = $this->db->get('study_items');
		return $study_row = $study_query->result();
	}

 

// study에서 수정하고자하는 현재 study_id 값 불러오기
		$study_row = $this->study_m->get_where_table($study_id);
		// items에서 수정하고자 하는 현재 study_id 값 불러오기
		$items_row = $this->study_items_m->get_arr_it_study($study_id);

		switch ($study_row->study_category) {
			case '0':	//도서
					// $current = $this->db->insert_id();
// ---------------------------- study_items 값 불러오기 test code 작성 중 ----------------------------
					$data = array(
						'tests_study'	=>	$study_row,
						'test_items'	=>	$items_row,
					 	// 업로드 파일에 대한 정보.
						'uploads_path'	=> './uploads',
						'src'   => './uploads',
						'alt'   => '이미지를 선택해 주세요',
						'class' => 'post_images',
						'width' => '200',
						'height'=> '200',
						'title' => 'That was quite a night',
						'rel'   => 'lightbox'
					);

컨트롤러에서 $data = array(

'tests_study' => $study_row,

'test_items' => $items_row,

식으로 모델에서 값을 저장해서 view로 보내주었습니다.

 

넘어오는 값을 var_dump()로 찍어보면 다 나옵니다.

문제는 해당 항목(책의 챕터가 여러개 이다보니...)

<input type="radio" name="study_item_level[<?php $cnt ?>][level]" value="1" checked= "<?php echo $row->study_item_level == 1? "checked":""  ?>"> 레벨1 <?php $cnt++; ?>

에서 name이..한개씩출력해서 보는건 되는데..정작

foreach문을 이용해서 할때는 name =" ---요 부분---" 을 코딩을 해줘야 할지 모르겠습니다..ㅠㅠ

아래처럼 나오고 각각을 echo, var_dump로 처리해서 한개씩확인할땐 되는데..

obj의 갯수가 입력한것에 따라서 변동적이다 보니 HTML에서 컨포넌트에 name이 중복될때 처리하는 방법이 미숙합니다.. 어떻게 처리해야 하나요??

[0]=>
  object(stdClass)#25 (5) {
    ["study_item_id"]=>
    string(3) "177"
    ["study_item_name"]=>
    string(3) "ㅇ"
    ["study_id"]=>
    string(3) "100"
    ["study_item_level"]=>
    string(1) "1"
    ["study_item_checkable"]=>
    string(1) "0"
  }
  [1]=>
  object(stdClass)#26 (5) {
    ["study_item_id"]=>
    string(3) "178"
    ["study_item_name"]=>
    string(3) "ㅇ"
    ["study_id"]=>
    string(3) "100"
    ["study_item_level"]=>
    string(1) "2"
    ["study_item_checkable"]=>
    string(1) "0"
  }

 

간략히 정리해보면..;;

1. study, study_items 라는 2개의 테이블이 있습니다

2. 두 테이블에 공통으로 study_id(pk(db용어가 많이 약합니다 ㅠㅠ ))가 있고 이 컬럼을 이용합니다

3. 컬럼 값이 정해지면, 해당 컬럼값을 포함 하고 있는 테이블의 내용을 뷰(view)에서 radio버튼(버튼은 5개사용합니다.)에 체크를 해서 보여줍니다.

-> 막히는 부분이..

radio버튼을 5개중 한개의 값을 처리하는 상황인데 name이 중복될 때 name=" - 이부분- "에서 어떤식으로 코딩을 해야 하는지 감조차 못 잡고 있어 부득이 질문하게 되었습니다 ㅠㅠ

 

 다음글 GD2 라이브러리 관련 오류 : libMagickWan... (2)
 이전글 혹시 페이지네이션의 뒷쪽인 page/1 or page/... (4)

댓글

한대승(불의회상) / 2017/04/07 08:52:31 / 추천 0

form 헬퍼의 form_radio() 함수를 사용하면 쉽게 처리할 수 있을것 같습니다.

http://www.ciboard.co.kr/user_guide/kr/helpers/form_helper.html

배고프당 / 2017/04/07 12:25:33 / 추천 0

불의회상

댓글 감사합니다 ㅠㅠ 초보를 떠나서 작성후 보니 제가 봐두 인간이 작성한 글이 아님에 죄송한마음이 많았는데..

감사합니다 ㅠㅠ 결과는 댓글로 남겨 놓겠습니다~

배고프당 / 2017/04/13 13:40:23 / 추천 0
foreach ($test_items as $row){

    echo '<br>' .'결과' . '<br>' . ' | ' . '1a : ' . (($row->study_item_level == 1)? 'O':'X') . ' | ';
    echo '2a : ' . (($row->study_item_level == 2)? 'O':'X') . ' | ';
    echo '3a : ' . (($row->study_item_level == 3)? 'O':'X') . ' | ';
    echo '4a : ' . (($row->study_item_level == 4)? 'O':'X') . ' | ';
    echo '5a : ' . (($row->study_item_level == 5)? 'O':'X') .'<br/>';

}

으로 사용할땐 잘 나오는데...

HTML코드가 가미가 되는 순간...

음식이 아닌 흉기가 나옵니다 .ㅠㅠ

 

<div class="form-group">
 	<label class="col-sm-2 control-label" for="arrange">항목</label>
 	<div class="col-sm-6">
 		<input class="form-control" type="text" name="study_item['+study_item_count+'][name]" placeholder="항목 입력">
 	</div>
 	<div class="col-sm-4">
 		<label class="radio-inline">
 			<input type="radio" name="item1" value="1" checked="checked">레벨1
 			<?php echo $cnt . '<br>'; ?>
 		</label>
 		<label class="radio-inline">
 			<input type="radio" name="item2" value="2" checked=" ">레벨2
 		</label>
 		<label class="radio-inline">
 			<input type="radio" name="item3" value="3" checked="checked">레벨3
 		</label>
 		<label class="radio-inline">
 			<input type="radio" name="item4" value="4" checked=" ">레벨4
 		</label>
 		<label class="radio-inline">
 			<input type="radio" name="item5" value="5" checked="checked">레벨5
 		</label>
 		     
 		<label class="checkbox-inline">
 			<input type="checkbox" name="study_item['+(study_item_count++)+'][checkable]" value="1"> 체크가능
 		</label>
 	</div>
 </div>

 

HTML코드를 첨부했습니다.

버튼 부분입니다.

name처리를 제가 못하는거 같은데.. 잘 모르겠습니다 ㅠㅠ

버튼은 진도 체크를 하기위해서 사용하고 5개 +1개 총 6개입니다.

이 6개가 한 묶음으로, 이 묶음의 갯수가 달라집니다.

ex) 기본 1개이상, 많은건 진도체크할게 많을경우 추가 페이지에서 몇개 추가 하느냐에 따라 달라집니다~

변종원(웅파) / 2017/04/13 14:10:55 / 추천 0
라디오는 이름이 같아야하죠. ^^
kaido / 2017/04/13 14:11:39 / 추천 0

radio 의 name 을 저렇게 주시면 총5개의 [각자 다른] 버튼이 만들어집니다

name에 뒤에 숫자 제거하시고 item 으로 이름을 통일시켜주세요.

 

 <input type="radio" name="item" value="1"  <?=($row->study_item_level == $i)? "checked='checked'":"" ?> />레벨1

$i++ 넣으시고 만드시면 끝.

 

한대승(불의회상) / 2017/04/13 16:14:54 / 추천 0
모양은 radio 인데 원하시는 결과는 checkbox 같네요.
배고프당 / 2017/04/13 16:56:29 / 추천 0

불의화상,kaido

두분 감사합니다 >_<

아...^^;;

진도를 체크하는 부분을 만들려고 한 상태에서 구분을 어떻ㄱㅔ 주어야 할지 몰라서요 ㅠㅠ 

배고프당 / 2017/04/13 17:13:29 / 추천 0

kaido

챕터에 레벨 구분을 어떻게 해주어야 할지 마땅히 아이디어가 안 떠올라서 임시로 각각의 radio버튼을 5개로 만들어서 사용하기해서 저런 회괴한 

흉기가 되었습니다^^: 

몇번 다듬을 생각하고 해보는 중입니다~!

 

배고프당 / 2017/04/13 17:20:47 / 추천 0
<?php foreach($test_items as $row): ?>
 <div class="form-group">
 	<label class="col-sm-2 control-label" for="arrange">항목</label>
 	<div class="col-sm-6">
 		<input class="form-control" type="text" name="study_item['+study_item_count+'][name]" placeholder="항목 입력">
 	</div>
 	<div class="col-sm-4">
 		<label class="radio-inline">
 			<input type="radio" name="item" value="1" checked="<?php (($row->study_item_level == 1)? "checked":"") ?>">레벨1
 			<?php echo $cnt . '<br>'; ?>
 		</label>
 		<label class="radio-inline">
 			<input type="radio" name="item" value="2" checked="<?php (($row->study_item_level == 2)? "checked":"") ?>">레벨2
 		</label>
 		<label class="radio-inline">
 			<input type="radio" name="item" value="3" checked="<?php (($row->study_item_level == 3)? "checked":"") ?>">레벨3
 		</label>
 		<label class="radio-inline">
 			<input type="radio" name="item" value="4" checked="<?php (($row->study_item_level == 4)? "checked":"") ?>">레벨4
 		</label>
 		<label class="radio-inline">
 			<input type="radio" name="item" value="5" checked="<?php (($row->study_item_level == 5)? "checked":"") ?>">레벨5
 		</label>
 		     
 		<label class="checkbox-inline">
 			<input type="checkbox" name="study_item['+(study_item_count++)+'][checkable]" value="1"> 체크가능
 		</label>
 	</div>
 </div>
<?php endforeach; ?>

 

전혀 상관없는 5에 체크가 되는 경우라 원인을 찾기 쉽지 않네요^^;;;

 

 

DB에는 구분되어서 저장이 되는뎁 ㅠㅠ

php, HTML 에 믹스가 되니 ㅎㅎ ㅠㅠ

kaido / 2017/04/14 09:50:03 / 추천 0

실례인줄 알면서 지적을 좀 해드리자면... 루프문 작성이 익숙하지 않으신 것으로 보이십니다.

사실 저도 꽤 오랫동안 적응 못했거든요 ㅎㅎ

 

우선 라디오 체크 박스는 둘째치고 이렇게 생각 하세요.

 

1. 몇번 반복 해야 하는가?

2. 반복 문중에서 어떤 값이 다르게 들어가는가?

이 2가지를 우선 차분히 생각 하세요.

 

10개 미만 정도면 일일이 원하는 수준의 출력을 만들어 놓고 10개중 1개의 값만 빼고 나머지 9개는 주석 하신다음 10번 반복 해보세요. [보기에는 5개이니 5번]

그리고 여기서 내가 원하는 값만 다른 조건 문을 한번 넣어고 확인해 보세요.

 

PS. 루프문 하신다고 foreach 에 맞도록 굳이 배열값을 만드실 필요는 없습니다.

 

루프문으로 한번 해결해 보시고, 그다음에는 불회님이 언급 하신 대로 CI 기능을 이용해서 해결해 보세요.

http://www.ciboard.co.kr/user_guide/kr/helpers/form_helper.html

 

배고프당 / 2017/04/14 11:48:30 / 추천 0

kaido 

^^; 더디지만 익숙해지려고 많이 접해보고 있습니다.

특히나 HTML, php, javascript가 믹스가 되가는 상황에선 가히 멘탈이 탈탈탈 털리고 있습니다 ^^ㅋ

그런데, echo로 찍을때는 문제 없는게 HTML 컨포넌트를 이용하면 엉뚱한 결과를 초래하는게 뭐가문제 인지 모르겠습니다 ㅠㅠ

kaido / 2017/04/14 11:53:30 / 추천 0

누가 먼저 실행되고, 누가 먼저 출력되는지 부터 이해하시면 쉽습니다.

실행 순서는 php > js > html 순으로 시작 되며, 출력은 html > js > php 순으로 엘리먼트를 완성해 갑니다.

가령

<script>

var  item = <?echo $item; ?>
</script>

이런 문구가 있다면 실행 순서와 그리는 순서를 생각 해보시면 됩니다.

실행은 php가 먼저 되나, 엘리멘트 완성은 var item 을 그리고 나서 php의 item 값이 들어 갑니다.

이것만 이해하시면 짜파게티 소스 두렵지 않습니다.

배고프당 / 2017/04/14 12:07:54 / 추천 0
kaido님 감사합니다^^