18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 816
1

Неограниченное добавление полей по нажатию кнопки без сохранения при обновлении

16.01.2021, 13:55. Показов 2672. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Казалось бы простая задача, и вроде бы когда-то делал, но не могу найти у себя (может ошибаюсь что делал) и по поиску тоже подходящего не нашел.
Необходимо только на php сделать добавление полей по нажатию кнопки. Сколько раз кнопку нажали, столько раз добавились новые поля. После обновления страницы все добавленные поля удалились. Как сделать это с записью в файл на сервере - знаю, получается. Но вроде бы делал и без дополнительных файлов. И вроде как был вариант с использованием скрытых полей. Вот только сейчас не получается. Пробую так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<input type="text" name="koliko" value="<?php if(isset($_POST['add'])){if (empty($_POST['koliko'])){$k = 0;$k++; echo $k;} else {$k=$k++; echo $k;}} ?>"/>
// это поле потом мужно скрыть type = "hidden"
<form action = "" method="POST">
    <div class="inputs">
        <input type="text" name="name1[]" />
        <input type="text" name="name2[]" />
        
<?php 
$pole[]= '';
if(isset($_POST['add']))
{
$str = '<br><input type="text" name="name1[]" />  <input type="text" name="name2[]" />';
array_push($pole, $str);
for($i = 1; $i <=count($pole); $i++){
    echo $i.'<br>';
    echo $pole[$i-1];
    }
echo $pole[$k].'<br>';
}
 
?>
    </div>
    <input type="submit" name="add" value="Добавить" />
</form>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2021, 13:55
Ответы с готовыми решениями:

Добавление полей по нажатию кнопки
Здравствуйте уважаемая Администрация и пользователи форума! Подскажите, пожалуйста как...

Добавление полей по нажатию кнопки
Здравствуйте спецы. Подскажите пожалуйста такую вещь. Есть форма. В ней есть несколько полей для...

Добавление полей в форме при нажатии кнопки
Здравствуйте! Не так давно здесь на форуме поднимал тему, результатом которой и явился новый...

Добавление текстбоксов по нажатию клавиши и удаление по нажатию другой кнопки
Всем доброго времени суток. Хотел попросить помощи в написании следующего кода. Кое что набросал,...

12
Невнимательный
2573 / 957 / 314
Регистрация: 08.02.2013
Сообщений: 5,677
Записей в блоге: 2
16.01.2021, 17:00 2
Цитата Сообщение от DyadyaGe Посмотреть сообщение
добавление полей по нажатию кнопки
js ?
Что-то похожее где-то здесь постил, но нее по колличеству нажатий а по числам "сколько на сколько" полей
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<html>
<head>
    <title>js</title>
    <script>
function get_fields(el) {
    var mx1 = document.getElementById('mx1'),
        mx2 = document.getElementById('mx2'),
        x = el.elements['x'].value,
        y = el.elements['y'].value;
 
    mx1.innerHTML ='';
    mx2.innerHTML ='';
    for(var i=0; i<x; ++i){
        for(var ii=0; ii<y; ++ii){
            mx1.innerHTML += `<input type="range" name="M1[${i}][]"/>`;
            mx2.innerHTML += `<input type="range" name="M2[${i}][]"/>`;
        }
        mx1.innerHTML += '<br/>';
        mx2.innerHTML += '<br/>';
    }
}
 
    </script>
</head>
<body style="display:flex">
 
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
 
 
    echo '<div>';
    echo '<xmp>', var_export($_POST), "</xmp>\n";
//      <input type="button" value="Close" onclick="self.parent.tb_remove()" />
 
    $args = array(
        'x' => array(
            'filter' => FILTER_VALIDATE_INT,
            'options'   => array('min_range' => 1, 'max_range' => 10)
            ),
        'y' => array(
            'filter' => FILTER_VALIDATE_INT,
            'options'   => array('min_range' => 1, 'max_range' => 10)
            ),
        'M1' => array(
            'filter' => FILTER_VALIDATE_FLOAT,
            'flags'  => FILTER_REQUIRE_ARRAY
            ),
        'M2' => array(
            'filter' => FILTER_VALIDATE_FLOAT,
            'flags'  => FILTER_REQUIRE_ARRAY
            )
        );
    $IN = filter_input_array(INPUT_POST, $args);
    echo '<xmp>', var_export($IN), "</xmp>\n";
 
    echo '</div>';
}
?>
    <form method="post">
    <fieldset><legend>Form</legend>
    <fieldset><legend>Fields</legend>
        <input type="number" name="x"  min="1" max="10"/>
        X
        <input type="number" name="y"  min="1" max="10"/>
 
        <input type="button" value="Show" onclick="get_fields(this.parentNode)" />
    </fieldset>
        <fieldset><legend>Matrix 1</legend>
            <div id="mx1"></div>
        </fieldset>
        <fieldset><legend>Matrix 2</legend>
            <div id="mx2"></div>
        </fieldset>
        <input type="submit"/>
    </fieldset>
    </form>
 
