2015-09-16 2 views
-2

Я получил форму, которая проходит динамический запас кол-во отправить обновление в базе данных, как показано ниже:

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' 

Первый запрос не должен включаться в цикл, но это часть входа $ _post для cid, есть ли какое-либо обходное решение для выхода из первого запроса из цикла обновления?

+2

http://php.net/manual/en/function.array-shift.php – Repox

+0

вы _send_ оператор _UPDATE_ к системе? – arkascha

+0

О, вы строите запрос вручную, используя необработанный пользовательский ввод. Это мило .. –

ответ

0

Как уже упоминалось 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"; 
     ... 
+0

спасибо @syck, что полезно. – conmen

Смежные вопросы