2013-02-13 184 views
0

我是PHP/MySQL上的一个完整的newb,但决定使用某种界面来处理我店的库存。我学到了很多东西,但现在我陷入了绝望中。PHP/MySQL只更新第一行borkness

这种形式显示了一组特定类型的股票和数量:

<form method="post" action="submit.php"> 
<?php 
while ($row = mysql_fetch_assoc($rs)) { 
echo"<input type=\"hidden\" name=\"ovid[]\" value=" . $row['option_value_id'] . " />"; 
echo $row['name']; 
echo"<input type=\"text\" name=\"quant[]\" value=" . $row['quantity'] . " />"; 
echo"<input type=\"submit\" /><br />"; 
} ?> 
</form> 

这是submit.php:

$_POST['ovida'] = implode(",",$_POST['ovid']); 
$_POST['quanta'] = implode(",",$_POST['quant']); 

print $_POST["ovida"]; 
print $_POST["quanta"]; 

$ovidyay = $_POST["ovida"]; 
$quantyay = $_POST["quanta"]; 

$query = "UPDATE product_option_value SET quantity ='$quantyay' WHERE option_value_id = '$ovidyay'"; 
$rs = mysql_query($query) 
or die(mysql_error()); 

当我按下提交(有没有错误已经很多了),但我可以更新的唯一条目是名单上的第一个条目。任何帮助将被感激地接受。

+1

[**请不要在新代码中使用'mysql_ *'函数**](http://bit.ly/phpmsql)。他们不再被维护[并且被正式弃用](http://j.mp/XqV7Lp)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 – ceejayoz 2013-02-13 21:55:30

+0

非常感谢。这当然正在变成一种学习体验...... – ceejayemm 2013-02-13 22:03:02

回答

1

你可以迭代,并单独更新每个项目:

for ($i = 0; $i < COUNT($_POST['ovid']); $i++) 
{ 
    $ovidyay = $_POST['ovid'][$i]; 
    $quantyay = $_POST["quanta"][$i]; 

    $query = "UPDATE product_option_value SET quantity ='$quantyay' WHERE option_value_id = '$ovidyay'"; 
    $rs = mysql_query($query); 
} 

此外,该代码很容易受到SQL注入攻击和你正在使用的MySQL过时PHP函数。如果你想使你的代码更好的那么脆弱,一起来看看下面的链接:

Why shouldn't I use mysql_* functions in PHP?

What could i use instead of mysql_ functions?

Prepated Statements

Prepared Statements with MySQLi

+0

谢谢你,这工作可爱。我也会看看这些链接。 – ceejayemm 2013-02-13 23:29:45

0

首先,不使用mysql_ *函数尝试使用PDO或MySQLi并阅读准备好的语句。

如果你仍然想使用至少逃过他们使用mysql_real_escape_stringmysql_ 功能,但使用mysql_功能,因为它们已被否决,我不会推荐。

这里是你可以做什么:

  1. 可以遍历每个岗位的数据,并更新其逐一或
  2. 建立某种长久的查询,一旦执行它。