我想用sql行值减去一个文本框值,请帮帮我。 我想要这个结果$ Qty = $ Qty1 - $ QTY2; 有什么解决方案吗? 这是我的代码。
include('config.php');
$sql = mysql_query("SELECT QTY FROM fab_inv where SUB_FABNO='".$_POST["item_code"][$i]."'");
$num_rows = mysql_num_rows($sql);
$res = $num_rows;
$_POST['hiddenField3']=$row['QTY'];
$QTY1 = $_POST['hiddenField3'];
$QTY2 = $_POST["item_issue"][$i];
$QTY = $QTY1 - ($QTY2);
include('config.php');
$sql="update fab_inv set QTY=".$QTY." where SUB_FABNO='".$_POST["item_code"][$i]."' ";
$retval = mysql_query( $sql);
if(! $retval )
{
die('Could not enter data: ' . mysql_error());
}
但它只插入值前面的文本框值,如下所示。如果row qty = 50且文本框值= 30.那么它只插入-30 ...
答案 0 :(得分:1)
您的代码容易受到sql injection attacks的攻击。而且你的查询结构也有一个令人讨厌的竞争条件。 NO 需要运行select然后更新。您可以在一次更新中完成所有操作:
$val = (intval)$_POST['whatever field you want'];
$sql = "UPDATE yourtable SET QTY = QTY - $val WHERE ...."
现在,您正在向客户端吸取一个值,在那里进行数学运算,然后将新值吐回数据库。如果脚本的特定副本在短时间内被暂停,并且某些 OTHER 用户点击相同的脚本会发生什么?现在你将拥有:
client #1: $qty = 50, database qty = 50
client #1: $qty - 40 = 10; database qty = 50
client #2: $qty = 50, database qty = 50
client #2: $qty - 10 = 40, database qty = 50
client #2: update database -> qty = 40
client #1: update database -> qty = 10
糟糕。现在你已售出50件商品,但仍有10件库存。