체크박스에 exploed를 쓰는데 3번째부터 안먹히네요..
본문
//check1,check2,check3,check4,check5,
for ($s=0 ; $s<=sizeof($_POST['Ncheck1']); $s++){
$check1 .= ($s)?"|":"";
$check1 .= $Ncheck1[$s];
}
for ($s=0 ; $s<=sizeof($_POST['Ncheck2']); $s++){
$check2 .= ($s)?"|":"";
$check2 .= $Ncheck2[$s];
}
for ($s=0 ; $s<=sizeof($_POST['Ncheck3']); $s++){
$check3 .= ($s)?"|":"";
$check3 .= $Ncheck3[$s];
}
for ($s=0 ; $s<=sizeof($_POST['Ncheck4']); $s++){
$check4 .= ($s)?"|":"";
$check4 .= $Ncheck4[$s];
}
for ($s=0 ; $s<=sizeof($_POST['Ncheck5']); $s++){
$check5 .= ($s)?"|":"";
$check5 .= $Ncheck5[$s];
}
체크한 코드를 check1 DB에 넣는 코드 같은데 1 2 3 4 5 이렇게 5개 체크하는 옵션이 있으면 1,2는 비워놓고
3부터 체크를하게되면 || 이런식으로 쌓여서 그런지 인식이 안됩니다..
그리고 1체크하고 3체크하는 식으로 2개 떨어져있을때는 인식이 되지만 3개 이상 떨어져있을 경우
ex) 1체크 4체크 ,, 2체크 5체크 이런식의 경우 1체크 2체크만 인식이되고 4,5는 인식이 되지 않습니다..
"|"가 ||| 이렇게 3개이상 쌓여서 그런거 같은데 체크가 안되었을 때는 "|"가 안 쌓이게 해결할 수 있는 방법 없을까요..?
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
아래쪽은 write.php 소스입니다
case '4': // 체크박스
if($csconfig[$fvs]=='1' || $csconfig[$fvs]=='2'){
if($csconfig[$fvs]=='2') { $needstr = '<strong class="sound_only">필수</strong>'; }
else { $needstr = ''; }
$Arrays=optArray($fvs,$mdatas);
$ch_array[$fvs] = explode("|", $write[$fvs]);
echo '<tr>
<th scope="row"><label for="ca_name">'.$mdatas[$fvs]['iname'].$needstr.'</label></th>
<td>';
gen_single_checkbox("",'N'.$fvs,$Arrays,$Arrays,$ch_array[$fvs],'',$mdatas[$fvs]['size2']);
if($mdatas[$fvs]['bigo']) echo '<span class="text-muted font-12" style="margin-top:4px;">'.get_text($mdatas[$fvs]['bigo'], 1).'</span>';
echo '</td>
</tr>';
if($csconfig[$fvs]=='2') {
$javastr.="
kk=0;
for ( ii=0; ii < ".sizeof($Arrays)." ; ii++ ){
if (document.fwrite.N".$fvs."[ii].checked) {kk=1; ii=".sizeof($Arrays)."; }
}
if(kk<1){ alert('".$mdatas[$fvs][iname]."을(를) 선택하여 주십시오.'); document.fwrite.N".$fvs."[0].focus(); return false ; }
";
}
} break;
답변 4
// 올려주신 내용에서
// 답변이 어려운내용들이 몇개 있습니다.
1. 여기에서 $fvs 가 뭔가요?
2. optArray가 넘겨주는 값은, 즉 $Arrays 에 들어가는 값이 무엇인지(텍스트로라도 표현해주셔야 할듯 싶습니다.)
3. gen_single_checkbox 의 역할(기능)은 무엇인가요?
그리고, |로 이어붙이는 옵션을 만들때
||| 의 방식으로 붙게 하지 않으려면
입력되는 값 자체를
체크안된건 |0| 으로 처리되게하세요
모든값을 다 넣고,
즉,
for ($s=0 ; $s<=sizeof($_POST['Ncheck5']); $s++){
$check5 .= ($s)?"|":"";
$check5 .= $Ncheck5[$s];
}
를
for ($s=0 ; $s<=sizeof($_POST['Ncheck5']); $s++){
if ($s)
$check5 .= "|";
if ($Ncheck5[$s])
$check5 .= $Ncheck5[$s];
else
$check5 .= "0";
}
와 같이 만들어서 값이 없는경우 0으로 인식하고 처리되게 하시면
explode로 분할할경우에도 값이 0으로 있게되므로 오류를 방지할수있을겁니다.
for 구문 안에 if함수를 넣으면 어떤가요?
예를들면
for ($s=0 ; $s<=sizeof($_POST['Ncheck5']); $s++){
if( $s=0 ; $s<=sizeof($_POST['Ncheck5']); $s++){
$check5 .= ($s)?"|":"";
$check5 .= $Ncheck5[$s];
}else{
$check5 .= ($s)?"":"";
$check5 .= $Ncheck5[$s];
};
}
이런식으로요...
어렵게 생각할수도 있지만
간단하게 생각하면 "||" 를 "|" 으로 치환하는걸 한 3번 정도 하면 될거 같은데요?
str_replace() 사용하시면 될거 같습니다.