체크박스에 exploed를 쓰는데 3번째부터 안먹히네요..

체크박스에 exploed를 쓰는데 3번째부터 안먹히네요..

QA

체크박스에 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으로 있게되므로 오류를 방지할수있을겁니다.

http://shuai0.dothome.co.kr/demo/checkbox.php

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() 사용하시면 될거 같습니다.

<?php
$bad_words = array('||||', '|||', '||');
$good_words = array('|', '|', '|');

$change = str_replace($bad_words, $good_words, $change);
echo $change;
?>
한방에 하면 대강 이런식인가요?
텍스트가 아닌 식에도 대입이되는지 저도 궁금해지네요 ㅋㅋ

답변을 작성하시기 전에 로그인 해주세요.
전체 123,680 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT