개발 Q&A

제목 foreach에서의 form value 보내기
글쓴이 jake 작성시각 2012/03/12 13:22:12
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 22786   RSS
안녕하세요

foreach 문을 사용해서 5개의 item 을 불러오고

그중 하나를 선택을 하면 해당값을 form문장의 value 로  보내려고 합니다.

하지만 input 값을 foreach 각각의 아이템에 붙여주니까

5개의 value 가 동시에 있는걸로 착각하더군요

이런경우는 어떻게 분류 해줘야 원하는 value 값만 post로 인식 되는건가요?
 다음글 git이 궁금합니다 ㅠㅠ (3)
 이전글 AA형 폐 건전지 대량으로 모을곳이 있을까요? (1)

댓글

변종원(웅파) / 2012/03/12 15:09:40 / 추천 0
 셀렉트로 처리하셔야 할 것 같네요
소울펨 / 2012/03/26 20:02:47 / 추천 0

코드를 보고싶어요 코드 올려주시면 정확한 답변이 될듯 합니다.

select 이용해서 네임명이 같으면 하나의 값만 post로 넘어가긴 합니다 jake님

mixiaoli / 2026/03/16 15:10:40 / 추천 0

지금 상황은 foreach 안에서 input을 5개 만들었기 때문에, form 입장에서는 5개의 입력값이 전부 존재하는 것으로 처리되는 것입니다.
즉, “하나만 선택해서 보내고 싶다”면 입력창도 하나만 실제로 submit 되도록 만들어야 합니다.

보통 방법은 2가지입니다.

1. 하나만 선택할 거면 radio를 사용

가장 간단합니다. 같은 name을 주고 value만 다르게 하면, 선택된 1개만 POST 됩니다.


 
 
<?php foreach ($items as $item) : ?>
<label>
<input type="radio" name="item_value" value="<?php echo $item->id; ?>">
<?php echo $item->name; ?>
</label>
<?php endforeach; ?>
 

이렇게 하면 서버에서는


 
 
$_POST['item_value']
 

하나만 받게 됩니다.


2. hidden 하나만 두고, 클릭한 값만 넣기

디자인상 radio를 쓰기 싫으면, 숨김 input은 딱 1개만 만들고
목록에서 클릭할 때 그 값만 바꿔 넣으면 됩니다.


 
 
<input type="hidden" name="item_value" id="item_value">

<?php foreach ($items as $item) : ?>
<a href="#" onclick="document.getElementById('item_value').value='<?php echo $item->id; ?>'; return false;">
<?php echo $item->name; ?>
</a><br>
<?php endforeach; ?>
 

이 경우에도 POST 되는 값은 item_value 하나뿐입니다.


왜 지금처럼 되느냐

예를 들어 foreach 안에서 이런 식이면:


 
 
<input type="text" name="item_value" value="1">
<input type="text" name="item_value" value="2">
<input type="text" name="item_value" value="3">
 

브라우저는 같은 이름의 값이 여러 개 있다고 판단합니다.
그래서 원하는 “하나의 선택값”이 아니라, 여러 개의 입력값으로 인식하게 됩니다.


정리

  • 하나만 선택radio 또는 hidden 1개 + 클릭 시 값 변경

  • 여러 개 전송name="item_value[]" 배열로 처리

게시판 답변용으로는 이렇게 쓰셔도 됩니다.


 
 
foreach 안에서 input 을 5개 만들면
form 에서는 5개의 값이 모두 존재하는 것으로 인식합니다.

그래서 하나만 선택해서 보내고 싶으시다면
input 도 하나만 실제로 submit 되도록 하셔야 합니다.

가장 쉬운 방법은 radio 를 사용하는 것입니다.

<input type="radio" name="item_value" value="값">

이런 식으로 같은 name, 다른 value 를 주면
선택된 1개만 post 됩니다.

만약 radio 말고 클릭 방식으로 처리하고 싶다면
hidden input 을 하나만 만들고,
foreach 목록에서 클릭할 때마다 그 hidden 값만 바꿔 넣으시면 됩니다.

즉 핵심은
foreach 안에 submit 대상 input 을 여러 개 만들지 말고,
실제로 전송될 값은 1개만 두는 것입니다.