</body>
</html>
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 816
16.01.2021, 17:15  [ТС] 3
Цитата Сообщение от x_lab Посмотреть сообщение
s ?
За вариант спасибо, буду иметь ввиду. Но хотелось именно силами php.
Самый простой способ без js - записывать добавленные строки в файл и потом из него считывать. Но вроде ж был способ обойти это.
Пока что добавляет только один раз. И так сказать "калькулятор" не срабатывает в скрытом поле.
0
1931 / 1522 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
16.01.2021, 20:37 4
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Но хотелось именно силами php.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<form action="" method="post">
    <?php if (isset($_POST['add'])) { ?>
        <?php if (isset($_POST['count'])) { ?>
            <?php for ($i = 0; $i <= $_POST['count']; $i++) { ?>  
                <?php $n = 'name' . $i; ?>
                <input type="text" name="<?php echo $n; ?>" value="<?php echo $_POST[$n]; ?>">
            <?php } ?> 
            <input type="hidden" name="count" value="<?php echo $_POST['count'] + 1; ?>">
        <?php } else { ?>  
            <input type="text" name="name0" value="">
            <input type="hidden" name="count" value="1">
        <?php } ?>
    <?php } ?> 
    <input type="submit" name="add" value="добавить">
</form>
1
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 816
16.01.2021, 22:00  [ТС] 5
Цитата Сообщение от fanatikus Посмотреть сообщение
<input type="text" name="<?php echo $n; ?>" value="<?php echo $_POST[$n]; ?>">
Почти. Только после первого пустого поля второе создается уже с предупреждением внутри текстового поля по типу:
PHP
1
<br /><b>Notice</b>:  Undefined index: name1 in .... on line <b>6</b><br />
0
1931 / 1522 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
16.01.2021, 22:26 6
Лучший ответ Сообщение было отмечено DyadyaGe как решение

Решение

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form action="" method="post">
    <?php if (isset($_POST['add'])) { ?>
        <?php if (isset($_POST['count'])) { ?>
            <?php for ($i = 0; $i < $_POST['count']; $i++) { ?>  
                <?php $n = 'name' . $i; ?>
                <input type="text" name="<?php echo $n; ?>" value="<?php echo $_POST[$n]; ?>">
            <?php } ?> 
            <input type="text" name="name<?php echo $_POST['count']; ?>" value="">
            <input type="hidden" name="count" value="<?php echo $_POST['count'] + 1; ?>">
        <?php } else { ?>  
            <input type="text" name="name0" value="">
            <input type="hidden" name="count" value="1">
        <?php } ?>
    <?php } ?> 
    <input type="submit" name="add" value="добавить">
</form>
1
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 816
16.01.2021, 22:41  [ТС] 7
Цитата Сообщение от fanatikus Посмотреть сообщение
<?php $n = 'name' . $i; ?>
Буду пробовать перевести под свои нужды, чтоб был массив имен и столбец по два поля в строку.
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 816
17.01.2021, 11:28  [ТС] 8
Цитата Сообщение от fanatikus Посмотреть сообщение
<input type="text" name="<?php echo $n; ?>" value="<?php echo $_POST[$n]; ?>">
Чуток переделал под себя, без вашей подсказки не получалось:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<form action="" method="post">
  <div>
    <div class="inputs" >
<input type="text" name="name1[]" value=""/> <input type="text" name="name2[]" value=""/><br>
    <?php if (isset($_POST['add'])) { ?>
        <?php if (isset($_POST['count'])) { ?>
            <?php for ($i = 0; $i < $_POST['count']; $i++) { ?>  
                <input type="text" name="name1[]" value=""> <input type="text" name="name2[]" value=""><br>
            <?php } ?> 
            <input type="text" name="name1[]" value=""> <input type="text" name="name2[]" value="">
            <input type="hidden" name="count" value="<?php echo $_POST['count'] + 1; ?>">
        <?php } else { ?>  
            <input type="text" name="name1[]" value=""> <input type="text" name="name2[]" value="">
            <input type="hidden" name="count" value="1">
        <?php } ?>
    <?php } ?> 
