@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>
  • Вопрос задан
  • 188 просмотров
Решения вопроса 3
@MrColdCoffee
web
Как мне передавать данные из форм, которые выведены циклом ?

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

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

И при получении на сервере, в $_POST['sub_id'] будет айдишник подразделения.
<input required type="text"> где прописывается количество единиц техники, нужно тоже как-то клеймить
например можно добавить id , чтобы на сервере понимать для какой техники прописано количество
Ответ написан
delphinpro
@delphinpro
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 подразделений для более удобной работы
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы