无法按用户更新选定的行

时间:2014-11-20 19:37:27

标签: php mysql

我已经为用户编写了这段代码来编辑一行并在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='anorahm@gmiil.com', e_type='Salesperson', store_assigned='s5', e_salary='4000.00' WHERE eid='e334' ;

2 个答案:

答案 0 :(得分:1)

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

其次,在PHP表单处理程序代码中,您阅读发布数据,然后执行一个更新查询,而您可能希望更新多个字段。

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

答案 1 :(得分:0)

即使它在html方面显得很好,但是当它获得表格时,它清楚地知道服务器端发生了什么

当服务器获取表单时,它只会看到最后一条记录,因为每条记录都会覆盖之前的值,导致只从最后一条记录中获取数据

您可以做的是为每组值赋予自己的形式(不建议)。但是使用这种方法,您可以将代码保持原样,只需将表单标记移动到while循环中即可。或者将输入名称写为e_name []等。

通过这种方式,它将作为一个数组传递给服务器,您可以循环访问以获取所有值

在服务器端,要获取数组,您可以执行类似

的操作
$e_names = $_POST['e_name']; //Value will be an array