Почему при отправке формы в PHP обрабатываются только первые значения полей последней динамически добавленной строки? [зHtml

Программисты Html
Ответить
Anonymous
 Почему при отправке формы в PHP обрабатываются только первые значения полей последней динамически добавленной строки? [з

Сообщение Anonymous »

Я работаю над веб-приложением, в котором динамически добавляю строки в HTML-форму с помощью JavaScript. Каждая строка содержит несколько полей ввода, таких как счет, дебитор и кредитор. После отправки формы я обрабатываю отправленные данные в PHP.
Проблема возникает именно с последней динамической строкой. Только первое поле ввода (

Код: Выделить всё

account[]
) последней строки читается правильно, а остальные поля (

Код: Выделить всё

debtor[]
и кредитор[]) либо отсутствуют, либо не распознаются.
Например:
Если у меня 10 динамических строк, первые 9 строк будут обрабатываются правильно, и все их поля правильно отображаются в выводе var_dump. Однако для последней строки сохраняется только значение первого поля (

Код: Выделить всё

account[]
) читается, а остальные поля (

Код: Выделить всё

debtor[]
и кредитор[]) не обнаружены.
Однако, когда я добавляю новую динамическую строку и отправляю форму, скрипт выдает ошибку:
< blockquote>
При обработке данных произошла ошибка. Повторите попытку.

Похоже, эта проблема возникает из-за того, что массивы в запросе POST (, должник, кредитор, описание и acc_serial) имеют несовпадающие значения.
Что я могу сказать? пробовал:
Проверка на стороне сервера PHP
Я добавил этап проверки, чтобы гарантировать, что все массивы (счет, дебитор, кредитор, описание и acc_serial) имеют одинаковые подсчет:

Код: Выделить всё

$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;
}

Это вызывает сообщение об ошибке, если счетчики не совпадают.
Отладка данных POST
I использовал var_dump($_POST) для проверки отправленных данных. Вот результат проблемного запроса:

Код: Выделить всё

  '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)

Счет содержит 3 элемента, а должник, кредитор, описание и acc_serial — только 2 элемента.
В этом случае каждое из оставшихся полей — Должник, Кредитор, Описание, и Серийный номер учетной записи — должно иметь три поля ввода, как и поле «Имя учетной записи», поскольку я добавил третью динамическую строку в запись журнала. Однако по какой-то причине входные значения динамических полей в третьей вновь добавленной строке не считываются, за исключением поля «Имя учетной записи». Появляется следующая ошибка, как показано в итерационном цикле:

Код: Выделить всё

An error occurred while processing data. Please try again.
Цикл PHP для обработки строк

Код: Выделить всё

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-структура для динамических строк

Код: Выделить всё





Account
Debit
Credit
Description



[i][/i]










Подробнее здесь: [url]https://stackoverflow.com/questions/79320450/why-are-only-the-first-field-values-of-the-last-dynamically-added-row-processed[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»