PHP foreach循环运行一次额外的时间

时间:2015-02-03 14:56:31

标签: php mysql

我在这里for循环遇到一些麻烦,希望得到一些帮助!

所以我将在这里重新创建一个简化版本的循环:

foreach($quote as $key => $item) {
  if(isset($item['dbid'])){
    $q_sql = new mysql_builder2('quote',3);
  } else {
    $q_sql = new mysql_builder2('quote',2);
  }
  $q_sql->addArgument('name', $name);
  $q_sql->addArgument('curr', $curr);
  foreach($term[$key] as $data) {
    if(isset($data['term_id']) {
      $t_sql = new mysql_builder2('details',3);
    } else {
      $t_sql = new mysql_builder2('details',2);
    }
    $t_sql->addArgument('date', $date);
    $t_sql->addArgument('term', $termnum);
    mysqli_query($dbc, $t_sql->build());
  }
mysqli_query($dbc, $q_sql->build());
}

好的,所以我想我已经把它弄好了。


编辑:在循环之前,我有以下内容:

$quote = $_POST['quotes'];
$term = $_POST['terms'];

在HTML中,这些元素的名称结构如下:

quotes[1][name]
quotes[1][curr]
terms[1][1][date]
terms[1][1][termnum]

然后如果有第二个:

quotes[2][name]
quotes[2][curr]
terms[2][1][date]
terms[2][1][termnum]
terms[2][2][date]
terms[2][2][termnum]

等。


阐释: 首先,mysqli_builder2是一个创建SQL查询的预制函数。当值为3时,它设置UPDATE,当它为2时它会进行INSERT

现在,用户将填写表格,数据将分为两个表格,Quote和Details。对于Quote中的每个单一条目,详细信息中可能有多个(注意:我在示例代码中遗漏了很多字段以节省空间,但两个表之间有链接)。

我的问题是当我运行一个非常简单的UPDATE时,第二个foreach循环总是运行一个额外的时间,并且它总是一个INSERT,每个字段都有随机值..我似乎无法想象为什么会发生这种情况,因为它在第一个foreach循环中100%正常工作..

提交时的示例数组输出:

Array
(
    [0] => UPDATE quote SET job_id = 2, wo_id = 9952, quote_num = '1a', revenue = '100.00', cost = '100.00', currency = 1, term = 1 WHERE id = 5857;
)
Array
(
    [0] => UPDATE details SET user_id = 532, job_id = 2, wo_id = 9952, quote_num = '1a', percent = 10, term = 1, active = 1, status = 0, date_picked = '2015-02-04', date_submitted = now() WHERE id = 588;
    [1] => INSERT INTO details(user_id, job_id, wo_id, quote_num, percent, term, active, status, date_picked, date_submitted) VALUES(532, 2, 9952, '1a', 6, 6, 1, 0, '1969-12-31', now());
)

这个INSERT根本不应该存在(注意进入的日期)..

无论如何,我有点卡在这里,任何帮助都表示赞赏。如果您需要任何其他信息,请询问:)

谢谢!

1 个答案:

答案 0 :(得分:1)

您确定按原样复制代码吗? 你有语法错误:

 if(isset($data['term_id']) {

应该是:

 if(isset($data['term_id'])) {