2014-11-04 75 views
0

我正在尝试在库存系统上工作,用户可以在其中查看其库存和更新数量以及仅由用户输入的值并且数据库中的其余部分保持不变。但它不工作,请帮我找到我做错了什么。它会回显成功消息,但数据库不会更新。php将某些字段更新到数据库

<form name="form" method="post"> 
<table width="70%" border="5" align="center"><tr> 
<th scope="row">SKU</th> 
<th scope="row">Item Description</th> 
<th scope="row">Current Qunatity</th> 
<th scope="row">Update Quantity</th> 
<th scope="row">Unit Price</th> 
</tr> 
<tr> 
<th scope="row"> 
<?php 
include('connect.php'); 
$result = mysqli_query("SELECT * FROM products") 
     or die(mysqli_error()); 

while($row = mysqli_fetch_array($result)) { 
    echo "<tr>"; 
    echo '<td><a name="sku[]">'.$row['sku_id'].'</a></td>'; 
    echo '<td>'.$row['description'].'</td>'; 
    echo '<td>'.$row['quantity'].'</td>'; 
    echo '<td><input name="qty[]" /></td>'; 
    echo '<td>'.$row['unit_price'].'</td>'; 
    echo "</tr>"; 
    } 
?> 
</table> 
<input style="float:right" name="update" type="submit" id="update" value="Update"/> 
</form> 
<?php 

if(isset($_POST['update'])) 
{ 
    $qty = $_POST['qty']; 
    $sku = $_POST['sku']; 
    foreach($qty as $key => $value) 
    { 
     if(empty($value)) 
     { 
      continue; 
     } 
     else 
     { 
      $sql = "UPDATE products SET quantity ='".$value."' WHERE sku_id = '".$sku[$key]."'"; 
      mysql_query($sql); 
     } 
    } 
    $retval = mysqli_query($sql); 
    if(! $retval) 
    { 
     die('Could not update data: '. mysql_error()); 
    } 
    echo 'Update data successfully!'; 
} 
?> 
+0

这样的事情是很容易避免与一个简单的错误输出 – baao 2014-11-04 12:52:48

+0

@Joseph没有关系到你的问题,但为什么你不使用PDO - 没有SQL注入,推荐。 mysql_query已弃用 – 2014-11-04 13:29:24

+0

感谢您的建议!我会发现PDO的工作原理! – Joseph 2014-11-04 13:51:42

回答

0

这应该是你一个完整的答案(与mysqli的更新):

<form name="form" method="post"> 
<table width="70%" border="5" align="center"> 
<tr> 
<th scope="row">SKU</th> 
<th scope="row">Item Description</th> 
<th scope="row">Quantity</th> 
<th scope="row">Unit Price</th> 
</tr> 
<?php 
include('connect.php'); 
$result = mysqli_query("SELECT * FROM products") 
     or die(mysqli_error()); 

while($row = mysqli_fetch_array($result)) { 
    echo "<tr>"; 
    echo '<td>'.htmlspecialchars($row['sku_id']).'</td>'; 
    echo '<td>'.htmlspecialchars($row['description']).'</td>'; 
    echo '<td><input name="qty['.htmlspecialchars($row['sku_id']).']" value="'.htmlspecialchars($row['quantity']).'"/></td>'; 
    echo '<td><input name="price['.htmlspecialchars($row['sku_id']).']" value="'.htmlspecialchars($row['unit_price']).'"/></td>'; 
    echo "</tr>"; 
    } 
?> 
</table> 
<input style="float:right" name="update" type="submit" id="update" value="Update"/> 
</form> 
<?php 

if(isset($_POST['update'])) 
{ 
    $qty = $_POST['qty']; 
    $price = $_POST['price']; 
    $stmt = $mysqli->stmt_init(); // <- mysqli class way of doing this 
    $stmt->prepare("UPDATE products SET quantity = ?, unit_price = ? WHERE sku_id = ?"); 
    foreach($qty as $key => $value) 
    { 
     $data = array($qty[$key], $price[$key], $key); 
     $stmt->execute($sql, $data); 
    } 
    echo 'Update data successfully!'; 
} 
?> 

为了测试后的处理可以改为:

if(isset($_POST['update'])) 
{ 
    $qty = $_POST['qty']; 
    $price = $_POST['price']; 
    //$stmt = $mysqli->stmt_init(); // <- mysqli class way of doing this 
    //$stmt->prepare("UPDATE products SET quantity = ?, unit_price = ? WHERE sku_id = ?"); 
    foreach($qty as $key => $value) 
    { 
     echo "UPDATE products SET quantity = ".$qty[$key].", unit_price = ".$price[$key]." WHERE sku_id = " . $key . "<br/>\n"; 
     //$data = array($qty[$key], $price[$key], $key); 
     //$stmt->execute($sql, $data); 
    } 
    echo 'Update data successfully!'; 
} 
+0

我只是把它放在服务器上,但它显示500内部错误..它是否与'$ sql =“更新产品SET数量=?,unit_price =?WHERE sku_id =?”;'? – Joseph 2014-11-04 13:49:40

+0

我在htmlspecialchars()中添加以避免代码注入。如果您的某个产品的描述如下:也查看http://stackoverflow.com/questions/14011899/mysqli-real-escape-string-should-i-use-it – user3202484 2014-11-04 13:52:03

+0

这可能与我已修改的新mysqli代码有关 – user3202484 2014-11-04 13:54:56

2

您正在使用mysql_query这里:

$sql = "UPDATE products SET quantity ='".$value."' WHERE sku_id = '".$sku[$key]."'"; 
mysql_query($sql); 

而不是mysqli_query

$sql = "UPDATE products SET quantity ='".$value."' WHERE sku_id = '".$sku[$key]."'"; 
mysqli_query($sql); 

此外,你使用mysql_error这里还有:

die('Could not update data: '. mysql_error()); 

P.S.不要忘记逃避您在数据库查询中使用的任何用户输入!尽管理想情况下,您应该使用PDO或MySQLi准备语句

+0

ooopz谢谢!让我试试吧 – Joseph 2014-11-04 12:54:55

+0

嗯,它仍然没有工作。我之前确实有过这种打字错误,页面甚至不会显示,并且有500条错误消息。也许这不是主要问题? – Joseph 2014-11-04 12:59:49

0

如果您执行var_dump($ _ POST);你会看到你的输入没有价值。

您需要指定表单上的值。

我宁愿做这个代替,但:

echo '<input name="sku['.$row['sku_id'].']" value="'.$row['quantity'].'" />'; 

然后你就可以循环$ _ POST [“SKU”]和使用密钥作为sku_id和值作为新值(数量),要更新

+0

所以修改我的代码的方式改为'echo'​​';''而不是'echo'​​';'并从'echo'中删除一个标签​​'.$row['sku_id'].'';'对不对?只是确保 – Joseph 2014-11-04 13:06:37

+0

是的。如果你做了$ _POST的var_dump,你会看到表单中的数据,并更好地理解需要什么。例如$ _POST ['sku'] ['prod12'] = 12这种方式也默认为当前数量,否则所有量化值都将为0,消除库存。 – user3202484 2014-11-04 13:24:28

+0

只是另一个快速问题。我还必须修改更新后的PHP动作吗?我只删除'$ qty = $ _POST ['qty'];'然后尝试,但它似乎仍然没有得到值,所以我想知道。对不起,如果我问一个愚蠢的问题,但我还在学习。谢谢!! – Joseph 2014-11-04 13:33:16