2014-11-20 3 views
-1

사용자가 한 행을 편집하여 MySQL에서 업데이트 할 수 있도록이 코드를 작성했지만 선택한 행에 관계없이 항상 마지막 행을 게시합니다 (3 행).사용자가 선택한 행을 업데이트 할 수 없음

무엇이 문제입니까?

<?php include("includes/db_connection.php"); ?> 

<?php 
global $connection; 

$sid="s5"; 



/**select all salesman from store 5**/ 
$sql ="SELECT * FROM employees WHERE e_type='Salesperson' AND store_assigned='".$sid."';"; 


/**get the result and put into table, which can be edited by user**/ 
$result = mysql_query($sql); 
echo "<form method='post' action='update_salesman.php'>"; 
echo "<table border='1'><tr><th>Employee ID</th><th>Name</th><th>Address</th><th>Email</th><th>Job Title</th><th>Store</th><th>Salary</th></tr>"; 
while ($row = mysql_fetch_assoc($result)) { 

    echo "<tr><td><input type='text' name='eid' value='".$row['eid']."' readonly /></td>"; 
    echo "<td><input type='text' name='e_name' value='".$row['e_name']."' /></td>"; 
    echo "<td><input type='text' name='e_addr' value='".$row['e_addr']."' /></td>"; 
    echo "<td><input type='text' name='e_email' value='".$row['e_email']."' /></td>"; 
    echo "<td><input type='text' name='e_type' value='".$row['e_type']."' /></td>"; 
    echo "<td><input type='text' name='store_assigned' value='".$row['store_assigned']."'/></td>"; 
    echo "<td><input type='text' name='e_salary' value='".$row['e_salary']."' /></td>"; 
    echo "<td><input type ='submit' value='update' /></td></tr>"; 

} 
echo "</table>"; 
echo "</form>"; 
print($sql); 
?> 

는 게시 된 데이터 가져 오기 및 MySQL 데이터베이스에 업데이트 :

<?php include("includes/db_connection.php"); ?> 

<?php 
$eid = $_POST['eid']; 
$ename = $_POST['e_name']; 
$eaddr = $_POST['e_addr']; 
$eemail = $_POST['e_email']; 
$etype = $_POST['e_type']; 
$estore = $_POST['store_assigned']; 
$esalary = $_POST['e_salary']; 

$sql = "UPDATE employees SET e_name='" . $ename . "', e_addr='" . $eaddr . "', e_email='" . $eemail . "', e_type='" . $etype . "', store_assigned='" . $estore . "', e_salary='" . $esalary . "' WHERE eid='" . $eid . "' ;"; 
$result = mysql_query($sql); 
print("</br>" . $sql); 

?> 

을 결과는 항상이 :

UPDATE employees SET e_name='Norah ', e_addr='111 Melwood,PA', e_email='[email protected]', e_type='Salesperson', store_assigned='s5', e_salary='4000.00' WHERE eid='e334' ; 
+2

각 행에 대한 입력 상자의 이름이 정확히 동일합니다. 게시물에서 마지막 값으로 덮어 씁니다. –

+0

가능한 중복 [ph p 업데이트 스크립트, 마지막 레코드 만 업데이트] (http://stackoverflow.com/questions/13728744/php-updates-last-record) – andy

+0

Jonathan의 의견에 따르면, []]을 배열을 생성하기위한 필드 이름. '[ ". $ row [ 'eid']."]'할 수도 있습니다. 그래서 배열은 eid에 의해 색인 될 것입니다. –

답변

0

는 HTML 측에 잘 나타날 수에도 불구하고, 서버 측에서 어떤 일이 벌어 지는지 명확히 알 수 있습니다.

서버에서 양식을 가져 오면 각 레코드가 이전 레코드의 데이터 만 가져 오기 때문에 마지막 레코드 만 표시됩니다.

각 값 세트에 고유 한 형식을 부여하면됩니다 (권장하지 않음).). 그러나이 방법을 사용하면 코드를 거의 그대로두고 양식 태그를 while 루프로 옮길 수 있습니다. OR 등 e_name []로

이 서버에 배열로 전달되는이 방법을 입력 이름을 작성하고 당신을 통해 얻을 모든 값

서버 측에

을, 루프를 얻을 수 있습니다 배열과 같은 당신이 할 것입니다

$e_names = $_POST['e_name']; //Value will be an array 
+0

고마워요, 양방향 작업! –

1

당신의 문제는 두 가지입니다. 첫째, HTML 코드를 생성 할 때 while 루프를 사용하여 필드를 반향합니다. 이러한 필드의 이름은 루프가 실행될 때마다 동일합니다. 생성 된 HTML (소스 코드)에서이를 볼 수 있습니다. 제출시 동일한 이름의 여러 필드 중 하나가 게시됩니다.

둘째, PHP 양식 처리기 코드에서 게시물 데이터를 읽습니다. 한 번에 하나 이상의 필드를 업데이트 할 수 있습니다.

이 문제를 해결하는 가장 쉬운 방법은 HTML 양식의 필드 이름이 각 행마다 서로 다른지 확인하는 것입니다. 각 행에 대한 업데이트가 있도록 sql 테이블을 업데이트 할 때 루프 구조를 사용하십시오.

관련 문제