цикл через несколько массивов и вставка в SQL - PullRequest
0 голосов
/ 14 августа 2010

У меня есть форма, которая после отправки части результата сохраняется в массивах, например:

(форма содержит несколько строк с одинаковыми именами ввода)

<select name="product[]"> после отправки переходит в $_GET['product']

если я сделаю:

// Product ID's
foreach($_GET['product'] as $name => $prodvalue) {
print "$name : $prodvalue<br>";
}

возвращается следующее:

0: 9

1: 10

2: 11

3: 12

Кроме идентификаторов продуктов, у меня есть 2 других формы ввода, структурированных таким же образом, поэтому мой вопрос заключается в том, как мне пройти по каждому из $ _GET ($_GET['product'], $_GET['linequantity'] и $_GET['lineprice']), чтобы добавить каждый из них на несколько строк таблицы SQL? Также будут введены другие записи , которые необходимо ввести, но они будут постоянными, например, если нужно добавить 3 строки, тогда другие записи будут такими же для каждого из 3 рядов.

Пожалуйста, помогите мне, я схожу с ума!

B.

EDIT:

Таблица называется: order_lines

Значение => Поле

$ _ GET ['product'] => product_id

$ _ GET ['linequantity'] => unit_price

$ _ GET ['lineprice'] => Кол-во

$ unh => unh

Есть и другие, но я могу решить это оттуда.

Ответы [ 2 ]

1 голос
/ 14 августа 2010

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

$values = array();
foreach ($_GET['product'] as $name => $value) {
    $values[] = array($value, $_GET['linequantity'][$name], $_GET['lineprice'][$name]);
}

Это создает массив, в котором каждый элемент является массивом со связанными полями:

0 голосов
/ 14 августа 2010

Предполагая, что у вас есть одинаковое количество предметов в каждой коллекции, я бы сказал что-то вроде этого:

$staticValue1 = $_GET['value1'];
$staticValue2 = $_GET['value2'];

foreach($_GET['product'] as $name => $prodvalue) {
  $name = my_escape($name);
  $prodvalue = my_escape($prodvalue);
  $linequantity = my_escape($_GET['linequantity'][$name]);
  $lineprice = my_escape($_GET['lineprice'][$name]);
  if (checkFormat($linequantity, $lineprince, $prodvalue, $name, $staticValue1, $staticValue2) {
    $query = "INSERT INTO <table> (qty, unit_price, product, name, static_value_1, static_value_2) VALUES ".
           "(".$linequantity.", '".$lineprice."', '".$prodvalue."', '".$name."', '".$staticValue1."', '".$staticValue2."')";
    $result = mysql_query($query); 
  }
}

function my_escape($input) {
  //filter chars that will cause problems in the database
  //  then return the filtered values; depends on db
  //  usually this means encoding quotes, at the very least

  return str_replace("'","/'",$input);
}

function checkFormat($linequantity, $lineprince, $prodvalue, $name, $staticValue1, $staticValue2) {
  //use a series of comparisons to return true or false
  //  based on whether or not ALL inputs match the expected range of values

  if (!(is_numeric($linequantity)) return false;

  ... //<-- more comparisons

  return true; // <-- reaching this means it did not fail on any checks
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...