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 />';
    }
}

但是,echo查询的输出如下:

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";
        ...