В двух словах мой код, кажется, зацикливается в два раза больше, чем он должен (записывая четыре строки, когда должен писать две строки). Это должно быть легким решением, но мне не повезло.цикл в два раза больше - запись удваивается в таблицу MySQL
Вот моя петля 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 счета-фактуры в переменной, но создает 4 счета-фактуры в таблице MySQL.
Незнакомец больше: Когда я проверить для строк, пораженных:
mysql_affected_rows()
Она возвращает выбранное пользователем число счетов-фактур/строки (не фактические строки можно видеть добавлены в MySQL таблицу). Например, он скажет, что строки «2» были затронуты при добавлении четырех строк.
Еще более дикий. , , когда я эхо из запроса MySQL:
echo $stmt;
мой запрос также показывает только две строки, которые были добавлены, когда пользователь выбрал две строки, чтобы добавить, но код написал 4 фактические строки.
Приключений, я даже пытался порезать массив, чтобы увидеть, если я мог бы изменить код, отправляемый:
//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. Опять же, никаких изменений в 4 строках, введенных, когда мне нужно только 2 строки.
Чем больше я смотрю на это, я не могу сказать в этом коде, почему он удваивается.
Любая помощь, очень ценится.
Для подробного объяснения некоторых из моих полей ввода и то, что я делаю, следуйте ниже:
Для начала, я позволяя пользователю выбрать, сколько строк, чтобы скопировать и обновить дату счета-фактуры в соответствии с требованиями. Я получаю значения ЧАСТОТЫ (7 дней, 14 дней или 30 дней) периодически повторяющихся счетов и продолжительность (количество счетов-фактур для создания/копирования) с помощью этих полей ввода:
<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" />
У меня есть подобные поля ввода на три даты я ищу ADD 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;
Это [инъекция SQL-инъекций] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1), ожидающая своего появления. См. Также http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php – miken32
Спасибо. В настоящее время я единственный пользователь, который может получить доступ к этой странице. Это помогает в обучении. – kentrenholm
Будь конкретным в своих «т. Д.» В примерах кода. Если у вас есть только два столбца, которые вы обновляете, точно показывайте, как выглядит ваш код. Можете ли вы дать точную дамп '$ invoiceDateArray' ?. –