循环遍历多个数组并插入SQL

时间:2010-08-14 15:03:43

标签: php sql loops

我有一个表单,一旦提交了一些结果存储在数组中,例如:

(表单有多行,输入名称相同)

<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

除了产品ID之外,我还有2个其他表单输入以相同的方式构建,所以我的问题是如何遍历每个$ _GET($_GET['product']$_GET['linequantity']和{{1将它们中的每一个添加到多个SQL表行中?还需要输入其他记录,但是,这些记录将是常量,因此,例如,如果要添加3行,那么其他记录将是对于3行中的每一行都是相同的。

请帮助我,我疯了!

修改

该表名为:order_lines

值=&gt;字段

$ _ GET ['product'] =&gt; PRODUCT_ID

$ _ GET ['linequantity'] =&gt; UNIT_PRICE

$ _ GET ['lineprice'] =&gt;数量

$ unh =&gt; UNH

还有更多,但是,我可以从那里开始。

2 个答案:

答案 0 :(得分:1)

如果所有表单字段数组的键都相等,那么您可以使用一个名称来引用另一个:

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

这将创建一个数组,其中每个元素都是一个包含相关字段的数组:

答案 1 :(得分:0)

假设每个集合中的项目数量相同,我会选择以下内容:

$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
}