Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 17.05.2024
Сообщений: 36

Объединение и разделение информации при выводе из БД (если больше одной строки с одним и тем же id) на страницу

06.06.2024, 17:17. Показов 771. Ответов 9

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Реализую редактирование и апдейт информации админом! Сейчас на этапе вывода информации!
У меня в БД имеется вся информация о курсе, которая храниться в таблице courses! Так же есть расписание курса, которое хранится в courses_shedule, и у одного курса может быть большего одного времени проведения занятия! Мне нужно объединить эту информацию при выводе в таблицу, а после разделить, для редактирования! Думала сделать это через условие и подсчет количества строк с определенным id, но реализация подкачала, потому что не уверена как объединить и передать эту инфу
В коде будет выделено комментирование - как пыталась это реализовать

admin.php
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<select id="courseSelect" onchange="selectCourses()" class="form-select" aria-label="Выберите курс">
                            <option selected disabled>Выберите курс</option>
                            <?php while ($fullcourse = mysqli_fetch_assoc($courses_result)) { ?>
                                <option value="<?php echo $fullcourse['id']; ?>"><?php echo $fullcourse['unique_code']; ?></option>
                            <?php } ?>
                          </select>
                          <table class="table">
                          <thead>
                            <tr>
                              <th scope="col">Name</th>
                              <th scope="col">Unique code</th>
                              <th scope="col">Level</th>
                              <th scope="col">Start date</th>
                              <th scope="col">End date</th>
<!-- <th scope="col">Shedule</th> -->
HTML5
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
80
81
82
83
<th scope="col">Weekday</th>
                              <th scope="col">Start time</th>
                              <th scope="col">End time</th>
                              <th scope="col">Instructors</th>
                              <th scope="col">Language</th>
                              <th scope="col"></th>
                            </tr>
                          </thead>
                          <tbody id="tablebEditCourse">
 
                          </tbody>
                        </table>
 
 
                        <!-- The Modal -->
                        <div class="modal" id="myModal">
                          <div class="modal-dialog">
                            <div class="modal-content">
 
                              <!-- Modal Header -->
                              <div class="modal-header">
                                <h4 class="modal-title">Edit course: </h4>
 
                                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                              </div>
 
                              <!-- Modal body -->
                              <div class="modal-body">
                                <div class="form-group">
                                  <label>Name course: </label>
                                  <input  type="text" id="nameCourse" class="form-control">
                                </div>
                                <div class="form-group">
                                  <label>Unique code: </label>
                                  <input  type="text" id="uniqueCodeCourse" class="form-control">
                                </div>
                                <div class="form-group">
                                  <label>Level: </label>
                                  <input  type="text" id="levelCourse" class="form-control">
                                </div>
                                <div class="form-group">
                                  <label>Start date: </label>
                                  <input  type="text" id="startDateCourse" class="form-control">
                                </div>
                                <div class="form-group">
                                  <label>End date: </label>
                                  <input  type="text" id="endDateCourse" class="form-control">
                                </div>
                                <!-- <div class="form-group">
                                  <label>Shedule: </label>
                                  <input  type="text" id="sheduleCourse" class="form-control">
                                </div> -->
                                <div class="form-group">
                                  <label>Weekday: </label>
                                  <input  type="date" id="weekdayCourse" class="form-control">
                                </div>
                                <div class="form-group">
                                  <label>Start time: </label>
                                  <input  type="time" id="startTimeCourse" class="form-control">
                                </div>
                                <div class="form-group">
                                  <label>End time: </label>
                                  <input  type="time" id="endTimeCourse" class="form-control">
                                </div>
                                <div class="form-group">
                                  <label>Instructors: </label>
                                  <input  type="text" id="instructorsCourse" class="form-control">
                                </div>
                                <div class="form-group">
                                  <label>Language: </label>
                                  <input  type="text" id="languageCourse" class="form-control">
                                </div>
                              </div>
 
                              <!-- Modal footer -->
                              <div class="modal-footer">
                                <button type="button" id="save" class="btn btn-primary pull-right" data-bs-dismiss="modal">Update</button>
                                <button type="button" class="btn btn-danger" data-bs-dismiss="modal">Close</button>
                              </div>
 
                            </div>
                          </div>
                        </div>
