2014-11-20 40 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

您将每行的输入框命名为完全相同,在发布后,它们将只覆盖最后一个值 – 2014-11-20 19:39:13

+0

可能的重复[PH p更新脚本,只更新最后一条记录](http://stackoverflow.com/questions/13728744/php-update-script-only-updates-last-record) – andy 2014-11-20 19:44:46

+0

根据乔纳森的评论,你应该追加'[]'到字段名称来创建一个数组。你也可以做'[“。$ row ['eid']。”]'这样你的数组就可以被eid索引。 – 2014-11-20 19:48:46

回答

0

即使它可能出现在HTML侧细线,很明显服务器端发生了什么,当它得到的形式

当服务器获取形式我t只会看到最后一条记录,因为每条记录都会覆盖前面的值,从而导致只从最后一条记录获取数据。

您可以做的是给每组值设定自己的形式(不会建议)。但是用这种方法,你可以保持你的代码几乎不变,只需将表单标签移动到while循环中即可。或写输入名称作为e_name []等

这样,它会作为数组服务器获得通过,可以遍历得到所有你的价值观

在服务器端,以获得阵列你会做类似

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

谢谢,双向工作! – 2014-11-21 19:20:37

1

你的问题是双重的。首先,在生成HTML代码时,您使用while循环来回显字段。请注意,每次循环运行时,这些字段的名称都是相同的。 (您可以在生成的HTML(源代码)中看到这一点。请注意,在提交时,将会发布多个同名字段中的一个

其次,在PHP表单处理程序代码中,然后执行一个更新查询,而您可能需要更新多个字段

解决此问题的最简单方法是确保HTML表单中的字段名对每个行都不相同,在更新sql表时使用循环结构,以便每行有一个更新