2013-02-19 2 views
0

하나의 제출에서 여러 업데이트를 달성하려고합니다. 여러 행이있는 표가 있고 다음 삽입 상자로 이동하여 각 행의 한 필드를 업데이트 할 수 있기를 원합니다.배열 PHP로 mysql 데이터베이스 필드를 업데이트

내 코드는 다음과 같습니다. - // 테이블 시작 echo ' ';

//start header of table 
echo '<tr> 

<td width="60" align="center"><strong>Lab Item ID</strong></td> 
<td width="60" align="center"><strong>Test Suite Name</strong></td> 
<td width="60" align="center"><strong>Test Name</strong></td> 
<td width="50" align="center"><strong>Result</strong></td> 
</tr>'; 

//loop through all results 
while ($row=mysql_fetch_object($sql)) { 
    //print out table contents and add id into an array and email into an array 
    echo '<tr> 
    <td align="center"><input name="id[]" value='.$row->lab_item_id.' readonly> </td> 
    <td align="center">'.$row->test_suite_name.'</td> 
    <td align="center">'.$row->test_name.'</td> 
    <td><input name="test_result[]" type="text" value="'.$row->test_result.'"></td> 
    </tr>'; 
} 

//submit the form 

echo'<tr> 
<td colspan="3" align="center"><input type="submit" name="Submit" value="Submit"></td> 
</tr> 
</table> 
</form>'; 
//if form has been pressed proccess it 
if($_POST["Submit"]) 
{ 

//get data from form 
//$name = $_POST['name']; 

//$_POST['check_number'] and $_POST['check_date'] are parallel arrays 

foreach($_POST['id'] as $id) { 
    $tresult = trim($_POST['test_result']); 
     $query = "UPDATE tbl_lab_item SET test_result='$tresult' WHERE lab_item_id = '$id'"; 
     //execute query 

} 
print_r($_POST); 
var_dump($tresult); 
//redirect user 
$_SESSION['success'] = 'Updated'; 
//header("location:index.php"); 
} 
?> 

$ _POST 배열을 인쇄 할 때 변수는 모두 Null입니다. 나는 여러 배열에 대해 foreach를 할 수 없다는 것을 안다. (최소한 내가 할 수 있다고 생각하지는 않는다.) 그래서 다른 트릭이 내가 놓친다. 나는 $ _Post 인쇄물에 올바른 데이터가 있으므로 멀리 떨어져있을 수 없습니다.

덧붙여서, 모든 것은 쿼리에 의해 생성되므로 업데이트해야 할 레코드의 수를 모릅니다.

나는이 포럼을보고 있었지만 해결책을 얻지 못했습니다. 나는 배열을 이해할 줄 알았다. 그러나 이제는 궁금해지기 시작했다.

편집 - 작동하지 않는 $ tresult 변수입니다.

많은 감사, 제이슨

편집 목요일 2월 21일 (5시 41분 영국 시간) 사용자의 입력 모두를 위해 감사합니다. 나는 이것을 지금 풀었고 집단적 조언이 도움이되었습니다. 마지막으로 금이 간 코드는 다음과 같습니다. -

변수가 채워진 변수와 채워지는 변수가 핵심이었습니다. 첫 번째 원칙으로 돌아 가야하지 않습니까?

건배 모두. J

+0

'변수'는 ​​무엇입니까?코드에는 많은 변수가 있습니다. –

+0

죄송합니다, 좋은 지적입니다. 업데이트 쿼리에서 업데이트하려고하는 test_result입니다. – Jason

답변

1

변화 같은 쿼리 :

$query = "UPDATE tbl_lab_item SET test_result=$tresult WHERE lab_item_id = $id"; 

작은 따옴표 '는'당신이 읽고 그것을 말할 추가하여 문자열로하고 VAR의 값을하지.

편집

은 다음으로 foreach 루프를 교체하고 알려 :

$id1 = $_POST['id']; 
$test_result1 = $_POST['test_result']; 