editCourse.js
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function selectCourses(){
  var selectCourse = document.getElementById("courseSelect").value;
 
  $.ajax({
    url: "function_for_admin/editCourse.php",
    method: "POST",
    data: {
      id : selectCourse
    },
    success:function(data){
      $("#tablebEditCourse").html(data);
    }
  })
}
 
 
$(document).ready(function(){
  $(document).on('click', 'button[data-role="update"]',function() {
    var id = $(this).data('id');
    var name = $('#'+id).children('td[data-target="name_course"]').text();
    var unique_code = $('#'+id).children('td[data-target="unique_code"]').text();
    var level = $('#'+id).children('td[data-target="level"]').text();
    var start_date = $('#'+id).children('td[data-target="start_date"]').text();
    var end_date = $('#'+id).children('td[data-target="end_date"]').text();
// var schedule = $('#'+id).children('td[data-target="schedule"]').text();
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
var weekday = $('#'+id).children('td[data-target="weekday"]').text();
    var start_time = $('#'+id).children('td[data-target="start_time"]').text();
    var end_time = $('#'+id).children('td[data-target="end_time"]').text();
    var instructors = $('#'+id).children('td[data-target="instructors"]').text();
    var language = $('#'+id).children('td[data-target="language"]').text();
 
 
    $('#nameCourse').val(name);
    $('#uniqueCodeCourse').val(unique_code);
    $('#levelCourse').val(level);
    $('#startDateCourse').val(start_date);
    $('#endDateCourse').val(end_date);
// $('#sheduleCourse').val(schedule);
JavaScript
1
2
3
4
5
6
7
8
 $('#weekdayCourse').val(weekday);
    $('#startTimeCourse').val(start_time);
    $('#endTimeCourse').val(end_time);
    $('#instructorsCourse').val(instructors);
    $('#languageCourse').val(language);
    $('#myModal').modal('show');
  })
})
editCourse.php
PHP
1
2
3
<?php
include "../../databases.php";
$result = trim($_POST['id']);
// $courses_result = mysqli_query($induction, "SELECT c.*, GROUP_CONCAT(CONCAT(DATE_FORMAT(s.weekda y, '%a'), ': ', TIME_FORMAT(s.start_time, '%H:%i'), '-', TIME_FORMAT(s.end_time, '%H:%i')) ORDER BY s.weekday SEPARATOR ', ') as schedule
// FROM courses c
// JOIN courses_schedule s ON c.id = s.id
// WHERE c.id = '{$result}'
// GROUP BY c.id");

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$courses_result = "SELECT c.*, s.*
        FROM courses c
        JOIN courses_schedule s ON c.id = s.id
        WHERE c.id = '{$result}'";
 
$courses_result = mysqli_query($induction, $courses_result);
 
 
while ($fullcourse = mysqli_fetch_array($courses_result)) {
 
?>
 
  <tr id="<?php echo $fullcourse['id']; ?>">
    <td data-target="name_course"><?php echo $fullcourse['name']; ?></td>
    <td data-target="unique_code"><?php echo $fullcourse['unique_code']; ?></td>
    <td data-target="level"><?php echo $fullcourse['level']; ?></td>
    <td data-target="start_date"><?php echo date("d.m.Y", strtotime($fullcourse['start_date'])); ?></td>
    <td data-target="end_date"><?php echo date("d.m.Y", strtotime($fullcourse['end_date'])); ?></td>
<!--<td data-target="schedule"><?php /*echo $fullcourse['schedule'];*/ ?></td>-->
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  <td data-target="weekday"><?php echo date("d.m.Y", strtotime($fullcourse['weekday'])); ?></td>
    <td data-target="start_time"><?php echo date("H:i", strtotime($fullcourse['start_time'])); ?></td>
    <td data-target="end_time"><?php echo date("H:i", strtotime($fullcourse['end_time'])); ?></td>
 
    <td data-target="instructors"><?php echo $fullcourse['instructors']; ?></td>
    <td data-target="language"><?php echo $fullcourse['language']; ?></td>
    <td><button type="button" data-role="update" data-id="<?php echo $fullcourse['id']; ?>" class="btn btn-secondary" data-bs-toggle="modal" data-bs-target="#myModal">Edit</button></td>
  </tr>
 
 
<?php
}
 
 ?>
И еще: я хочу выводить данные о днях в формате d.m.Y, но при открытии модального окна информация о дне не выводится! потому что формат для input type date - Y-m-d, может и это сможете заодно подсказать

Буду благодарна за советы и подсказки
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2024, 17:17
Ответы с готовыми решениями:

Если строка начинается и оканчивается одним и тем же знаком, то заменить этот знак четвертым символом строки
Прошу п0мощи с заданием молю Написать программу, которая, если строка начинается и оканчивается одним и тем же знаком, во всей строке...

Сколько квадратов может получиться, если квадраты, совпадающие при повороте, считаются одним и тем же вариантом
Дали задачу, а я что-то не понимаю как решать Имеется клетчатый квадрат 5 на 5, 5 клеток покрасили в синий цвет. Сколько квадратов может...

Код для Outlook, чтобы при запуске макроса отправлялось одинаковое сообщения по одному адресу,с одной темой, и одним и тем же сообщением.
Подскажите, чтобы не придумывать велосипед, нужен код для Outlook, чтобы при запуске макроса отправлялось одинаковое сообщения по одному...


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

