За последние 24 часа нас посетили 18745 программистов и 1606 роботов. Сейчас ищут 647 программистов ...

Обновление разных строк таблицы в форме (PHP/HTML/MYSQL)

Тема в разделе "PHP для новичков", создана пользователем Evgeniy_Nad98, 8 янв 2024.

Метки:
  1. Evgeniy_Nad98

    Evgeniy_Nad98 Гость

    С нами с:
    8 янв 2024
    Сообщения:
    2
    Симпатии:
    0
    Всем привет!

    Делаю небольшое задание, столкнулся с проблемой из-за недостатка знаний (перерыл всё что можно, находил нужное, но не хватило понимания).

    Суть: мне нужно менять часы работы сотрудников по графику, исходя из которых меняется план предоставления для них обратных связей, в столбце `norm_os`.

    Я формирую таблицу через цикл foreach из базы данных (в среде PHPmyAdmin) в форме HTML
    (знаю, что некорректно так делать внутри HTML, но времени мало, в будущем как плотно сяду изучать, обещаю такое не делать:) ):

    Код (PHP):
    1. [/B]
    2. <thead>
    3.                 <tr>
    4.                     <th data-type="string">ФИО сотрудника</th>
    5.                     <th>Часы</th>
    6.                     <th>Норма</th>
    7.                     <th>Предоставлено</th>
    8.                     <th>Осталось</th>
    9.                 </tr>
    10.                 </thead>
    11.  
    12. <tbody>
    13.                             <?php
    14.  
    15.                     $plan3 = mysqli_query($connect, "SELECT `id_plan_os`, `name`, `hour_os`, `norm_os`, `provereno_os`, `ostalos_os`  FROM `users` INNER JOIN `plan_os` ON plan_os.id_user=users.id_user  WHERE `id_role` = 3");
    16.  
    17.                     foreach ($plan3 as $plan33) {
    18.                        
    19.                         ?>
    20.                 <tr class="plan">
    21.  
    22.                     <input name="id_plan_os[]" type="hidden" value="<?= $plan33['id_plan_os']; ?>">
    23.                     <td  bgcolor="#002060" ><input type="text" value ="<?= $plan33['name'] ?>" style="text-align: center; width: 150px; background-color: #002060; color: white;" name="osfio[{$plan33['name']}]" id="osfio[]"></td>
    24.                     <td><input type="text" value ="<?= $plan33['hour_os']; ?>" style="text-align: center;" name="hours[{$plan33['hour_os']}]" id="hours[]">ч.</td>
    25.                     <td bgcolor = "#ccc"><input type="text" value ="<?= $plan33['norm_os'] ?>" style="background: #ccc; text-align: center; cursor: pointer;" name="norma3[]" id="norma3"></td>
    26.                     <td><?= $plan33['provereno_os'] ?></td>
    27.                     <td><?= $plan33['ostalos_os'] ?></td>
    28.  
    29.  
    30.                    
    31.                
    32.                    
    33.                 </tr>
    34.                 <?php
    35.                 }
    36.  
    37.                 ?>
    38.  
    39.                 <?php
    40.  
    41.                     $plan4 = mysqli_query($connect, "SELECT SUM(`norm_os`) FROM `plan_os`");
    42.  
    43.                     $plan4 = mysqli_fetch_assoc($plan4);
    44.  
    45.                     foreach ($plan4 as $plan44) {
    46.                
    47.                         ?>
    48.  
    49.                 <tr class="plan">
    50.                    
    51.                     <td colspan="2" bgcolor="#002060" style="color: white;">Сумма:</td>
    52.                     <td bgcolor = "#ccc"><strong><?= $plan44 ?></strong></td>
    53.                     <td bgcolor = "#ccc"></td>
    54.                     <td bgcolor = "#ccc"></td>
    55.  
    56.                 </tr>
    57.                 <?php
    58.                 }
    59.  
    60.                 ?>
    61.  
    62.             </tbody>
    63. [B]


    Форма ссылается на файл addplanos.php по кнопке сабмит. Код файла:

    Код (PHP):
    1. [/B]<?php
    2.  
    3. require_once 'connect.php';
    4.  
    5.  
    6.  
    7. $osfio = $_POST['osfio'];
    8. $hours = $_POST['hours'];
    9. $norma = $_POST['norma3'];
    10.  
    11.  
    12. if (isset($_POST['svbtn3'])) {
    13.  
    14.  
    15. foreach($osfio AS $osfio1) {
    16.  
    17.     foreach($hours AS $hours1) {
    18.  
    19.    
    20.     mysqli_query($connect, "UPDATE `plan_os` INNER JOIN `users` ON users.id_user=plan_os.id_user SET `date_plan_os` = CURRENT_DATE, `hour_os` = '{$hours1}', `norm_os` = ROUND('{$hours1}'/'100'*'2','0') WHERE `name` = '{$osfio1}' AND MONTH(`date_plan_os`) = MONTH(NOW())");
    21.  
    22.     // mysqli_query($connect, "UPDATE `plan_os` SET `norm_os` = '$norma' WHERE `name` = '$value' AND MONTH(`date_plan_os`) = MONTH(NOW())");
    23.  
    24.     }}
    25.     header('Location: /admins/planadmin.php');
    26.  
    27.  
    28. } else {
    29.  
    30.     header('Location: /admins/planadmin.php');
    31. }
    32.  
    33. ?>
    34.  
    35. [B]

    Проблема: меняется только последняя строка. То есть если я редактирую другие строки, ничего не меняется. Если редактирую последнюю - всё применяется только для неё. Если поменять немного цикл, то только при изменении последней строки таблицы меняются все строки сразу.

    Напомню, что нужно, чтобы я внёс изменения в часах работы, в любых строках столбца. И там, где я ввёл данные, изменения должны примениться.

    Помогите, пожалуйста, очень надеюсь на Вашу помощь!
     
    #1 Evgeniy_Nad98, 8 янв 2024
    Последнее редактирование: 8 янв 2024
  2. Evgeniy_Nad98

    Evgeniy_Nad98 Гость

    С нами с:
    8 янв 2024
    Сообщения:
    2
    Симпатии:
    0
    Так выглядит таблица.

    123123123.png


    БД:

    (plan_os)

    1232132222.png