简而言之,我的代码似乎循环了两倍(当应该写两行时写入四行)。这应该是一个简单的解决方案,但我没有运气。
这是我的php循环。 。 。必须是一个非常简单但看不见的东西,没有人能够找到这个孩子为什么不工作的原因:
//query statement before the for loop
$stmt="INSERT INTO o70vm_invoices_invoices
(`id`, `created_by`, `user_id`, `added`, `to_name`, `to_address`, `invoice_num`, `real_invoice_num`, `from_name`, `from_address`, `from_num`, `invoice_date`, `publish`, `notes`, `template_id`, `taxes`, `start_publish`, `end_publish`, `currency_before`, `currency_after`, `status`, `to_email`, `to_company`, `from_phone`, `from_url`, `from_email`, `discount`, `invoice_duedate`, `admin_notes`, `to_city`, `to_state`, `to_country`, `to_vatid`, `to_zipcode`, `rec_year`, `rec_month`, `rec_day`, `rec_nextdate`, `is_recurrent`) VALUES ";
// loop through number of invoices user selected to create
for($x = 0; $x < $invoiceCount; $x++)
{
// add the user identified days to each invoice
$date->modify("+7 days");
$invoiceDateNew = $date->format ('Y-m-d 00:00:00');
$invoiceDueDateNew = $date->format ('Y-m-d H:m:s');
$startPubNew = $date->format ('Y-m-d 00:00:00');
// getting the values per row
$ValuesAddToQuery[] ="(NULL, '792', '$userID', '$todayDate', '$parentName', 'unknown address', '0000', '0000', '', '', '', '".$invoiceDateNew."', '1', '', '2', '', '".$startPubNew."', '0000-00-00 00:00:00', '$', '', '', '$email', '$childName', '', '', '', '0.00', '".$invoiceDueDateNew."', '', '', '', '', '', '', '0', '0', '0', '0000-00-00', '0')";
}
$stmt .= implode(',',$ValuesAddToQuery);
mysql_query($stmt) or exit(mysql_error());
我将发票数量存储为:
$invoiceCount
我已经回显了$ invoiceCount的值,并且值始终与用户输入的值相同。 IE,用户选择2个发票进行创建,在变量中显示2个发票,但在MySQL表中创建4个发票。
更奇怪的是:当我检查受影响的行时:
mysql_affected_rows()
它返回用户选择的发票/行数(不是我在MySQL表中添加的实际行)。例如,当添加了四行时,它会说“2”行受到影响。
更加狂野。 。 。当我回应MySQL查询时:
echo $stmt;
我的查询还显示,当用户选择要添加的两行但代码写入4个实际行时,只添加了两行。
Adventurous,我甚至尝试对数组进行切片以查看是否可以更改发送的代码:
//implode the values into the statement
$stmt .= implode(',',$ValuesAddToQuery);
//limit the length of the array
array_slice($ValuesAddToQuery,0,2);
mysql_query($stmt) or exit(mysql_error());
并且,你猜对了,它完全没有变化。我将array_slice放在implode语句之上。同样,当我只想要2行时,输入的4行没有变化。
我越看这个,我在这段代码中无法分辨为什么它会加倍。
任何帮助,非常感谢。
有关我的一些输入字段的详细说明以及我正在做的事情,请按照以下说明进行操作:
首先,我让用户选择要复制的行数并根据需要更新发票日期。我使用这些输入字段获得经常性发票的频率(7天,14天或30天)和DURATION(创建/复制的发票数量)的值:
<select name="freqOfInvoices">
<option value="7">Weekly</option>
<option value="14">Bi-Weekly</option>
<option value="30">Monthly</option>
</select>
<input type="number" title="numberOfInvoices" name="numberOfInvoices" size="2" id="numberOfInvoices" value="numberOfInvoices" />
我有三个日期的类似输入字段我想要添加x天数:
// assigning variables
$freqOfInvoices = htmlentities($_POST['freqOfInvoices'], ENT_QUOTES);
$numberOfInvoices = htmlentities($_POST['numberOfInvoices'], ENT_QUOTES);
$invoiceDate = htmlentities($_POST['invoice_date'], ENT_QUOTES);
$invoiceDueDate = htmlentities($_POST['invoice_duedate'], ENT_QUOTES);
$startPub = htmlentities($_POST['start_publish'], ENT_QUOTES);
//assigning number of invoices
$countInvoices=$numberOfInvoices;
答案 0 :(得分:1)
看起来你可能只需要一个循环来构造值。
//query statement before the foreach loop
$stmt="INSERT INTO o70vm_invoices_invoices (`id`, `.....`, etc) VALUES ";
$ValuesAddToQuery = [];
for($x = 0; $x < $arrayLength; $x++) {
// add the user identified days to the date
$date->modify("+7 days");
$invoiceDateNew = $date->format ('Y-m-d 00:00:00');
$ValuesAddToQuery[]="(NULL, '....', ".$invoiceDateNew.")";
}
$stmt .= implode(',',$ValuesAddToQuery);
mysql_query($stmt) or exit(mysql_error());
答案 1 :(得分:0)
如果你回显$ stmt,查询字符串看起来是正确的还是你的值加倍?
答案 2 :(得分:0)
我回答了自己的问题,因为我找到了一个解决方法,实际上&#34;作品。我将这个问题保存在网上给其他人,好像我可以保存他们四天的工作,这是我的荣幸。
因为我无法弄清楚为什么我的代码创建了两倍于用户请求的发票,我只是添加了这段代码:
//////////////////////////
// Work around CODE as it keeps on doubling the records in DB
// Deleting the same amount of last entries as there are valid entries
//////////////////////////
$RecordsToDelete=$invoiceCount;
$DeleteQuery="DELETE FROM o70vm_invoices_invoices ORDER BY id DESC limit $RecordsToDelete";
mysql_query($DeleteQuery) or exit(mysql_error());
在我原始的内爆/执行查询代码之后立即执行:
$stmt .= implode(',',$ValuesAddToQuery);
mysql_query($stmt) or exit(mysql_error());
代码有效,因为我感染了#34;代码正在编写完整系列的发票(用户选择的日期)一次,然后再次执行相同的系列。因此,转换为第一组发票(2)是正确的,最后的发票(2)是重复的。所以,presto,只需从最后一个条目中删除发票的计数。
我承认,这是一种解决方法。希望有一天我会弄清楚为什么我的原始代码会产生重复。但是,快乐的一天不管。 :)