Или воспользуйтесь поиском по форуму:
9
1 / 1 / 0
Регистрация: 17.05.2024
Сообщений: 36
06.06.2024, 17:24  [ТС]
Вот визуализация для понимания! Через
// $courses_result = mysqli_query($induction, "SELECT c.*, GROUP_CONCAT(CONCAT(DATE_FORMAT(s.weekda y, '%a'), ': ', TIME_FORMAT(s.start_time, '%H:%i'), '-', TIME_FORMAT(s.end_time, '%H:%i')) ORDER BY s.weekday SEPARATOR ', ') as schedule
// FROM courses c
// JOIN courses_schedule s ON c.id = s.id
// WHERE c.id = '{$result}'
// GROUP BY c.id");
выводится соответственно нормально в таблице, но при редактировании не знаю как разбить и апдейтить это чудо в бд
Как апдейтить данные не связанные с courses_shedule понимаю, поэтому не бейте сильно за тупизм)
Миниатюры
Объединение и разделение информации при выводе из БД (если больше одной строки с одним и тем же id) на страницу   Объединение и разделение информации при выводе из БД (если больше одной строки с одним и тем же id) на страницу   Объединение и разделение информации при выводе из БД (если больше одной строки с одним и тем же id) на страницу  

Объединение и разделение информации при выводе из БД (если больше одной строки с одним и тем же id) на страницу  
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,813
06.06.2024, 18:55
Lo1ms, Первое, что бросается в глаза это что у courses_shedule должны быть свои уникальные идентификаторы id - autoincrement, и добавить поле course_id - внешний ключ на courses.

Добавлено через 7 минут
Lo1ms, По поводу редактирования - у вас сейчас есть страница со списком курсов и страница редактирования курса.
Как один из вариантов, добавить отдельную сводную страницу с просмотром курса, где вывести всю информацию о курсе, включая расписание с кнопками "добавить/редактировать/удалить".
0
1 / 1 / 0
Регистрация: 17.05.2024
Сообщений: 36
06.06.2024, 18:59  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
поле course_id
существует, только называется по другому. id в таблице courses_shedule - это и есть id в таблице courses (теперь понимаю как это по рагульски выглядит немного). То есть мы его как раз и получаем из таблицы courses и привязываем как раз по нему расписание, чтобы у курса с id 1 были расписания с тем же id, наглядно это видно со вторым курсом! А идея и уникальным autoincrement интересна. Я как раз и думала, что если мы будем редактировать время и дату, как объяснить куда именно записывать! Спасибо за совет!
0
1 / 1 / 0
Регистрация: 17.05.2024
Сообщений: 36
06.06.2024, 19:01  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
отдельную сводную страницу с просмотром курса, где вывести всю информацию о курсе, включая расписание с кнопками "добавить/редактировать/удалить".
извиняюсь, неккоректно сделала скрины!
У меня оно всё на одной странице
Миниатюры
Объединение и разделение информации при выводе из БД (если больше одной строки с одним и тем же id) на страницу  
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,813
06.06.2024, 19:08
Цитата Сообщение от Lo1ms Посмотреть сообщение
извиняюсь, неккоректно сделала скрины!
У меня оно всё на одной странице
это ничего не меняет. Я бы добавил отдельную страницу для просмотра курса, так как там может быть много чего. Не люблю делать большие формы. Лучше делать много кнопочек с разными действиями.
0
1 / 1 / 0
Регистрация: 17.05.2024
Сообщений: 36
06.06.2024, 19:08  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
По поводу редактирования
Подозреваю что проблема в моем файле с подключениями к бд (editCourse.php)! Мне кажется если его разбить, по типу, SELECT отдельно для таблицы (просмотр инфы), SELECT отдельно для вывода информации к модальному окну, тогда можно будет нормально отображать? По сути для таблицы есть вывод информации здравый! Оно объединяет всю инфц с одинаковым id в одну строку, но когда доходит дело до модалки, то там невозможно вывести, оно и понятно почему! Потому что там даты должны быть разбиты, а я их все вместе пихаю. Но не будет ли плохо разное подключение, которое является чуть ли не полным дубликатом... Я об этом думала, но кажется, что моя идея так себе
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,813
06.06.2024, 19:13
Lo1ms, Я подобные модалки подгружаю по аяксу. В вашем случае бы вообще не делал модалок, все на отдельных страницах. Потом уже если появится желание, можно будет и на аякс переводить.
0
1 / 1 / 0
Регистрация: 17.05.2024
Сообщений: 36
06.06.2024, 19:20  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
Я подобные модалки подгружаю по аяксу
То есть рекомендуете делать отдельное подключение и подгружать вывод в модалку по аяксу? У меня как раз именно отображение в таблицу идет через аякс (editCourse.js), а в модалке по сути передается та же информация, которую я до этого передавала, видимо, в этом и проблема...
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,813
06.06.2024, 19:42
Lo1ms, По поводу подключения к БД уже описывал с советами по улучшению в предыдущих темах.

Добавлено через 20 минут
Цитата Сообщение от Lo1ms Посмотреть сообщение
То есть рекомендуете делать отдельное подключение и подгружать вывод в модалку по аяксу? У меня как раз именно отображение в таблицу идет через аякс (editCourse.js), а в модалке по сути передается та же информация, которую я до этого передавала, видимо, в этом и проблема...
Для модалки может потребоваться больше данных.. и в этом смысле ее лучше подгружать по ссылке с id сущности.. Но там могут быть свои нюансы.
Я не до конца понимаю вашу задумку, с фронтовой частью у вас тоже все не очень хорошо)
На данный момент я бы вас сейчас советовал пока отказаться от модалок/аякс и т.д. Сделать попроще.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru