我在这里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根本不应该存在(注意进入的日期)..
无论如何,我有点卡在这里,任何帮助都表示赞赏。如果您需要任何其他信息,请询问:)
谢谢!
答案 0 :(得分:1)
您确定按原样复制代码吗? 你有语法错误:
if(isset($data['term_id']) {
应该是:
if(isset($data['term_id'])) {