In den neuen dynamischen Zeilen wird nur das Feld „Kontoname“ erkannt. Wenn der Journaleintrag beispielsweise anfänglich zwei Zeilen enthält und ich eine dritte dynamische Zeile hinzufüge, wird nur der Kontoname aus der neuen Zeile erkannt, während die Werte „Debitor“, „Creditor“, „Beschreibung“ und „Kontoseriennummer“ in der neuen Zeile nicht erkannt werden innerhalb des iterativen Array-Prozesses korrekt gelesen.
Dieses Problem tritt speziell bei den neu hinzugefügten dynamischen Zeilen auf und wirkt sich nicht auf die Zeilen aus, die ursprünglich aus der Datenbank abgerufen wurden.
Wenn ich jedoch hinzufüge eine neue dynamische Zeile und senden Sie das Formular ab, Das Skript gibt einen Fehler aus:
Bei der Datenverarbeitung ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.
Dieses Problem scheint aufzutreten, weil die Arrays in der POST-Anfrage (Konto, Schuldner, Kreditor, Beschreibung und acc_serial) nicht übereinstimmende Zählungen aufweisen .
Was ich versucht habe:
Serverseitige PHP-Validierung
Ich habe einen Validierungsschritt hinzugefügt, um sicherzustellen, dass alle Arrays (Konto, Debtor, Creditor, Description und Acc_Serial) haben die gleiche Anzahl:
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]