Мой любимый способ сделать это состоит в использовании DOM как можно больше. Не используйте счетчики, если вам абсолютно не нужно (они всего лишь источник ошибок). Вот простой пример:
HTML/JS/JQuery (может меняться, я созданного это, чтобы сделать его легко следовать):
<form method="POST" id="theForm">
<div id="fields">
<input type="text" name="fields[]"/>
</div>
<input type="button" id="addField" value="Add Field"/>
</form>
<script type="text/javascript">
$(document).ready(function() {
$('#addField').click(function() {
$('#fields').append(
$('<input type="text" name="fields[]"/>')
);
})
});
</script>
Обратите внимание, как я не нужно использовать какой-либо подсчета переменной , Как и PHP, вы можете создать массив переменных POST без указания индексов с помощью []
, и сервер (или браузер? Я не уверен) построит массив для вас. Порядок, в котором поля <input />
отображаются на странице, будет соответствовать порядку их предоставления на ваш PHP через $_POST
. Этот код ...
foreach ($_POST['fields'] as $fieldIndex => $fieldValue) {
doStuff($fieldValue);
}
... будет обрабатывать каждое поле в том порядке, в котором они были добавлены. Вы даже можете использовать JavaScript для повторно заказать или удалить входы и что будет отражено в $_POST
. Этот метод, в сочетании с кодированием JSON, позволяет быстро и легко обрабатывать поля ввода с несколькими входами.
Update:
Применяя приведенный выше код для Вашего потребительной случае требуется небольшое дополнение, которое не может быть очевидным.Вам нужно создать массив для каждого из трех входов (остановка, времени и AMPM) как так:
<form method="POST" id="theForm">
<div id="fields">
<input type="text" name="fields[stop][]"/>
<input type="text" name="fields[timing][]"/>
<select name="fields[ampm][]">
<option value="am">AM</option>
<option value="pm">PM</option>
</select>
<br/>
</div>
<input type="button" id="addField" value="Add Field"/>
</form>
<script type="text/javascript">
$(document).ready(function() {
$('#addField').click(function() {
$('#fields').append(
$('<input type="text" name="fields[stop][]"/>'),
$('<input type="text" name="fields[timing][]"/>'),
$('<select name="fields[ampm][]"><option value="am">AM</option><option value="pm">PM</option></select>'),
$('<br/>')
);
})
});
</script>
Заполнение этой формы с некоторыми тестовыми данными дает следующий массив:
[fields] => Array
(
[stop] => Array
(
[0] => aaa
[1] => bbb
)
[timing] => Array
(
[0] => 1111
[1] => 2222
)
[ampm] => Array
(
[0] => am
[1] => pm
)
)
и обрабатывать, что в PHP требует простой старой школы цикл:
$numFields = count($_POST['fields']['stop']);
for ($i = 0; $i < $numFields; $i++) {
// Pack the field up in an array for ease-of-use.
$field = array(
'stop' => $_POST['fields']['stop'][$i],
'timing' => $_POST['fields']['timing'][$i],
'ampm' => $_POST['fields']['ampm'][$i]
);
saveToDatabase($field);
}
к сожалению, у меня нет времени прямо сейчас, чтобы убедиться, что все это правильно. Это должно быть, и если это не поможет, возможно. Я вернусь через несколько часов.
Обратите внимание, что этот ответ использует 'JQuery'. – Dyin
@Manica thanx working wll – user2180069
как ур код, я это сделал, но все еще столкнулся с проблемой на php end: – user2180069