Das Problem tritt speziell bei der letzten dynamischen Zeile auf. Nur das erste Eingabefeld (
Code: Select all
account[]
Code: Select all
debtor[]
Zum Beispiel:
Wenn ich 10 dynamische Zeilen habe, sind es die ersten 9 Zeilen korrekt verarbeitet und alle ihre Felder erscheinen ordnungsgemäß in der Ausgabe von var_dump. Für die letzte Zeile wird jedoch nur der Wert des ersten Felds (
Code: Select all
account[]
Code: Select all
debtor[]
Wenn ich jedoch eine neue dynamische Zeile hinzufüge und das Formular absende, gibt das Skript einen Fehler aus:
< blockquote>
Beim Verarbeiten der Daten ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.
Dieses Problem scheint aufzutreten, weil die Arrays in der POST-Anfrage (
Code: Select all
account
Was ich Ich habe versucht:
Serverseitige PHP-Validierung
Ich habe einen Validierungsschritt hinzugefügt, um sicherzustellen, dass alle Arrays (Konto, Debitor, Creditor, Beschreibung und acc_serial) haben das Gleiche count:
Code: Select all
$account = $_POST["account"];
$debtor = $_POST["debtor"];
$creditor = $_POST["creditor"];
$description = $_POST["description"];
$acc_serial = $_POST["acc_serial"];
if (
count($_POST['account']) !== count($_POST['debtor']) ||
count($_POST['account']) !== count($_POST['creditor']) ||
count($_POST['account']) !== count($_POST['description']) ||
count($_POST['account']) !== count($_POST['acc_serial'])
) {
echo 'toastr.error("Mismatched field count. Please verify the data.");';
exit;
}
Debuggen von POST-Daten
I var_dump($_POST) verwendet, um die übermittelten Daten zu überprüfen. Hier ist die Ausgabe für eine problematische Anfrage:
Code: Select all
'account' =>
array (size=3)
0 => string 'd59f127d86' (length=10)
1 => string 'd5a05ca920' (length=10)
2 => string 'd59fb74cb8' (length=10)
'debtor' =>
array (size=2)
0 => string '2000' (length=4)
1 => string '0' (length=1)
'creditor' =>
array (size=2)
0 => string '0' (length=1)
1 => string '1000' (length=4)
'description' =>
array (size=2)
0 => string 'General Expense' (length=19)
1 => string 'General Expense' (length=19)
'acc_serial' =>
array (size=2)
0 => string 'd59f127d86' (length=10)
1 => string 'd59fb74cb8' (length=10)
In diesem Fall enthält jedes der verbleibenden Felder – Schuldner, Gläubiger, Beschreibung, und Kontoseriennummer – sollte drei Eingaben haben, genau wie das Feld „Kontoname“, da ich dem Journaleintrag eine dritte dynamische Zeile hinzugefügt habe. Aus irgendeinem Grund werden jedoch die Eingabewerte der dynamischen Felder in der dritten neu hinzugefügten Zeile nicht gelesen, mit Ausnahme des Felds „Kontoname“. Der folgende Fehler erscheint wie in der Iterationsschleife gezeigt:
Code: Select all
An error occurred while processing data. Please try again.
Code: Select all
foreach ($_POST['account'] as $index => $value) {
if (isset($_POST['account'][$index], $_POST['debtor'][$index], $_POST['creditor'][$index], $_POST['description'][$index], $_POST['acc_serial'][$index])) {
$account = $_POST['account'][$index];
$debtor = $_POST['debtor'][$index];
$creditor = $_POST['creditor'][$index];
$description = $_POST['description'][$index];
$acc_serial = $_POST['acc_serial'][$index];
if (empty($account) || empty($description) || empty($acc_serial) || $debtor === "" || $creditor === "") {
echo 'toastr.error("Please fill all fields in row ' . ($index + 1) . '");';
exit;
}
if (!is_numeric($debtor) || !is_numeric($creditor)) {
echo 'toastr.error("Debtor and Creditor must be numeric in row ' . ($index + 1) . '");';
exit;
}
} else {
echo 'toastr.error("An error occurred while processing data. Please try again.");';
exit;
}
}
Code: Select all
Account
Debit
Credit
Description
[i][/i]