Задать вопрос
@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>
  • Вопрос задан
  • 204 просмотра
Подписаться 1 Средний 10 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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 подразделений для более удобной работы
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