Extra Form
PHP PHP 7.3
CMS XpressEngine

상품권 매입 신청서를 제작중인데

 

input type text 를 추가 및 제거 해주는 소스를 찾아 넣고 

추가까지 가능해졌습니다.

현재 기본적으로 등록되어있는 input type text 의 name.value 값으로는 정상적으로 출력이 잘됩니다.

근데 동적으로 추가된 input type text의 name.value값을 스크립트에 다 추가해놓은후에
텍스트 박스를 추가하지않으면  오작동이 됩니다. 

어떻게 해결해야할지 궁금합니다.

캡처.PNG

[소스코드 복사용]

function rm_comma(num){
   var number = num + "";
   return number.replace(",",""); 
}
function submit_request(f) 
{
    f.nick_name.value = f.user_name.value;
    f.is_secret.value = 'Y';
    f.title.value = f.user_name.value + ' 님 문의';
    f.extra_vars1.value = f.check1.value;        /* 상품권종류 */
    f.extra_vars2.value = f.pin_number1.value + '-' + f.pin_number2.value + '-' + f.pin_number3.value + '-' + f.pin_number4.value; /* 핀번호 */
    f.extra_vars3.value = f.pay1.value + '원';   /* 현재원가 */
    f.extra_vars4.value = f.pay2.value*0.87 + '원';   /* 입금해야하는 금액 수정 [ ex)수수료 20%일시 *0.8로수정 ] */
    f.extra_vars5.value = f.bank.value;            /* 은행명 */
    f.extra_vars6.value = f.user_name.value;        /* 예금주 */
    f.extra_vars7.value = f.banknum.value;        /* 계좌번호 */
    f.extra_vars9.value = f.tel.value;            /* 연락처 */
    return procFilter(f, insert);
}

/* 작성후 */
function completeDocumentInserted(ret_obj) {
    alert(thankyou);
    location.href = location_url;
}

  • profile
    그냥 111로 다 해봤는데 다 오류 없이 올라가던데 무슨 오류가 있나요?
  • profile
    222로 상품권을 추가해서 작성했는데
    한줄만 입력으로 넘어가버리네요.
  • profile profile
    추가 제거를 안한후에 글을 등록하면
    첫번째 상품권 번호만 올라가고
    추가를 한후 두개다 입력하면
    두개가 다 등록이되게하고싶은데
    그게 잘안됩니다..

    추가를 안한후에 추가될 input type text 의 name 을 함수로 추가하면 아예 작성이되질않더라구요..
  • profile profile
    여러 상품권을 받을 경우 슬래시로 구분해서 핀번호들을 합치고, ( JS: [1, 2, 3].join('/') )
    게시글 조회시에 슬래시를 감지해 각 핀번호로 나눠 출력하면 되지 않을까 싶습니다. ( PHP: explode('/', $vars) )

    확장변수로 처리하는듯 한데, 확장변수는 게시판 설정에서 미리 추가한 ID가 아니면 등록되지 않습니다.
  • profile profile
    답변 감사합니다.
    게시글 조회 목적이아닌 매입신청서 페이지에서
    상품권이 두개있다 가정하면
    상품권 매입 신청서 페이지에서 핀번호 1(4-4-4-6 4개의 텍스트박스가있음)에 입력 후 (추가) 버튼 클릭 핀번호 2입력란에 핀번호 입력후 매입 신청 등록시 진행현황 페이지에 글이 등록되었으면 합니다.
    하지만 항상 핀번호2까지있는게 아니니 추가를 안눌럿을때는 핀번호1 의 텍스트박스들만 인식해서 등록이되고 추가를 누른후 핀번호2 텍스트 박스까지있다면 두개의 핀번호 텍스트가 글에 등록되었으면 하는 바램입니다..
    제가 말을 잘못해서 이해를 하셨을지 잘모르겠네요..
  • profile profile
    네, 그러니까요.
    입력을 받을때는 extra_vars 가 아닌 아예 다른 이름으로(예시로 P[0], P[1], P[2] ..) 받아버리고.
    onsubmit 이벤트 시에 P[n] 의 개수를 확인한 뒤, 모든 값을 / 로 구분하여 한 문자열로 합치는거죠.

    예를 들어,
    P[0].value 가 '1111-1111' 이고, P[1].value 가 '2222-2222' 면

    var PArr
    for(var i = 0; i < P.length - 1; i++){
    PArr.push(P[i].value);
    }
    return PArr.join('/');

    을 실행했을때의 값은 1111-1111/2222-2222 가 되겠죠.
    이 값을 extra_vars2.value 로 설정해 버리면 모든 핀번호 값이 게시글로 등록되겠죠.
    물론 슬래시로 구분된 상태라 보기 싫겠지만요.

    ---
    그리고, 보기 싫은 이 부분을 해결하기 위해서, 게시글 읽기 부분에서 따로 처리를 해 줘야겠지요.
    extra_vars2 의 값이 1111-1111/2222-2222 같은 형태로 들어가 있을테니,
    / 를 기준으로 잘라서 하나씩 출력해주면 되겠군요.

    {@ $PA = explode('/', $extra_vars2); }
    <table>
    <tr><td>No.</td><td>핀번호</td></tr>
    <tr loop="$PA => $no, $pin">
    <td>{$no}</td><td>{$pin}</td>
    </tr>
    </table>

    이런것 처럼요.
  • profile profile
    답변 감사합니다. 웹스택님
  • profile

    각 인풋 벨류 값을 아예 폼에서 넘기는 값으로 지정하는 것이 아니라.
    그냥 폼으로 넘기는 값은 별도의 인풋 벨류 하나를 따로 지정하고

    추가해서 받는 값들 나중에 하나로 합쳐서
    넘기는 폼값으로 전달해서 넘기는 식으로 하는 것도
    방법일거같아요

  • profile profile
    답변 감사합니다. 이온디님