Warum werden in PHP beim Absenden eines Formulars nur die ersten Feldwerte der letzten dynamisch hinzugefügten Zeile verPhp

PHP-Programmierer chatten hier
Guest
 Warum werden in PHP beim Absenden eines Formulars nur die ersten Feldwerte der letzten dynamisch hinzugefügten Zeile ver

Post by Guest »

Ich arbeite an einer Webanwendung, bei der ich mithilfe von JavaScript dynamisch Zeilen zu einem HTML-Formular hinzufüge. Jede Zeile enthält mehrere Eingabefelder wie Konto, Debitor und Kreditor. Nach dem Absenden des Formulars verarbeite ich die übermittelten Daten in PHP.
Das Problem tritt speziell bei der letzten dynamischen Zeile auf. Nur das erste Eingabefeld (

Code: Select all

account[]
) der letzten Zeile wird korrekt gelesen, während die anderen Felder (

Code: Select all

debtor[]
und creditor[]) fehlen entweder oder werden nicht erkannt.
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[]
) wird gelesen, während die anderen Felder (

Code: Select all

debtor[]
undcreditor[]) werden nicht erkannt.
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
, Debtor, Creditor, Beschreibung und acc_serial) haben nicht übereinstimmende Zählungen.
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;
}

Dies löst die Fehlermeldung aus, wenn die Zählungen nicht übereinstimmen.
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)

Konto hat 3 Elemente, während Schuldner, Kreditor, Beschreibung und acc_serial nur 2 Elemente haben.
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.
PHP-Schleife zur Verarbeitung von Zeilen

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;
}
}
HTML-Struktur für dynamische Zeilen

Code: Select all





Account
Debit
Credit
Description



[i][/i]

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post