2013-05-01 64 views
0

我是PHP和mySql的新手。我试图通过使用PHP和MySQL更新多行。使用PHP和MySQL更新多行

我在更新MySQL数据库中的多行时遇到问题。它只是更新数据库中表的最后一行。例如,用户点击查看产品。该页面将列出当前在数据库中的10个产品。并且用户想要通过点击式方法更新产品信息。完成更新后,用户点击提交。

问题是它只捕获和更新表中最后一个产品的信息。我试图把它放在foreach()函数中。但它不起作用。

请帮忙。我刚刚不到一周就学会了PHP和MySQL。我非常感谢任何帮助。

<?php 
include 'dbconn.inc.php'; 
include 'functions.inc.php'; 

$sql = "SELECT * FROM products"; 
$res = $mysqli->query($sql); 

while($row = $res->fetch_array(MYSQLI_ASSOC)){ 
$products($row['id']) = 'id'; 
} 

$id = $mysqli->real_escape_string($_POST['id']); 
$weight = $mysqli->real_escape_string($_POST['weight']); 
$name = $mysqli->real_escape_string($_POST['name']); 
$supplier_id = $mysqli->real_escape_string($_POST['supplier_id']); 
$price = $mysqli->real_escape_string($_POST['price']); 
$description = $mysqli->real_escape_string($_POST['description']); 

foreach($products as $id){ 
$sql = "UPDATE products 
    SET 
     `id` = '$id', 
     `weight` = '$weight', 
     `price` = '$price', 
     `name` = '$name', 
     `supplier_id` = '$supplier_id', 
     `description` = '$description' 

    WHERE `id` = '$id'"; 

} 
+0

你是什么意思它看起来像你曾经试图运行查询 – 2013-05-01 01:45:41

+0

请不要这样逃避。使用[bind_param](http://php.net/manual/en/mysqli-stmt.bind-param.php)和[SQL占位符](http://bobby-tables.com/php)避免严重[SQL注入漏洞](http://bobby-tables.com/)。你在哪里学会这样做? – tadman 2013-05-01 01:50:12

+0

该查询正在运行,但它只更新数据库中的最后一行 – user1754822 2013-05-01 01:52:14

回答

1

几个问题:

  1. 首先,你声明变量$id两次。
  2. 你应该使用$key不是在循环中$value

相反,试试这个:

foreach($products as $key => $value){ 
$sql = "UPDATE products 
    SET 
     `id` = '$id', 
     `weight` = '$weight', 
     `price` = '$price', 
     `name` = '$name', 
     `supplier_id` = '$supplier_id', 
     `description` = '$description' 

    WHERE `id` = '$key'"; 

} 

之所以使用数组key,而不是它的value是因为在以下线您正在将阵列的key设置为从第一个查询返回的值:

while($row = $res->fetch_array(MYSQLI_ASSOC)){ 
    $products($row['id']) = 'id'; 
} 

我可能会建议,而不是做这个:“它不工作”

$products = array(); 

while($row = $res->fetch_array(MYSQLI_ASSOC)){ 
    $products[]['id'] = $id; 
} 

    foreach($products as $product){ 
    $sql = "UPDATE products 
     SET 
      `id` = '$id', 
      `weight` = '$weight', 
      `price` = '$price', 
      `name` = '$name', 
      `supplier_id` = '$supplier_id', 
      `description` = '$description' 

     WHERE `id` = '" . $product['id'] . "'"; 

    } 
+0

@ user1754822我更新了,我只能在这里猜出来,直到你回复评论,但是我认为你想将这个值设置为POST数据,并更新'foreach'中的行 - 是吗? – 2013-05-01 01:56:35

+0

是的。你是对的。 – user1754822 2013-05-01 01:57:19

+0

我试过你的代码但它不更新任何行.....:( – user1754822 2013-05-01 02:03:32