2012-09-19 5 views
-1

오전 모두,제발 나를이 PHP 코드를 디버그 도와주세요

나는 한 번에 데이터베이스에 여러 행을 추가하는 데 사용하는 양식이 있습니다. 체크 박스를 제외하고는 모두 잘 작동하는 것 같습니다. 양식 행마다 하나의 체크 박스가 있습니다. 확인란의 체크 순서와 관계없이 결과는 제출 된 후에 항상 동일한 순서로 반환됩니다.

<tr> 
<td class='border'> 
<input type='text' name='rowid[]' value='".$row."' style='display:none;' /> 
<input type='text' name='ref[]' style='width:100%;' /> 
</td> 
<td class='border'> 
<input type='text' name='obs[]' style='width:100%;' /> 
</td> 
<td class='border'> 
<input type='text' name='act[]' style='width:100%;' /> 
</td> 
<td class='border' align='center'> 
<input type='checkbox' name='comp[]' value='Yes' /> 
</td> 
<td class='border'> 
<input type='text' name='compby[]' style='width:100%;' /> 
</td> 
<td class='border'> 
<input type='text' name='compdate[]' id='completeddate".$row."' class='completeddate' style='width:100%;' /> 
</td> 
</tr> 

이 양식이 제출됩니다, 그리고 내 PHP 코드 거래 :

여기에 중요한 양식의 주요 부분이다. 첫 번째 입력이 양식의 행 ID임을 알 수 있습니다. 이것은 숨겨진 필드이며 양식에 표시된 각 행에 대해 값이 하나씩 증가합니다. 양식이 제출되면

, 나는 한 번에 각 행, 하나 거래를 얻기 위해 아래의 PHP를 사용

foreach($_POST['rowid'] as $key=>$rowid) { 

이 기본적으로 ROWID를 들어, 입력의 나머지는 관련이 있다는 말을해야, 다음 rowid에 도착할 때까지.

그때, 나는 첫 번째 행에 대한 참조를 얻을 것이다, 루프를 완료하고 다시 인쇄를하면 그 다음, 나는 두 번째 행에 대한 참조를 얻을 것이다

echo $_POST['ref'][$key]; 

말을 인쇄 할 수 있다면 및 곧. 내가 있다면

그러나 나누기 곳은 다음

echo $_POST['comp'][$key]; 

을 넣어.

의 각 행에 대해 나는 다음 순서로 체크 박스를 쳤다 것으로, 예를 들어 가정 해 봅시다 : 다음 체크 박스의 모든 값을 루프 인쇄를 할 경우

row 1, tick, row 2, untick, row 3, tick 

,이 표시됩니다

'Yes', 'Yes', '' 

그러나이 순서에 있어야

'Yes', '', 'Yes' 

체크 박스는 A가 정상이기 때문입니다 어쨌든 rray, 그리고 나는 이것을 comp []의 이름으로 다른 배열에 넣을 것인가?

이 문제는 해결 되었습니까? 아니면 라디오 버튼이 없습니까?

많은 감사

EDS가

+0

"submit"을 클릭하고 결과를 표시 한 후 –

+0

'print_r ($ _ POST)'를 사용하십시오. ... – Night2

+0

양식을 제출 한 후 확인란을 선택하면됩니다. 체크 된 값만 전송하십시오 ... 그래서 $ _POST [ 'comp']의 개수를 계산하면 체크 박스의 수를 제출하기 전에 폼에 체크 된 숫자와 동일한 수를 볼 수 있습니다 .... 다른 이름을 가질 수 있습니다 각각의 체크 박스 라인 comp_1 또는 그와 비슷한 것 .. – Surace

답변

1

양식에서 기술 숨겨진 필드를 만드는 적절한 방법은 hidden 형식을 사용하는 것입니다. 어쨌든이 필드는 필요 없습니다. 대신에, 적절하게 식별 할 수있는 모든 분야에서 $row를 사용

<tr> 
<td class='border'> 
<input type='text' name='ref[<?php echo $row; ?>]' style='width:100%;' /> 
</td> 
<td class='border'> 
<input type='text' name='obs[<?php echo $row; ?>]' style='width:100%;' /> 
</td> 
<td class='border'> 
<input type='text' name='act[<?php echo $row; ?>]' style='width:100%;' /> 
</td> 
<td class='border' align='center'> 
<input type='checkbox' name='comp[<?php echo $row; ?>]' value='Yes' /> 
</td> 
<td class='border'> 
<input type='text' name='compby[<?php echo $row; ?>]' style='width:100%;' /> 
</td> 
<td class='border'> 
<input type='text' name='compdate[<?php echo $row; ?>]' id='completeddate<?php echo $row; ?>' class='completeddate' style='width:100%;' /> 
</td> 
</tr> 

변경합니다 루프를합니다 (rowid 필드가 더 이상 존재하지 않습니다). 그들은 심지어 (체크 경우에만 제출 체크 박스 필드에 반하는) 비어있는 경우 제출되기 때문에 당신은 당신의 text 필드 중 하나에 루프를 할 수있다 :

foreach($_POST['ref'] as $key => $rowid) { 

, 당신의 PHP 코드를 확인하려면 더 많은 것들이있을 수 있습니다 최신 정보.

+0

입력 해 주셔서 감사 드리며 궁극적으로 이것이 내가해야 할 방법이 될 것입니다! – Eds

1

는 배열 인덱스를 첨자보십시오. 나는. 어느 comp[]이 어떤 행에 속하는지 명시하려면 comp[$row]으로 변경하십시오. 요점은 선택되지 않은 상자가 전송되지 않기 때문에 모든 상자가 선택되어 있지 않은 경우 요청에 2 개의 comp[] 요소 만 있고 사용자가 속한 행을 말할 수 없다는 것입니다.

현재 마지막 (존재하지 않는) 에 $_POST['comp'][$key]에 액세스 할 때 경고가 표시되어야합니다.그렇지 않은 경우 모든 경고를 활성화하십시오. 경고는 일반적으로 매우 유용합니다.

+0

의견을 주셔서 감사합니다. 체크 박스 배열 (comp [])에 숫자를 추가하면, 내가 원하는 것을 빠르고 쉽게 얻을 수 있습니다. – Eds

+0

죄송합니다, 이것은 기본적으로 내가 받아 들인 답변과 동일하므로 어느 대답이든 받아 들여질 수있었습니다. 나는 경고를 켜는 것을 들여다 볼 것이다. 고마워요 – Eds

+0

사실 @Eds 네, 실제로는 아니지만 "숫자 ... 빨리 & 더러운"이 아니라 실제 행 ID입니다. 내가 7 분 일찍 받아 들였지만 받아들이는 NP ;-) – mvds

관련 문제