foreach($id1 as $key => $value) { 
    $query = "UPDATE tbl_lab_item SET test_result='$test_result1[$key]' WHERE lab_item_id = '$key' "; 

} 
+0

안녕하세요, 고마워요. 나는 그것을 시도했지만, 그것도 작동하지 않습니다. $ tresult 변수를 덤프하면 NULL이되므로 어떤 이유로 내용을 수집하지 않습니다. $ _POST 배열을 보면, 필요한 모든 것이 거기에있다. 단지 $ tresult 변수에 들어 가지 않을 것이다. – Jason

+0

안녕하세요. 당신은 * echo $ _POST [ 'test_result'];를 시도해 볼 수 있습니다 * foreach 루프 안의 첫 번째 줄과 결과가 정확한지 확인하십시오. – t0s

+0

답변을 더 위에 편집하십시오. 테스트 할 새 코드를 추가했습니다. – t0s

0

문제는 당신이 배열로 입력 필드를 구축하는 PHP를 이야기하고 있다는 것입니다,하지만 그것을 치료 나중에 문자열로 :

<td><input name="test_result[]" type="text" value="'.$row->test_result.'"></td> 
          ^^--- array 

$tresult = trim($_POST['test_result']); 
       ^^^^^^^^^^^^^^^^^^^^^--- no array key, so you're assigning the entire array 

    $query = "UPDATE tbl_lab_item SET test_result='$tresult' 
               ^^^^^^^^^^--- array in string context 

트림() 문자열을 기대하지만, 당신은 PHP NULL 다시 얻을 수 있도록, 배열 전달 및 경고. 그런 다음 null은 SQL 문에 쌓여서 문제가 발생합니다.

+0

우수합니다. 감사합니다. 나는 내가 그런 것을하고 있었음에 틀림 없었지만 무엇을 볼 수 없었을 것임을 알았다. 그것을 해결할 방법이 있습니까? foreach 루프 내에서 배열을 사용하여 재생하려고 시도했지만 올바른 구문을 모릅니다. 루프 외부에서해야하는 이유는 무엇입니까? – Jason

1

사실, 그것은 루프의 간단한 (기본) 양식을 수행하여 끝낼 수 있습니다

//get data from form 
//$name = $_POST['name']; 

//$_POST['check_number'] and $_POST['check_date'] are parallel arrays 

$numberOfData = count($_POST['id']); 

for($index = 0; $index < $numberOfData; $index++) 
{ 
    $id = $_POST['id'][$index]; 
    $tresult = trim($_POST['test_result'][$index]); 
     $query = "UPDATE tbl_lab_item SET test_result='$tresult' WHERE lab_item_id = '$id'"; 
     //execute query 

} 
print_r($_POST); 

도움이 되었기를 바랍니다.

건배

+0

고맙습니다. 나는이 논리를 볼 수 있지만 여전히 데이터베이스에 아무것도 삽입하지 않습니다. $ tresult에 대한 vardump가 마지막 값을 주므로 작동하는 것처럼 보입니다. – Jason

+0

Hmmm ... 쿼리 자체와 관련이있을 가능성이 있습니다. 당신은 SQL 편집기/집행자 (SQL executor/executor)에서 그것을 시도 했습니까? 고려해야 할 것은 lab_item_id가 문자열인지 숫자인지 여부입니다. 숫자의 경우에는 작은 따옴표를 묶어서는 안됩니다. 반면 문자열 인 경우에는 test_result를 처리하는 방법과 마찬가지로 trim을 사용하는 것이 좋습니다. –

+0

입력 한 결과는 숫자 일 뿐이며 테스트 할 두 시나리오 모두에서 따옴표를 사용하거나 사용하지 않고 시도했습니다. 나는 SQL을 점검 할 것이지만 만약 메모리가 제공된다면 나는 어제 이것을 phpmyadmin에서 시험해 보았다. 솔직히 말해서, 나는 그들이 흐려지기 시작한 많은 것들을 시도했다. :) – Jason

관련 문제