<br>start from:  <input type="text" name="name3" value=""/><br><br>
    </div>
    <div class="submits">
       <input type="submit" name="add" value="Добавить" />
    </div>
  </div>
</form>
0
1931 / 1522 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
17.01.2021, 11:30 9
Цитата Сообщение от DyadyaGe Посмотреть сообщение
чтоб был массив имен
можно же добавлять неограничено
массив тоже будет бесконечный?
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 816
17.01.2021, 12:04  [ТС] 10
Цитата Сообщение от fanatikus Посмотреть сообщение
можно же добавлять неограничено
массив тоже будет бесконечный?
Ну да, может быть бесконечный - name1[]. А у вас получается каждый раз новое имя. Это ни хорошо, ни плохо. В одних ситуациях лучше, когда у всех отдельное имя, а иногда проще прогнать через перебор массива. Переделок-то минимум. Важно, что смысл вашего кода правильный. А у меня не получался. Думаю, если бы я более корректно поставил задачу, то и вы бы сделали именно под неё.
0
1931 / 1522 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
17.01.2021, 18:30 11
Лучший ответ Сообщение было отмечено DyadyaGe как решение

Решение

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<form action="" method="post">
    <?php $c = 0; ?>
 
    <?php if(isset($_POST['name'])){ ?>
        <?php foreach($_POST['name'] as $k => $val){ ?> 
            <input type="text" name="name[<?php echo $k; ?>]" value="<?php echo $val; ?>">
            <?php $c = $k + 1; ?>
        <?php } ?>
    <?php } ?>
    <?php if(isset($_POST['add'])){ ?>
        <input type="text" name="name[<?php echo $c ; ?>]" value="">
    <?php } ?>
 
    <input type="submit" name="add" value="добавить">
</form>
Добавлено через 5 часов 56 минут
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Чуток переделал под себя,
но, если заполнить уже созданные инпты и добавить еще, то все очистится. все инпуты будут пусты.
в моем примере, заполненные значения сохраняются.
1
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 816
19.01.2021, 00:50  [ТС] 12
Цитата Сообщение от fanatikus Посмотреть сообщение
в моем примере, заполненные значения сохраняются
Ваш пример очень хорош. Но я в него никак не могу добавить на тех же условиях второе поле (пару к первому, как в моих примерах и шапке). Вернее пока добился того, что если введены данные, то их запоминает, а если было пустым, то выдает предупреждение.
0
1931 / 1522 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
19.01.2021, 14:00 13
Лучший ответ Сообщение было отмечено DyadyaGe как решение

Решение

Цитата Сообщение от DyadyaGe Посмотреть сообщение
на тех же условиях второе поле (пару к первому,
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form action="" method="post">
    <?php $c = 0; ?>
 
    <?php if (isset($_POST['name'])) { ?>
        <?php foreach ($_POST['name'] as $k => $val) { ?> 
            <input type="text" name="name[<?php echo $k; ?>]" value="<?php echo $val; ?>">
            <input type="text" name="name1[<?php echo $k; ?>]" value="<?php echo $_POST['name1'][$k]; ?>">
            <?php $c = $k + 1; ?>
        <?php } ?>
    <?php } ?>
    <?php if (isset($_POST['add'])) { ?>
        <input type="text" name="name[<?php echo $c; ?>]" value="">
        <input type="text" name="name1[<?php echo $c; ?>]" value="">
    <?php } ?>
 
    <input type="submit" name="add" value="добавить">
</form>
1
19.01.2021, 14:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2021, 14:00
Помогаю со студенческими работами здесь

Как реализовать в Access добавление группы полей при нажатии кнопки?
Ситуация. Есть форма &quot;Акты&quot;. Данные из нее попадают в таблицу &quot;Акты&quot;. В Актах содержится номер...

Добавление записей по нажатию кнопки
Подскажите в чем ошибка. Я хочу, чтоб по нажатию кнопки текст из textBox переходил в базу данных....

Добавление текста по нажатию кнопки
Создаю массив кнопок обработчик один для всех.Номер кнопки записывается в textbox и обновляется...

Добавление Item в TreeView по нажатию кнопки
Очень нужна помощь, как по нажатию кнопки на форме можно создать ветку у TreeView?

Добавление строки в таблицу по нажатию кнопки
Есть несколько таблиц со справочными данными. Есть сводная таблица. На форме несколько...

Добавление строки в список по нажатию кнопки
Пишу свое первое приложение средствами MFC. До этого прогал в с++ билдере Вот создаю кнопку и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru