PHP 从循环中转义某些 $_post 值

PHP escape certain $_post value out of loop

我得到了一个通过动态库存数量发送到数据库更新的表格,如下所示:

if($_POST) {

    $cid = $_POST['prod_id'];

    foreach($_POST as $key => $value){
        $q  = "UPDATE `stock` SET";
        $q .= " in_stock=in_stock + '".$value."'";
        $q .= " WHERE cid='".$cid."' AND sid='".$key."'";

        echo $q.'<br />';
    }

}

但是,回显查询的输出如下:

UPDATE `stock` SET in_stock=in_stock + '2' WHERE cid='2' AND sid='prod_id'
UPDATE `stock` SET in_stock=in_stock + '1' WHERE cid='2' AND sid='qty-2'
UPDATE `stock` SET in_stock=in_stock + '2' WHERE cid='2' AND sid='qty-3'
UPDATE `stock` SET in_stock=in_stock + '3' WHERE cid='2' AND sid='qty-4'
UPDATE `stock` SET in_stock=in_stock + '8' WHERE cid='2' AND sid='qty-5'

第一个查询不应包含在循环中,但它是 cid 的 $_post 输入的一部分,是否有任何解决方法可以使第一个查询脱离更新循环?

如 repox 所述,插入一个简单的 array_shift() 来删除数组的第一个元素很容易:

if($_POST) {

    $cid = $_POST['prod_id'];
    array_shift($_POST);
    foreach($_POST as $key => $value){
    ...

但由于您不能依赖于您总是以相同的顺序接收表单元素(或者将来不会添加其他元素),我建议您过滤它们:

    ...
    foreach($_POST as $key => $value){
        if (!preg_match('/^qty-/', $key)) continue;
        $q  = "UPDATE `stock` SET";
        ...