从网格数组更新DB

时间:2012-04-29 08:58:51

标签: php mysql

我正在使用DHTMLX javascript库来呈现表单中的网格。我的用户可以在其网格中拥有数百种产品,但我只捕获他们为其添加价格的行。然后我需要将这些行与其他一些信息一起添加到MySQL数据库中。

获取标准的$ POST信息并在我的PHP脚本中操作它是关于我的技能的限制到目前为止所以我需要帮助的是由更新的行创建的数组。在我的$ POST中捕获的内容的一个示例是:

Array
(
    [product] => 64
    [dept] => 000
    [submit] => Submit
    [gridbox_1_4] => 422
    [gridbox_64_4] => 534
    [gridbox_175_4] => 1234
    [gridbox_180_4] => 645
)

我目前使用以下方法捕获基本的$ POST变量:

$itemcat  = filter($_POST['product']);         
$dept7    = filter($_POST['dept']);

我的问题是我如何捕获gridbox变量,以便在INSERT语句中使用它们?唯一会改变的数字是中间数字,它代表我的数据库中我需要插入另一个表的产品的主键。我假设我需要以某种方式爆炸$ POST变量?然后我如何使用以下内容插入它们:

"INSERT INTO submissions 
                       (product_id, user_id,submission_id, sugg_price) 
                        VALUES ('" . $gridbox_id . "','" . $myid . "','NULL', '" . $sugg . "')";

我今天在阵列上的所有阅读都让我很好地理解了它们如何在100英尺的视野中工作,而不是如何专门解决我的问题甚至如何开始。我希望社区可以把我送上正确的道路。

1 个答案:

答案 0 :(得分:2)

您可以在$_POST数组上loop并在每个密钥上执行regular expression match

// PDO will make your life so much easier
$dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', $user, $password);

// prepared statements are great - prepare once, use many
$stmt = $dbh->prepare('
  INSERT INTO submissions
    ( product_id,  user_id, submission_id,  sugg_price)
  VALUES
    (:product_id, :user_id, NULL         , :sugg_price)
');

// avoid SQL injection by passing your variables in as parameters
// see http://bobby-tables.com to understand why
$stmt->bindValue('user_id', $myid);

foreach ($_POST as $key => $val) {
  if (preg_match("/^gridbox_(\d+)_4$/", $key, $matches)) {
    $stmt->execute(array(
      ':product_id' => $matches[1],
      ':sugg_price' => $val
    ));
  }
}