2013-03-06 4 views
1

4 개의 체크 박스가 있으며 계속하려면 1을 입력해야합니다 (더 많이 체크하십시오). 그래서 네 개의 체크 박스를 만들었습니다 :PHP에서 적어도 1 개의 체크 박스가 선택되어 있는지 확인하십시오.

I have blue skin 
    <input class="cbox" type="checkbox" name="skin" value="Yes" /><br> 
    I have blue hair 
    <input class="cbox" type="checkbox" name="hair" value="Yes" /><br> 
    I have blue eyes 
    <input class="cbox" type="checkbox" name="eyes" value="Yes" /><br> 
    I have blue teeth 
    <input class="cbox" type="checkbox" name="teeth" value="Yes" /><br> 

이 데이터를 저장하려고합니다. 그러나 우선, 나는 이것들 중 적어도 하나가 점검되었음을 확인한다.

if(isset($_POST['sent']) && !(isset($_POST['skin']) || isset($_POST['hair']) || isset($_POST['eyes']) || isset($_POST['teeth']))) 

나는이 모든 것을 담은 목록을 저장하고 싶기 때문에 이것을 달성하는 가장 좋은 방법이라고 확신하지는 않습니다. 배열을 사용하는 것이 가장 좋은 방법이라고 생각합니다.

I have blue skin 
    <input class="cbox" type="checkbox" name="blue[]" value="skin" /><br> 

그리고이를 내포 된 텍스트 입력란에 저장하십시오. 새로운 것, 나는 이것을 달성하는 방법과 제가 읽고있는 튜토리얼을 다소 혼란스럽게합니다. 이 방법을 사용하면 배열이 비어있는 경우 대신 (4 개의 분리 된 isset가 아닌) 체크 할 수 있습니다. 그리고 $ _POST를 사용하여 배열을 처리하는 방법은 무엇입니까?

답변

0

결국 나는 다음과 같이 작업했다.

I have blue skin 
    <input class="cbox" type="checkbox" name="blue[]" value="skin" /><br> 

모두 4 동일한 방법을 사용합니다. 그렇다면 ...

if(isset($_POST['sent']) && empty($_POST['blue'])) { 
$bluedata = mysql_escape_string(implode(",",$_POST['blue'])); 
} 

그런 다음 해당 문자열을 데이터베이스에 기록했습니다.

희망이 있으면 도움이됩니다.

3

당신은 너무에, 다음
if(empty($_POST['appearance'])) 여부를 확인 name="appearance[skin]", name="appearance[hair]" 등을 사용하여 시도 할 수 있습니다. 비어 있으면 확인란이 선택되지 않습니다.

당신은 다음 $_POST['appearance']['skin']에 액세스 등등, 또는
foreach($_POST['appearance'] as $attribute=>$value)이 선택을 통해 반복하는 데 사용할 수 있습니다.

+0

체크 박스를 클릭하지 않으면'$ _POST [ 'appearance']'가 전혀 존재하지 않아야합니다. 즉, 빈 배열 대신에 설정되지 않습니다. 그러나'empty ($ _POST [ 'appearance']) '라는 체크는 두 경우 모두에 해당됩니다. – feeela

+0

@feeela 그래, 그게 내가 XD가 명확히하기 위해 편집 할 것임을 의미 한거야. –

0

당신은 배열에 모든 필드를 넣고 루프를 해당 배열을 통해 플래그를 설정할 수 있습니다 : $oneTicked에 해당하는 경우

$checkboxes = array('skin', 'hair', 'eyes', 'teeth'); 

$oneTicked = false; 
foreach($checkboxes as $checkbox) 
{ 
    if(!empty($_POST[$checkbox])) 
    { 
     $oneTicked = true; 
     break; 
    } 
} 

그런 다음 당신은 그냥 확인 할 수 있습니다.

+1

보내지 않은 모든 변수에 대해 정의되지 않은 색인 알림을 발생시킵니다. 그 대신'$ checkboxes' 배열에 키 이름을 저장 한 다음'if (empty ($ _ POST [$ checkbox]))'를 체크하십시오. 또한 검색을 계속할 필요가 없기 때문에 하나의 일치 항목이 발견되면 루프에서 '중단'을 고려하십시오. –

+0

좋은 아이디어! 내 대답을 업데이트했습니다. – Jamesking56

관련 문제