Перейти к содержимому

Сервис обмена электронных валют

Выбрать шаблон и создать сайт

Реализация добавления поля формы без перезагрузки

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 31 Июль 2009 - 15:48

есть форма

<form name="add" action="form.php" method="POST">
	<input type="text" name="pole" value="" />
	<input type="button" value="добавить" name="add" />
	<input type="button" value="удалить" name="remove" />
	<input type="submit" value="сохранить" name="save" />
</form>

как сделать, чтоб при нажатии кнопки добавить добалелось идентичное поле pole без перезагрузки и инициализировалось новое имя этого поля,
а при удалении удалялась без перезагрузки, и как получить потом массив со значениями pole[], при нажатии кнопки сохранить и переходе в form.php

 

 

  • 0

#2 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 31 Июль 2009 - 19:16

sc2r2bey,
динамическую форму можно сделать, примерно, так:

<html>
<head>
<title>Dynamic form</title>
<script type="text/javascript">
var nfields = 1;

function addfield() {
str = '';
nfields++;
for (i = 1; i <= nfields; i++) {
str += (i == 1 ? '' : '<br />');
tsrt = (i == nfields ? '' : document.getElementById('pole'+i).value);
str += '<input type="text" name="pole['+i+']" id="pole'+i+'" value="'+tsrt+'" /> <input type="button" value="удалить" name="remove'+i+'" onClick="rmfield('+i+');" />\n';
}
document.getElementById('poles').innerHTML = str;
}

function rmfield(pos) {
str = '';
delta = 0;
for (i = 1; i <= nfields; i++) {
if (i == pos) {
delta = 1;
}
else {
tpos = i-delta;
str += (tpos == 1 ? '' : '<br />');
tsrt = document.getElementById('pole'+i).value;
str += '<input type="text" name="pole['+tpos+']" id="pole'+tpos+'" value="'+tsrt+'" /> <input type="button" value="удалить" name="remove'+tpos+'" onClick="rmfield('+tpos+');" />\n';
}
}
document.getElementById('poles').innerHTML = str;
nfields--;
}


</script>
</head>
<body>
<form name="add" action="form.php" method="POST">
<input type="button" value="добавить" name="add" onClick="addfield();" />
<div id="poles"><input type="text" name="pole[1]" id="pole1" value="" /> <input type="button" value="удалить" name="remove1" onClick="rmfield(1);" /></div>
<input type="submit" value="сохранить" name="save" />
</form>
</body>
</html>
* будут добавляться новые текстовые поля в конец с именем поля "pole[N]"
* у каждого поля своя кнопка на удаление
* в form.php массив pole[] будет доступен через $_POST['pole'];
  • 0

#3 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 31 Июль 2009 - 23:09

спасибо дружище буду пробывать, потом будут вопросы :)
  • 0

#4 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 01 Август 2009 - 14:16

если я правильно понял, то по такому типу можно сделать и checkbox ставишь галочку появляется поле для загрузки изображения, удаляешь исчезает или группу полей?
  • 0

#5 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 01 Август 2009 - 19:27

sc2r2bey,
добавлять и убавлять можно и группу полей и все прочее, что только можно закодировать хтмл-ом.

Про "checkbox, галочку и поле для загрузки изображения" непонятно, почему нужна именно галочка и что вы, собственно, от них всех хотели.
Но, есть подозрение, что ничто не мешает и их "сделать" по такому же типу. ;)


  • 0

#6 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 01 Август 2009 - 19:40

осталось разобраться как этот массив из POST вытянуть подскажите?
кстати а почему name="pole[1]" ведь массивы начинаются с 0?
  • 0

#7 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 01 Август 2009 - 19:58

кстати а почему name="pole[1]" ведь массивы начинаются с 0?

sc2r2bey,
echo $_POST['pole'][1]; //$_POST['pole'] - это уже массив, но если сильно хочется, то для красоты можно создать новый, например, так:
$pole = $_POST['pole'];
print_r($pole);
echo $pole[1];

кстати а почему name="pole[1]" ведь массивы начинаются с 0?

в php массивы начинаются с чего угодно и вообще могут индексироваться, чем удобно программисту, например, могут быть такие элементы массива:
pole[1] pole[2] pole['a'] pole['b'] pole['some'] pole['something else'] и т.п.
я проиндексировал массив по числу строчек, типа у первой строчки номер 1, у второй - 2, но можно было, например, и с нуля индексировать, для этого достаточно было в качестве имен полей указать не "pole[N]", а просто "pole[]".
  • 0

#8 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 01 Август 2009 - 20:05

супер я практически понял, ты меня подправил а как тогда вычислить количество элементов массива и с какого номера начинается массив?
делаю через count ('$pole'); выдает 1 хотя там больше значений

блин бзе кавычек надо было count ($pole);
теперь циклом можно загнать их в бд, правильно?
  • 0

#9 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 01 Август 2009 - 20:34

супер я практически понял, ты меня подправил а как тогда вычислить количество элементов массива и с какого номера начинается массив?

количество элементов в массиве возвращает функция count($pole)

про то с какого номера начинается массив, встречный вопрос:
вот вам массив:
$forest = array('деревья' => array('липа', 'осина', 'елка'),
			  'звери' => array('тигр', 'лев', 'обезьян'));
который элемент в нем первый? ;)

есть такое понятие, как внутренний указатель массива.
функция reset() устанавливает внутренний указатель массива на "первый элемент" и возвращает его (указатель).
вообще для работы с массивами есть много специальных функций, например, foreach, которая позволяет "перемещаться" по массивам, про нее можно почитать, например, тут: foreach
  • 0

#10 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 01 Август 2009 - 20:36

спасибо, Мастер!
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru