2012-01-21 3 views
-1

두 개의 다른 소스에서 HTML 테이블로 데이터를 출력하는 중입니다. 하나의 소스는 mysql_fetch_array이고 다른 하나는 $_POST 어레이입니다. mysql의 테이블은 <td>이고, while 루프를 통해 출력하는 테이블은 $_POST입니다. 출력 페이지에 배열을 연결하기 위해 행 ID를 통해 테이블에 $_POST 데이터를 저장 한 다음 전체 행을 페이지 아래로 더 쿼리하려고했습니다.

내가 가지고있는 문제는 행에 정확하게 $_POST 배열 값이 올바르게 업데이트되지 않는 것입니다. $_POST 배열의 마지막 값은 모두 선택된 모든 필드에 저장됩니다.

입력 페이지 배열은 id [ ]unit_ass[ ]으로 캡처되고 출력 페이지로 전달됩니다.

출력 페이지 코드 : 내가 처음 foreach 문에서 값을 에코 때

require_once ("../includes/db_connect.inc"); 

    $pid = array_filter($_POST['id']); 
    $gid = implode(",", $pid); 

    $sua = array_filter($_POST['unit_ass']); 

    foreach($sua as $value) echo $value . "<br>"; // this outputs correct values in the correct order. 

    foreach($sua as $value) mysql_query("UPDATE $tbl_name SET unit_ass='$value' WHERE id IN ($gid)"); 

그냥 ... array_filter() 빈 키를 제거는, 그들은 정확하고 올바른 순서로 표시됩니다.

그러나 $sua 배열의 마지막 값만 $ gid에 의해 결정된대로 테이블 행을 업데이트합니다. foreach는 배열 값을 반복하지 않고 UPDATE를 수행해야합니다. id[ ]을 통한 데이터는 while 루프의 mysql_fetch-array을 통해 페이지 아래로 올바르게 표시됩니다.

저는 몇 시간 동안이 문제를 응시 해 왔으며 해결책을 찾지 못했습니다. 어떤 도움을 주셔서 감사합니다.

+0

id가'$ gid'에있는 각 행의'unit_ass' 값을'$ sua'의 해당 값으로 업데이트 하시겠습니까? –

+0

이것이 전체 코드 샘플이면 '$ tbl_name'을 정의해야합니다. – hafichuk

+0

$ tbl_name과 함께 모든 데이터베이스 연결 항목은 맨 위에있는 require_once 파일에 포함되어 있습니다. – Thestudiokid

답변

0
foreach($sua as $key => $value){ 
    $value = mysql_escape_string($value); 
    $id = mysql_escape_string ($pid[$key]); 
    mysql_query("UPDATE $tbl_name SET unit_ass='$value' WHERE id='$id'"); 
} 
+0

SQL 인젝션에 취약합니다 –

+0

예. 질문에 의해 제기 된 논리 오류를 해결하고 있습니다. 이스케이프는이 코드 외부에서 수행 할 수 있습니다. –

+0

입력을 이스케이프하도록 코드를 수정했습니다 ... –

-1

는 글쎄, 난 $gid = implode(",", $pid);가 하나 개의 값을 (1으로 고려)

지금 가정 $sua = array_filter($_POST['unit_ass']); 당신에게 ABC, PQR, LMN을 줄 줄 것으로 판단된다.

그래서 쿼리, 당신은 단지 마지막 업데이트보고 있습니다 통해 아웃 같은 당신의 $gid 등이

mysql_query("UPDATE $tbl_name SET unit_ass='ABC' WHERE id='1'"); 
mysql_query("UPDATE $tbl_name SET unit_ass='PQR' WHERE id='1'"); 
mysql_query("UPDATE $tbl_name SET unit_ass='LMN' WHERE id='1'"); 

처럼 실행됩니다 ... 당신은 당신의 실수를 가지고 희망 ...

I을 너는 또한 gid을 바꾸고 싶다고 믿는다. 그 체크 @ 바오 Nhan 대답, 그건 당신을 도울 수 있습니다!

업데이트

: 코드 아래

사용 ... 그것은 지금 작동합니다 ...

require_once ("../includes/db_connect.inc"); 

$sua = array_filter($_POST['unit_ass']); 

foreach($sua as $myKey => $value) { 
    $myID = $pid[$myKey]; 
    mysql_query("UPDATE $tbl_name SET unit_ass='$value' WHERE id='$myID'"); 
} 

행운을 빕니다!

+0

사실'implode (",", $ pid);는 입력 페이지에서 선택한 행의 ID를 포함하는 쉼표로 구분 된 값의 문자열을 반환합니다. – Thestudiokid

+0

안녕하세요? 나는 밖으로 있었고 지금 나는 돌아왔다. ... –

+0

이'foreach ($ sua as $ value) echo gid'를 사용하여 당신이 얻은 것을 알려주십시오 ... 이것은 내 문제를 해결할 것입니다. '1, 2, 3'을 얻으면 문제가 해결됩니다. –