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


Пользователь месяца
Ixman Ixman 1-й за Октябрь
Очков активности: 693 0 тем, 33 сообщения, 14 баллов репутации
Сайт: o5cat.ru
ТОП самых активных за этот месяц
  • Фотография ShowPrint
    #1

    ShowPrint (ShowPrint.ru)
    Очков активности: 96 Вне конкурса за определение пользователя месяца

  • Фотография Ixman
    #2

    Ixman (o5cat.ru)
    Очков активности: 85.5 Вне конкурса за определение пользователя месяца

  • Фотография yuran
    #3

    yuran (yurbol.ru)
    Очков активности: 82.5 0 тем, 55 сообщений, 1 балл репутации

  • Фотография BLIK
    #4

    BLIK
    Очков активности: 51 Вне конкурса за определение пользователя месяца

  • Фотография Mandarin
    #5

    Mandarin
    Очков активности: 51 0 тем, 34 сообщения, 1 балл репутации

  • Фотография WGN
    #6

    WGN (worldgamenews.com)
    Очков активности: 45 Вне конкурса за определение пользователя месяца

  • Фотография pozitron123
    #7

    pozitron123
    Очков активности: 31.5 2 темы, 15 сообщений, 1 балл репутации

  • Фотография алексс
    #8

    алексс
    Очков активности: 27 2 темы, 12 сообщений, 1 балл репутации

  • Фотография Андрей WPMasterKZ
    #9

    Андрей WPMasterKZ (wpmaster.kz)
    Очков активности: 19.5 0 тем, 13 сообщений, 1 балл репутации

  • Фотография Scool
    #10

    Scool (stostory.ru)
    Очков активности: 19.5 3 темы, 4 сообщения, 1 балл репутации

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 31.10.2018
  • Яндекс выдача: 15.11.2018
Топ 5 участников по репутации


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

#1 surfer

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

Отправлено 31 July 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
  • Пользователь
  • 642 сообщений
  • Репутация: 188

Отправлено 31 July 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
  • Заблокированные
  • 1956 сообщений
  • Репутация: 71

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

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

#4 surfer

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

Отправлено 01 August 2009 - 14:16

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

#5 yury

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

Отправлено 01 August 2009 - 19:27

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

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


  • 0

#6 surfer

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

Отправлено 01 August 2009 - 19:40

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

#7 yury

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

Отправлено 01 August 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
  • Заблокированные
  • 1956 сообщений
  • Репутация: 71

Отправлено 01 August 2009 - 20:05

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

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

#9 yury

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

Отправлено 01 August 2009 - 20:34

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

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

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

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

#10 surfer

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

Отправлено 01 August 2009 - 20:36

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

#11 surfer

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

Отправлено 01 August 2009 - 20:41

foreach ($pole as &$value) {
echo $value;
}

$value - это количество элементов в массиве, так?
т.е. я могу теперь вместо в echo делать записи в БД
  • 0

#12 yury

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

Отправлено 01 August 2009 - 21:25

количество элементов в массиве $pole - это count($pole)
в $value попадают значения элементов массива

foreach ($pole as $value) { //для каждого элемента массива $pole помещать его значение в переменную $value
echo $value; //выводить эту переменную в браузер
}
по-русски эта конструкция читается так: "для каждого элемента массива $pole помещать его значение в переменную $value и выводить эту переменную в браузер"

т.е. я могу теперь вместо в echo делать записи в БД

да
  • 0

#13 surfer

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

Отправлено 01 August 2009 - 21:42

я сейчас перечатал раздел про массивы в книге, отталкиваясь от общения с вами все устаканилось :)
  • 0

#14 Banderas

Banderas
  • Неактивные
  • 1168 сообщений
  • Репутация: 1

Отправлено 01 August 2009 - 22:31

Вот 3 способа как извлечь из массива данные:
1) FOR
for ($i=0; $i<count($arr); $i++) {
	echo $arr[$i]."<br />";
}
2) FOREACH
foreach ($massiv as $key => $value) {
	echo "$key => $value <br />";
}
3) WHILE
while ($element = each($massiv)) {
	echo $element['key'].':'.$element['value']."<br />";
}

После использования foreach массив нужно резетнуть reset() что бы массив оставался массивом)))
  • 0

I'm web-developer 

Magento one love!



#15 surfer

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

Отправлено 02 August 2009 - 07:55

блин Вы меня расстрогали таким отношением, спасибо!
  • 0

#16 surfer

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

Отправлено 02 August 2009 - 09:43

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

#17 yury

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

Отправлено 02 August 2009 - 11:14

<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[]" id="pole'+i+'" value="'+tsrt+'" /> <input type="button" value="удалить" name="remove'+i+'" onClick="rmfield('+i+');"'+((nfields == 1) ? ' disabled' : '')+' />\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[]" id="pole'+tpos+'" value="'+tsrt+'" /> <input type="button" value="удалить" name="remove'+tpos+'" onClick="rmfield('+tpos+');"'+((nfields == 2) ? ' disabled' : '')+' />\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[]" id="pole1" value="" /> <input type="button" value="удалить" name="remove1" onClick="rmfield(1);" disabled /></div>
<input type="submit" value="сохранить" name="save" />
</form>
</body>
</html>

  • 0

#18 ZiTosS

ZiTosS
  • Неактивные
  • 5148 сообщений
  • Репутация: 8

Отправлено 05 August 2009 - 11:25

Всё сделано сложно, DOM никто не использует? Вообще можно сделать всё намного проще.
  • 0

#19 surfer

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

Отправлено 05 August 2009 - 12:15

а как тогда?


  • 0

#20 ZiTosS

ZiTosS
  • Неактивные
  • 5148 сообщений
  • Репутация: 8

Отправлено 06 August 2009 - 22:54

sc2r2bey, почитайте вот это вступление в DOM. Хоть там и не все функции приводятся, но всё понятно расписано:
JS DOM функции
А вот вообще по DOM общее
  • 0

robot

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


Похожие темы

  Название темы Автор Статистика Последнее сообщение

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