2011-07-04 3 views
0

특정 조건이 충족 될 때 데이터베이스의 1 테이블에서 레코드를 검색하는 페이지가 있습니다.동적으로 생성 된 양식 요소를 추적하여 POST 변수로 전달

내가 원하는 것은 텍스트 상자를 사용하여 표시된 각 레코드를 업데이트 할 수있는 기회를 제공하는 것입니다.

사용자가 '제출'버튼을 클릭 한 후 진행할 논리를 해석하는 데 문제가 있습니다.

일반적으로 하나의 레코드 (또는 정적 레코드 수)를 업데이트하는 경우 적절한 양의 SQL 문을 사용합니다.

레코드의 양이 동적으로 생성 되었기 때문에 한 번에 모두를 업데이트하는 가장 좋은 방법은 무엇입니까? 업데이트를 위해 먼저 검색된 레코드를 어떻게 알 수 있습니까? 예를 들어

:

OK, 우리는 각 과목 (GRADE) 및 총론 (코멘트)을위한 학생 식별자 (ID), 이름 (SNAME), 명 (흔들림 감지), 등급이있는 테이블이있다.

이 나는 ​​'A'를 가지고 모든 학생에 대한 정보를 검색하고, 내가 '

(예 :'좋은 일 '또는'축하 ', 또는 등) 각 학생에 대한 UNIQUE 축사를 작성하려면 d. 기록을 검색하고 페이지에 배치하고 각 학생 기록 옆에 입력 할 설명을 입력하십시오. 얼마나 많은 텍스트 상자를 만들지 모르기 때문에 학생 ID를 사용하여 텍스트 상자에 동적으로 생성 된 이름을 지정합니다. 이제 사용자는 각 학생마다 고유 한 설명을 입력하고 제출을 클릭합니다.

이제 각 텍스트 상자에 입력 된 값으로 이러한 레코드를 업데이트해야합니까?

처음에 어떤 학생이 검색되었는지는 알 수 없습니다. 사용할 이름을 어떻게 알 수 있습니까? 제출 후 쿼리를 다시 실행하지 않아도되도록 노력하고 있습니다. 그러나 다른 방법이 있습니까?

희망이 질문에 너무 혼란스럽지 않았습니다.

감사

+0

이것은 매우 모호합니다. 코드를 추가하거나 더 자세하게 설명 할 수 있습니까? – evan

+0

에 위 시나리오가 추가되었습니다. – normanram

답변

1

사용 foreach() 관심있는 값을 찾을 수는 배열에 넣어 및 배열을 처리합니다. 이그나시오의 대답 @에 확장

+0

이것이 어떻게 작동하는지 설명해 주시겠습니까? 어떻게 'foreach()'를 사용하여 생성 된 모든 텍스트 상자를 추적하고 텍스트 상자의 데이터를 업데이트하려는 레코드와 비교합니까? – normanram

+0

처음에는 텍스트 상자를 생성하는 데 사용하는 JavaScript가 적절하게 이름을 지정하기 때문입니다. –

+0

동의하지만 '제출'버튼을 누른 후 이름을 어떻게 유지합니까? – normanram

1

그것을 더 쉽게 이해할 수 있도록하기 :

foreach($_POST as $name_of_input => $value_of_input) 
{ 
    // do stuff - here is something so you can see the results after the submit 
    echo "$name_of_input :: $value_of_input <br>"; 
} 
+0

이 부분을 이해하고 있지만 PHP에서 $ name_of_inputs에 사용할 것을 어떻게 알 수 있습니까? 양식의 항목이 동적으로 생성된다는 것을 기억하십시오. 입력 이름을 알고있는 경우 각 입력 값을 검색하는 방법을 알고 있습니다. _POST를 통해 전달 된 모든 변수의 이름 목록을 가져올 수있는 방법이 있습니까? – normanram

+0

입력 이름은 $ _POST의 키입니다. 내가 지정한 것을 수행하고 $ name_of_input을 echo하면 - 게시물을 통해 전달 된 변수의 이름을 출력합니다. – evan

+0

아무 것도 지정할 필요가 없습니다. - $ _POST는 제출 된 입력의 이름과 일치하는 키를 자동으로 갖습니다. – evan

2

는 또한 이전의 답변을 확장 : 당신은 표시하고 텍스트 영역을 저장하는 루프 (예를 들어 foreach 문)가 필요합니다. 텍스트 영역의 이름에 학생 ID가 포함되어 있으면 텍스트가 기본 키 (학생 ID)에 의해 데이터베이스에 삽입되므로 이름을 알 필요가 없습니다. 당신은 예를 들어, 그들을 (숫자가 ID를) 반복, 배열과 같은 양식 요소의 이름을 수

<textarea name="comment[2345234]"></textarea> 
<textarea name="comment[8957485]"></textarea> 

그것을 밖으로 읽기 @evan에 의해 설명 :

foreach((array)$_POST['comment'] as $studentId => $studentComment) 
{ 
    var_dump($studentId, $studentComment); 
} 

그리고 이 모든 것을 자체 요청 형식 (독일어로 Affenformular)으로 구현하면 텍스트 영역을 저장하고 출력하기 위해 단일 루프 만 사용할 수도 있습니다.

"내가 묻는 것을 이해하고 있다고 생각하지 않는다." 어쩌면 당신이 대답을 이해하지 못했을 수도 있습니다. 데이터베이스 레코드를 저장하기 위해 학생 이름이 필요하지 않습니다. 그러나 실제로 제출하려면 숨겨진 입력을 사용할 수도 있습니다.

관련 문제