CI 묻고 답하기

제목 foreach문.. 라디오버튼 피드백좀 부탁드립니다 꾸벅.
글쓴이 초보프로그래머 작성시각 2014/10/22 14:27:17
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 17029   RSS
<?php foreach($milemilestone_data as $data): ?>
    <table class="bbsList">
    <tr>
        <td><input type="text" name="MILE_STEP" value="<?=$data->MILE_STEP?>" /></td>
        <td><input type="text" name="MILE_TITLE" value="<?=$data->MILE_TITLE?>" /></td>
        <td><input type="text" name="MILE_DATE" class="datepicker" value="<?=substr($data->MILE_DATE, 0, 10)?>" /></td>
        <td><input type="radio" name="STEP_COMP_YN" <? if($data->STEP_COMP_YN == "Y"){ ?> checked <? } ?> value="Y">달성  
                <input type="radio" name="STEP_COMP_YN" <? if($data->STEP_COMP_YN == "N"){ ?> checked <? } ?> value="N">미달성
        </td>
        <td class="last"><input type="button" onclick="btnmilemilestoneupdate(this);" value="수정" /></td>
    </tr>
    </table>
    <br/>
    <?php endforeach; ?>    
    

    


만약 이런식으로 5번 뿌려지는데요..
라디오버튼 name이 STEP_COMP_YN 이건데,,
중복되서, 값이 맨 끝에꺼밖에 표시가 안됩니다./.
foreach 문이 반복되면서...

뭐 for문이든 배열로 [0]~ [4] 까지 돌면서 이름이 바껴야 할것 같은데요...

피드백좀 부탁드립니다 ㅠㅠ
 
 다음글 mysql insert 시에 변수에 값이 없을 때 에러 (5)
 이전글 정말 초보자질문일것 같은데요 로그인 관련해서 문의 드립... (17)

댓글

아싸리비아 / 2014/10/22 15:23:35 / 추천 0
input name 명칭이 잘못되어있습니다.
input 을 감싸는 foreach문으로 인하여 name 값이 중복되고 
전송받는 쪽에선 의도하지 않은 값들이 처리 될수 있으니 수정이 필요해 보입니다.

보편적으로 input에서 다중값을 다룰때는 아래와 같은 방식으로 많이 합니다.

1. $i 는 자동 증가값처리
    name='MILE_STEP[<?=$i?>]'

2. 기존 값이 존재할경우 ( $i는 증가값 )
<input type="hidden" name="uid[<?=$i?>]" value="<?=데이터 고유값?>">
<input type="hidden" name="MILE_STEP[<?=데이터 고유값?>]" >
or
<input type="hidden" name="MILE_STEP[<?=$i?>]" >


등 형태로 input name값을 분리하며,

제일 중요한부분은 form submit을 받는 Controller 단에서 데이터를 어떻게 처리할것인가가
제일 중요한 부분입니다. 해당 Controller에서 받는형태에 따라서 form에서 던지는 형태가
정해지기 때문입니다.

 
초보프로그래머 / 2014/10/22 15:39:57 / 추천 0
네. 맞아요. 이름이 중복되서 만약 row가 두줄이면 한줄에 버튼 2개, 총 라디오버튼은 4개인데,
4개중에 1개밖에 선택이 안되네요..
이건 배열로 이름을 바꿔야 할것 같은데,, 팁좀요..ㅜㅜ
 
아싸리비아 / 2014/10/22 15:48:42 / 추천 0
위에 내용중 1,2번으로 방식 설명드린부분 응용하시면 가능하실걸로 보입니다.
초보프로그래머 / 2014/10/22 16:04:55 / 추천 0
<?php foreach($milemilestone_data as $data): ?>
    <table class="bbsList">
    <tr>
        <input type="hidden" name="MILE_SEQ" value="<?=$data->MILE_SEQ?>">
        <td><input type="text" name="MILE_STEP" value="<?=$data->MILE_STEP?>" /></td>
        <td><input type="text" name="MILE_TITLE" value="<?=$data->MILE_TITLE?>" /></td>
        <td><input type="text" name="MILE_DATE" class="datepicker" value="<?=substr($data->MILE_DATE, 0, 10)?>" /></td>
        <td><input type="radio" name="STEP_COMP_YN[<?=$i?>]" <? if($data->STEP_COMP_YN == "Y"){ ?> checked <? } ?> value="Y">달성  
                <input type="radio" name="STEP_COMP_YN[<?=$i?>]" <? if($data->STEP_COMP_YN == "N"){ ?> checked <? } ?> value="N">미달성
        </td>
        <td class="last"><input type="button" onclick="btnmilemilestoneupdate(this);" value="수정" /></td>
    </tr>
    </table>
    <br/>
    <?php $i++?>
    <?php endforeach; ?>

님 방식대로 응용해서 이렇게 되니까, 루프를 돌때마다 [0]~[4] 까지 나옵니다. 그럼 인제 이걸 컨트롤러나 모델에서 $this->input->post('STEP_COMP_YN'); 이걸 받아야 하는데, 배열을 어떡해 받아야 할지... 에휴..ㅠㅠ 이렇게초보적인것도 몰라서 저는... ㅠㅠ
아싸리비아 / 2014/10/22 16:26:06 / 추천 0
MILE_SEQ, MILE_STEP, MILE_TITLE, MILE_DATE 도 동일하게 해야 하지 않을까 싶습니다.
$this->input->post 로 불러올경우 array로 ($_POST와 동일) 반환하니, 

해당 정보를 받는 Controller 단에서도 for을 돌려서 처리하시면 될듯 보입니다.
우슨 프로그래밍 하실경우 print_r로 데이터를 찍어보시면서 프로그래밍하시면 
도움이 많이 되실겁니다.

print_r($this->input->post('....'));
초보프로그래머 / 2014/10/22 16:47:40 / 추천 0
감사합니다^^