我得到了一个传递动态库存数量到数据库更新的表单,如下所示:
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";
...