각각

2012-07-15 3 views
0
table: test1 
---------- 
|id |name| 
---------- 
|46 |BOB | 
---------- 

table: test2 
------------------------ 
|id |name_id |job  | 
------------------------ 
|133 |46  |NOJOB | 
------------------------ 
|134 |46  |NOJOB | 
------------------------ 
|135 |46  |NOJOB | 
------------------------ 

안녕하세요를 업데이트하는 대신에 동일한 값을 반환 ⅰ) (에 mysql_insert_id 기인되어 각각 "test2.name_id에 기초하여"test2.job "또는 복수의 열을 갱신 문제가 ; 함수는 "test1.id"INSERT 쿼리 및 내 테이블 구조에서 위와 같이.각각

나는 "WHERE name_id ="조건을 가진 "test2"테이블에있는 레코드의 양에 따라 채워지는 양식이 있습니다. ''. $ _ GET [ 'id']. " '"브라우저 URL 주소에 "localhost/rfps/ztransposto.php? id = 46"을 지정하면 위의 test2 테이블에있는 내용이 양식에 표시됩니다.

문제는 내가 마지막 행 값을 변경하고 다른 두 행을 동일한 값으로 첫 번째와 두 번째 행을 업데이트하는 경우에만 업데이트하므로 첫 번째와 두 번째 행을 변경하고 업데이트하려고하면 아무것도 업데이트되지 않습니다. 아래는 소스 코드입니다 :

1 업데이트 양식 페이지

<?php require_once('Connections/rfps.php'); ?> 
<?php 
//initialize the session 
if (!isset($_SESSION)) { 
    session_start(); 
} 
?> 

<html> 
<head> 
</head> 
<body> 

<?php 

$sql = "SELECT * FROM test2 WHERE name_id = '".$_GET['id']."'"; 

$result = mysql_query($sql) or die($sql."<br/><br/>".mysql_error()); 

$i = 0; 

echo '<table width="50%">'; 
echo '<tr>'; 
echo '<td>ID</td>'; 
echo '<td>Name ID</td>'; 
echo '<td>Job</td>'; 
echo '</tr>'; 

echo "<form name='form_update' method='post' action='ztranspostop.php'>\n"; 
while ($job = mysql_fetch_array($result)) { 
echo '<tr>'; 
echo "<td>{$job['id']}<input type='hidden' name='id[$i]' value='{$job['id']}' /></td>"; 
echo "<td>{$job['name_id']}<input type='hidden' name='name_id[$i]' value='{$job['name_id']}' /></td>"; 
echo "<td><input type='text' size='40' name='job[$i]' value='{$job['job']}' /></td>"; 
echo '</tr>'; 
++$i; 
} 
echo '<tr>'; 
echo "<td><input type='submit' value='submit' /></td>"; 
echo '</tr>'; 
echo "</form>"; 
echo '</table>'; 

?> 
</body> 
</html> 

2 업데이트 쿼리 페이지

<?php require_once('Connections/rfps.php'); ?> 
<?php 
//initialize the session 
if (!isset($_SESSION)) { 
    session_start(); 
} 

$size = count($_POST['job']); 

$i = 0; 
while ($i < $size) { 
    $job= $_POST['job'][$i]; 
    $name_id = $_POST['name_id'][$i]; 

    $query = "UPDATE test2 SET job = '$job' WHERE name_id = '$name_id'"; 
    mysql_query($query) or die ("Error in query: $query"); 
    echo "$job<br /><br /><em>Updated!</em><br /><br />"; 
    ++$i; 
} 
?> 

사람이 내가 잘못받은 코드의 어느 부분을 지적 할 수 있습니까? 미리 감사드립니다!

+0

[SQL 주입 공격] (http://bobby-tables.com)에 취약합니다. . 다른 작업을 수행하기 전에 코드에서 이러한 취약점을 확인하고 수정하십시오. –

+0

주목할 것입니다. 링크를 찾아 주셔서 감사합니다. =) – Shukri

답변

0

양식의 test2.id 필드 사이의 연결이 누락되어 업데이트 쿼리에 사용 된 것으로 생각됩니다. 실제로 WHERE id =을 포함하는 경우 WHERE name_id = 절이 필요하지 않을 수 있습니다. 이렇게하면 양식의 행 (해당 페이지의 $ i 값)과 업데이트되는 특정 작업 행 (후속 페이지의 $ i 값) 간의 연결이 완료됩니다. 그렇지 않으면 모두 공통된 특성 (name_id)을 기반으로 만 업데이트됩니다 .-)

$i = 0; 
while ($i < $size) { 
    $job= $_POST['job'][$i]; 
    $job_id = intval($_POST['id'][$i]); 

    $query = "UPDATE test2 SET job = '$job' WHERE id = '$job_id'"; 
    mysql_query($query) or die ("Error in query: $query"); 
    echo "$job<br /><br /><em>Updated!</em><br /><br />"; 
    ++$i; 
} 
?> 
+0

입력과 자세한 설명을 보내 주셔서 감사합니다. 많은 당신 덕분에 ctrahey =) – Shukri

+0

안녕하세요. 대답을 수락한다는 것은 당신, 나, 그리고 전체 공동체에게 좋은 것입니다 :-) –

+0

완료 및 완료, 나는 '예' '아니오'버튼을 여러 번 클릭한다고 생각했습니다. 이제 눈금 표시를 알아 챘습니다. – Shukri