Название настолько общее, что главным образом потому, что я не знаю, какой должен быть соответствующий заголовок для него. Позвольте мне просто объяснить ситуацию:Использование цикла for для получения значений нескольких элементов в PHP
Скажите, что у меня есть два текстовых поля с именем LastName0
и FirstName0
и кнопка под названием addMore
. Когда я нажму addMore
, через JavaScript будут созданы еще два текстовых поля. Эти текстовые поля будут называться LastName1
и FirstName1
. Когда я снова нажму кнопку addMore
, будут созданы еще две кнопки текстовых полей и названы соответственно LastName2
и FirstName2
соответственно. Это будет продолжаться до тех пор, пока нажимается кнопка addMore
. Кроме того, рядом с текстовыми полями будет создана кнопка с именем deleteThis
. Это просто удаляет созданные текстовые поля при нажатии.
Я также инициализировал переменную, называемую counter
. Каждый раз, когда нажимается кнопка addMore
, counter
поднимается на 1, и всякий раз, когда нажимается кнопка deleteThis
, counter
уменьшается на 1. Значение counter
хранится в скрытом типе ввода.
Когда пользователь отправляет форму, я получаю значение counter
и создаю цикл For, чтобы получить все значения текстовых полей в форме. Ниже приведен пример кода:
//Suppose that the user decides to add 2 more textboxes. Now we have the following:
// LastName0 FirstName0
// LastName1 FirstName1
// LastName2 FirstName2
$ctr = $_POST['counter']; //the counter == 3
for ($x = 0; $x < $ctr; $ctr++)
{
$lastname = $_POST["LastName$x"];
$firstname = $_POST["FirstName$x"];
//This will get the values of LastName0,1,2 and FirstName0,1,2
//code to save to database…
}
На приведенном выше коде, если значение counter
равно 3, то будут сохранены значения текстовых LastName0,1,2
и FirstName0,1,2
. Теперь вот проблема: если пользователь решил удалить LastName1
и FirstName1
, для цикла не сможет итерацию правильно:
$ctr = $_POST['counter']; //the counter == 2
for ($x = 0; $x < $ctr; $ctr++)
{
//Only LastName0 and FirstName0 will be saved.
$lastname = $_POST["LastName$x"];
$firstname = $_POST["FirstName$x"];
//code to save to database…
}
Кто-то сказал мне, чтобы использовать «толчок и поп-музыки» концепцию, чтобы решить эту проблему , но я не совсем уверен, как его применять здесь. Поэтому, если кто-нибудь скажет мне, как его применять, это будет грандиозно.
$ _POST [''] ВОЗВРАТ ТОЛЬКО ЗАПОЛНЕННЫЕ ПОЛЯ ФОРМЫ –
Не связано с проблемой, но вы должны изучить массивы полей ввода. –
У вас есть некоторые проблемы с логикой здесь, если люди удаляют и добавляют текстовые поля, когда более поздние значения уже установлены. Если бы я должен был создать 3 текстовых поля, заполнить их, а затем удалить первый набор. Когда я добавлю новый набор, у меня будет два набора текстовых полей, называемых LastName2 и FirstName2, так как мой счетчик будет деинкрементным, а затем увеличен. – Marryat