如何在sql行和textbox值之间减去php代码?

时间:2014-09-05 17:56:12

标签: php jquery sql

我想用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 ...

1 个答案:

答案 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件库存。