2012-05-24 4 views
0

SO와 다른 곳에서 여러 가지 유사한 질문을봤을 때, 내가하고 싶은 일이 불가능하다는 느낌이 들지만, 여기에 있습니다.자바 스크립트를 사용하지 않고 동일한 양식을 여러 위치에 제출하십시오.

나는 텍스트 입력 행의 테이블 인 페이지가 있습니다. 사용자는 각 행에 정보를 입력하고 별도의 파일에 데이터를 제출하면 PDF가 작성됩니다.

데이터 양이 다양 할 수 있기 때문에 문제는 사용자가 원하는대로 테이블에 행을 추가 할 수 있어야한다는 것입니다.

[당신이 거기 가기 전에, 나는이 중 어떤 자바 스크립트를 사용할 수 없다는 점을 지적 할 필요가 -. 나는 JS에서 쉽게 할 수 있지만 페이지가 액세스 할 수 있어야합니다 알고 여기

난 그냥에 함께 자갈길 매우 단순화 된 버전 (희망) 지점 설명됩니다 : 당신이 볼 수 있듯이

<?php 
    if (filter_has_var(INPUT_POST, 'add_rows')) { 
    $howmanyrows = filter_input(INPUT_POST, 'howmanyrows', FILTER_SANITIZE_NUMBER_INT); 
    //get all the data from table and put it in an array, 
    //then add 5 (or however many) new rows to said array. 
    } 
    else if (filter_has_var(INPUT_POST, 'send_data')) { 
    //get table data, add to session and redirect to other page with a header() 
    } 
?> 
<html> 
    <form action="" method="POST"> 
    <table> 
     <?php //table rows added using an array of data 
     foreach ($data as $d): ?> 
      <tr><td><input type="text" value="<?php echo $d; ?>"></td></tr> 
     <?php endforeach; ?> 

    </table> 
    <input type="text" name="howmanyrows" value="5"> 
    <input type="submit" name="add_rows"> 

    <input type="submit" name="send_data"> 

    </form> 
... 
</html> 

을 순간에 나는 전체 페이지를 포함 한 형태가 투박한 설정을 가지고 있고, 페이지를 자신에게 제출합니다. 클릭 된 단추에 따라 새 행이 추가되거나 데이터가 PDF 작성 페이지로 제출됩니다.

이렇게 많은 이유로 인해 이상적인 것은 아닙니다. 내가 정말로하고 싶은 것은 두 개의 분리 된 형태 또는 중첩 된 형태를가집니다. 그러나 전자는 입력 값을 양쪽 모두에 제출하는 것을 허용하지 않으며, 후자는 명백하게 나쁜 형식 (의도적 인 말장난)이 아니며 작동하지 않습니다.

내가 원하는대로 할 수 있습니까? 그것에 대해 다른 방법을 제안하십시오.

+0

클라이언트가 (또는 강사 등) 설정 한 규칙에 "접근성으로 인해 자바 스크립트가 없습니다" 타겟 고객 때문에 피하려고하는 것. 시각 장애가있는 사람을 대상으로한다고 가정 할 때 일반적으로 사용자에게 어려운 부분임을 알리는 한 양식/레이아웃을 변경할 수 있습니다. 그래서 만약 절대적이지 않다면, apprpriate notification으로 javascript 접근이 가능하다면 타겟 클라이언트를 확인하는 것이 좋습니다. – Robbie

+0

"두 개의 독립된 양식"이란 무엇을 의미합니까? 동일한 페이지에 두 개의 개별 양식 또는 각각 한 개의 양식으로 된 두 개의 별도 페이지? – matino

+0

JavaScript를 사용하지 않는 것이 절대적으로 필요하다면 코드 설정 방법에 어떤 문제가 있습니까? – dpk2442

답변

0

나는 당신이 최고의 비 자바 스크립트 솔루션을 가지고 있다고 생각한다.

<input name="tablerow[]" type="text" value="A" /> 
<input name="tablerow[]" type="text" value="B" /> 
<input name="tablerow[]" type="text" value="C" /> 

을 그리고이 배열로 $ _POST [ 'tablerow']를 통해 제공 :

것은 쉽게 당신이 동일한 이름으로 여러 개의 입력을 사용할 수 있다는 것입니다 확인합니다. 배열의 길이는 필드의 수입니다. 그런 다음 추가 필드를 추가하십시오. 그렇지 않으면 새 필드에 도착하는 전체 양식을 통해 탭으로 필요 -


접근성를 들어, 사용자가 최초의 "새"필드에 직접 도약 할 수 있도록 상단에 링크를 추가해야합니다. (JS가 당신과이 시나리오를 피할 수 없다면 JS가 정말로 피할 수 없는지에 대한 위의 내 설명을 참조하십시오.)

+0

다행히 나는 완전히 미치지 않았다는 것을 알았습니다. 그리고 배열 팁 주셔서 감사합니다; 나는 그것이 가능하다는 것을 잊었다. –

관련 문제