@Bastard_Ape

Как реализовать отправку данных в БД с форм выведенных циклом?

В БД имеются два справочника: "Подразделения", "Техника", отобразил я их так:

61ef86f7b0cc3663884689.png

На каждое подразделение выдается определенное количество техники которое пользователи должны указать сами, ввести в инпуты, введенные данные я хочу хранить в третьем справочнике "Справочник_норм", со столбцами ID_подразделения, ID_техники, Количество_техники. Как мне передавать данные из форм, которые выведены циклом ?

Код:

<div class="container" style="margin-top: 10px;">
    <div class="text-center">
        <h4>Нормы положенности: <?php echo $_SESSION['person']['nameovdrb'] ?></h4>
    </div>
</div>

<div class="container-fluid" style="margin-top: 20px;">
<?php if (!empty($resselect)) {
    foreach ($resselect as $ressub) { ?>
    <form action="" method="POST">
        <table id="table-info" class="table table-sm  table-bordered" style="font-size: 12px;">
                <thead class="bg-primary text-white text-center">
                        <tr>
                            <th colspan=9><?php echo $ressub->name_subdivision; ?></th>
                        </tr>
                    </thead>
                    <tbody class="table-light text-center">
                        <tr>
                            <?php if (!empty($resselecttech)) {
                                foreach ($resselecttech as $restech) { ?>
                                    <td><?php echo $restech->type; ?></td>

                                <?php
                                } ?>
                            <?php } else { ?>
                        <tr>
                            <td colspan=9>В БАЗЕ ДАННЫХ НЕТ ЗАПИСЕЙ</td>
                        </tr>
                    <?php } ?>
                    </tr>
                    <tr>
                        <?php if (!empty($resselecttech)) {
                            foreach ($resselecttech as $restech) { ?>
                                <td><input required type="text"><span>единиц техники</span></td>
                            <?php
                            } ?>
                        <?php } else { ?>
                    <tr>
                        <td colspan=9>В БАЗЕ ДАННЫХ НЕТ ЗАПИСЕЙ</td>
                    </tr>
                <?php } ?>
                </tr>
                <tr>
                    <td colspan=9><button class="btn btn-success btn-sm">Сохранить</button></td>
                </tr>
             </tbody>
        </table>
    </form>
 <?php
           }?>
        <?php } else { ?>
            <tr>
                <td colspan=9>В БАЗЕ ДАННЫХ НЕТ ЗАПИСЕЙ</td>
            </tr>
        <?php } ?>
</div>
  • Вопрос задан
  • 194 просмотра
Решения вопроса 3
@MrColdCoffee
web
Как мне передавать данные из форм, которые выведены циклом ?

Они будут передаваться на эту же страницу методом POST при нажатии на кнопку "сохранить".

В цикле -> в форме -> перед кнопкой "сохранить" можно создать
<input type="hidden" name="sub_id"  value="ТУТ ID подразделения" />

И при получении на сервере, в $_POST['sub_id'] будет айдишник подразделения.
<input required type="text"> где прописывается количество единиц техники, нужно тоже как-то клеймить
например можно добавить id , чтобы на сервере понимать для какой техники прописано количество
Ответ написан
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Фанат выше верно отметил – можно сделать отдельные формы на каждый блок.
Так как в таблицу нельзя впихнуть тег form, то можно сделать так.

<form name="form1" method="post" action="/save/1"></form>
<form name="form2" method="post" action="/save/2"></form>
<form name="form3" method="post" action="/save/3"></form>
<table>
<tbody>
  <tr>
    <td><input type="text" name="param1" form="form1"></td>
    <td><input type="text" name="param2" form="form1"></td>
  <tr>
  <tr><td><button type="submit" form="form1">Send</button></td><tr>
</tbody>
<tbody>
  <tr>
    <td><input type="text" name="param1" form="form2"></td>
    <td><input type="text" name="param2" form="form2"></td>
  <tr>
  <tr><td><button type="submit" form="form2">Send</button></td><tr>
</tbody>
<tbody>
  <tr>
    <td><input type="text" name="param1" form="form3"></td>
    <td><input type="text" name="param2" form="form3"></td>
  <tr>
  <tr><td><button type="submit" form="form3">Send</button></td><tr>
<table>


Но, в принципе можно и одной формой обойтись. Тогда и кнопку Save можно сделать общую.

<form method="post" action="/save">
<table>
  <tr>
    <td><input type="text" name="data[ОУР][param1]"></td>
    <td><input type="text" name="data[ОУР][param2]"></td>
  <tr>
  <tr>
    <td><input type="text" name="data[ОЭБ][param1]"></td>
    <td><input type="text" name="data[ОЭБ][param1]"></td>
  <tr>
  <tr>
    <td><input type="text" name="data[ОНК][param1]"></td>
    <td><input type="text" name="data[ОНК][param1]"></td>
  <tr>
  <tr><td><button type="submit">Send</button></td><tr>
</tbody>
<table>
</form>

Ответ написан
Комментировать
t-alexashka
@t-alexashka
Сразу пишу legacy код
Если я правильно понял вам нужно заполнять input так чтобы его потом можно было прочитать в php для вставки в справочник норм. Если да, то вот:

<?php
foreach ($resselecttech as $restech) { ?>
	<td><input required type="text" name="values[<?php echo $ressub->name_subdivision; ?>][<?php echo $restech->type;?>]"><span>единиц техники</span></td>
<?php
} ?>


замените этим куском кусок который отвечает за вывод инпута. при сохранении формы вы получите многомерный массив в $_POST['values'] такой структуры:

[
	'ОУР' => [
		'ИБП' => 5, // где 5 это значение из инпута
		'КМТ А3' => ...,
		...
	],
	'ОЭБ и ПК' => [
		'ИБП' => ...,
		'КМТ А3' => ...,
		...
	],
	...	
]


P.S. естественно имена лучше заменить на id подразделений для более удобной работы
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 20:08
400000 руб./за проект
23 апр. 2024, в 19:21
300 руб./за проект
23 апр. 2024, в 19:05
15000 руб./за проект