In poche parole, il mio codice sembra essere in loop il doppio di quanto dovrebbe (scrivendo quattro righe quando dovrebbe scrivere due righe). Questa dovrebbe essere una soluzione facile ma non sto avendo fortuna.il doppio del ciclo - la scrittura raddoppia al tavolo MySQL
Ecco il mio loop php. . . Deve essere una cosa molto semplice ma invisibile che nessuno è stato ancora in grado di individuare il motivo per cui questo bambino non sta funzionando:
//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());
ho memorizzare il numero di fatture come:
$invoiceCount
ho fatto eco fuori il valore di $ invoiceCount e il valore è sempre lo stesso valore degli input dell'utente. IE, l'utente seleziona 2 fatture da creare, visualizza 2 fatture nella variabile, ma crea 4 fatture nella tabella MySQL.
Stranger di più: Quando controllo per le righe interessate con:
mysql_affected_rows()
restituisce il numero selezionato dall'utente delle fatture/righe (non i file effettivi posso vedere sono aggiunti nella tabella di MySQL). Ad esempio, dirà che "2" sono state interessate quando sono state aggiunte quattro righe.
Ancora più selvaggio. . . quando mi associo la query MySQL:
echo $stmt;
mia domanda mostra inoltre sono stati aggiunti solo due righe quando l'utente ha selezionato due file da aggiungere ma il codice scritto 4 righe effettive.
Avventuroso, ho anche provato a tagliare la matrice per vedere se riuscivo a modificare il codice che viene inviato:
//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());
E, avete indovinato, cambia assolutamente nulla. Metto l'array_slice sopra l'istruzione implode. Di nuovo, nessuna modifica nelle 4 righe immesse quando voglio solo 2 righe.
Più guardo a questo, non posso dire in questo codice perché sta raddoppiando.
Qualsiasi aiuto, molto apprezzato.
Per una spiegazione dettagliata di alcuni dei miei campi di input e quello che sto facendo, seguire qui sotto:
Per iniziare, sto lasciando all'utente di selezionare il numero di righe per copiare e aggiornare la data della fattura, come richiesto. Io sono sempre i valori di frequenza (7 giorni, 14 giorni o 30 giorni) di fatture ricorrenti e la durata (numero di fatture per creare/copia) utilizzando questi campi di input:
<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" />
ho campi di input simili per le tre date che sto cercando di AGGIUNGERE x numero di giorni a:
// 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;
Questo è [un attacco SQL injection] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1) in attesa di accadere. Vedi anche http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php – miken32
Grazie. Attualmente sono l'unico utente che può accedere a questa pagina. Questo aiuta con il mio apprendimento. – kentrenholm
Sii specifico sulle tue cose 'etc' nei tuoi esempi di codice. Se hai solo due colonne che stai aggiornando, mostra esattamente come si presenta il tuo codice. Puoi dare un esatto dump di '$ invoiceDateArray' ?. –