2013-08-28 2 views
0

양식을 html로 중첩 할 수 없다는 것을 알고 있습니다. 따라서 다음과 같은 기능을 만들기 위해서는 도움이 필요합니다. 값이 모여 addAll.php 파일로 전송됩니다 "모두 추가"양식 중첩 양식, 더 많은 양식 제출

<form action="addAll.php" method="post"> 
    <ul> 
    <li><input type="checkbox" name="boxes[]" value="1"> <a href="#">No. 1</a></li> 
    <li><input type="checkbox" name="boxes[]" value="2"> <a href="#">No. 2</a></li> 
    <li><input type="checkbox" name="boxes[]" value="3"> <a href="#">No. 3</a></li> 
    <li><input type="checkbox" name="boxes[]" value="4"> <a href="#">No. 4</a></li> 
    </ul> 
    <input type="submit" value="Add all"> 
</form> 

하면 제출 버튼을 클릭 :

나는 체크 박스의 목록을 가지고있다. 여태까지는 그런대로 잘됐다.

그림과 같이 목록에 링크가 있습니다. 원하는 기능은 이제 링크를 클릭하면 양식이 addAll.php가 아닌 다른 페이지로 전송된다는 것입니다.
실제로 링크 대신에 각 링크 대신 네 개의 제출 버튼이 필요합니다. 각 버튼은 addAll.php가 아닌 자신의 파일에 양식을 제출합니다. 그는 결국 어느 시점에 제출 "모든 추가"버튼을 클릭 할 때까지

는 단순히 그가 다시 링크 사이에 이동할 때 점검 한 사용자를 확인란하는 저장 할 수 있어야합니다. 그러므로 나는이 링크를 클릭 한 후으로 체크 박스를 새 페이지로 사용자를 을 가지고 싶어, 그래서 그가 클릭 나중에 반환하는 경우, 저장하고 그래서 POST 데이터를보고 확인란을 다시 확인하실 수 있습니다 "추가 모든".

해결 방법은 있습니까?

+0

당신은 쿠키 또는 쿼리 문자열에서 체크 박스의 상태를 저장, 또는 양식 action 속성을 무시하고 제출 자바 스크립트를 사용할 수있다(). –

+0

예. 이것이 html/css에서 해결 될 수 있다면 나는 그것을 선호 할 것이다. 하지만 JS는 물론 그것을 해결할 수 있습니다. – Steeven

+0

여러 제출 버튼을 가질 수 있지만 addAll.php에 제출하므로 서버 측에서 처리해야합니다. 여러 제출 단추를 다루는 방법은 이름을 다르게 지정하는 것입니다. addAll.php는 다음과 같은 것을 가질 수 있습니다 :'if (isset ($ _ POST [ 'submit_nr1'])) ... '다른 파일로 리다이렉트합니다. 관련 게시물 데이터를 쿼리 문자열 또는 세션을 통해 전달합니다. –

답변

1

는이 같은 아무것도 권하고 싶지 않다, 그러나 나에게 내가 자바 스크립트를 사용하여 O/W 솔루션으로 생각할 수있는 가장 가까운 일이 될 것으로 보인다.

addAll.php

... 
function redirect($url) { 
    $query_string = urlencode('?boxes=['.implode(',', $_POST['boxes']).']'); 
    $base_url = some_awkward_way_of_getting_the_base_url(); 
    $url_full = $url_base.$url; 
    header('Location: '.$url_full.$query_string); 
} 

function alternative($url) { 
    $_SESSION['boxes'] = $_POST['boxes']; 
    $base_url = some_awkward_way_of_getting_the_base_url(); 
    $url_full = $url_base.$url; 
    header('Location: '.$url_full); 
} 

if (isset($_POST['submit_nr1'])) 
    redirect('nr1.php'); 

else if (isset($_POST['submit_nr2'])) 
    redirect('nr2.php'); 

else if (isset($_POST['submit_nr3'])) 
    redirect('nr3.php'); 

else if (isset($_POST['submit_nr4'])) 
    redirect('nr4.php'); 

else if (isset($_POST['submit_all'])) 
    handle_accordingly(); 
... 

또는 당신 addAll.php 대신 헤더 리디렉션을 수행하는 여러 가지 경우에 따라 다른 파일을 포함/필요있을 수 있습니다.

checkboxes.php

... 
<form action="addAll.php" method="post"> 
    <ul> 
    <li> 
     <input type="checkbox" name="boxes[]" value="1"> 
     <input type="submit" name="submit_nr1" value="No. 1"/> 
    </li> 
    <li> 
     <input type="checkbox" name="boxes[]" value="2"> 
     <input type="submit" name="submit_nr2" value="No. 2"/> 
    </li> 
    <li> 
     <input type="checkbox" name="boxes[]" value="3"> 
     <input type="submit" name="submit_nr3" value="No. 3"/> 
    </li> 
    <li> 
     <input type="checkbox" name="boxes[]" value="4"> 
     <input type="submit" name="submit_nr4" value="No. 4"/> 
    </li> 
    </ul> 
    <input type="submit" name="submit_all" value="Add all"> 
</form> 
... 

면책 조항 : 나는 좋은 동안 PHP를 작성하지 않은, 이것은 안된이지만, 적어도 가능한 해결책을 설명한다.