Compare commits

...

4 Commits
s1-doc ... dev

Author SHA1 Message Date
baiobelfer
e30d313d98 add spread data from db to table in main view 2025-09-10 11:35:22 +00:00
baiobelfer
53d00bc5ae get php+k1 2025-09-10 11:07:19 +00:00
baiobelfer
5dc04fcd69 s3 db ok 2025-09-10 11:06:16 +00:00
baiobelfer
2b40308f27 add sql 2025-09-10 10:42:53 +00:00
7 changed files with 185 additions and 35 deletions

View File

@ -4,6 +4,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Kursy komputerowe</title> <title>Kursy komputerowe</title>
<link rel="stylesheet" href="css/layout.css"> <link rel="stylesheet" href="css/layout.css">
<script src="js/script.js" defer> </script>
</head> </head>
<body> <body>
<header> <header>
@ -17,7 +19,7 @@
</nav> </nav>
<main> <main>
<h3>Kursy komputerowe - programowanie</h3> <h3>Kursy komputerowe - programowanie</h3>
<table> <table id="tab">
<tr> <tr>
<th>Kurs</th> <th>Kurs</th>
<th>Czas trwania</th> <th>Czas trwania</th>

View File

@ -1,37 +1,44 @@
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
document.getElementById('oblicz').addEventListener('click', function() { console.log("ok");
// Pobieranie wybranych kursów
const wybraneKursy = document.querySelectorAll('input[name="kurs"]:checked'); const fetchData = () => {
// Ceny kursów return fetch('./php/get.php')
const cenaReact = 1500; .then(response => {
const cenaJavaScript = 1200; if (!response.ok) {
throw new Error('Błąd pobierania danych');
// Obliczanie całkowitej kwoty }
let calkowitaKwota = 0; return response.json();
wybraneKursy.forEach(kurs => { })
if (kurs.value === 'React.js') { .then(data => {
calkowitaKwota += cenaReact; console.log("Dane załadowane:", data);
} else if (kurs.value === 'JavaScript') { renderTable(data); // Wywołaj funkcję renderującą tabelę
calkowitaKwota += cenaJavaScript; })
} .catch(error => {
}); console.error("Błąd:", error);
});
// Pobieranie liczby rat };
const iloscRat = parseInt(document.getElementById('raty').value);
// Pobieranie miasta // Funkcja do renderowania danych w tabeli
const miasto = document.getElementById('miasto').value; const renderTable = (data) => {
const table = document.getElementById('tab');
// Sprawdzanie poprawności danych
if (wybraneKursy.length === 0 || isNaN(iloscRat) || iloscRat <= 0) { // Usuń wszystkie rzędy po nagłówku (czyli od drugiego)
document.getElementById('wynik').textContent = 'Proszę wybrać przynajmniej jeden kurs i podać poprawną liczbę rat.'; while (table.rows.length > 1) {
return; table.deleteRow(1);
} }
// Obliczanie miesięcznej raty // Dodaj nowe wiersze dla każdego kursu
const rata = calkowitaKwota / iloscRat; data.forEach(row => {
const tr = document.createElement('tr');
// Wyświetlanie wyniku tr.innerHTML = `
document.getElementById('wynik').textContent = <td>${row.kurs}</td>
`Kurs odbędzie się w ${miasto}. Koszt całkowity: ${calkowitaKwota} zł. Płacisz ${iloscRat} rat po ${rata.toFixed(2)}`; <td>${row.czas_trwania}</td>
}); <td>${row.cena}</td>
`;
table.appendChild(tr);
});
};
// Uruchom pobieranie danych
fetchData();
}); });

16
php/get.php Normal file
View File

@ -0,0 +1,16 @@
<?php
$polaczenie = mysqli_connect("172.18.0.2", "root", "secret", "szkolenia");
$kwerenda = mysqli_query($polaczenie, "SELECT REPLACE(k.nazwa, 'Kurs ', '') AS kurs, k.czas_trwania AS czas_trwania, CONCAT(k.cena, ' zł') AS cena FROM kursy k ORDER BY k.id");
$json = array();
while ($row = mysqli_fetch_assoc($kwerenda)) {
$json[] = $row;
}
mysqli_close($polaczenie);
echo json_encode($json );
?>

1
sql/k1.sql Normal file
View File

@ -0,0 +1 @@
SELECT REPLACE(k.nazwa, 'Kurs ', '') AS kurs, k.czas_trwania AS czas_trwania, CONCAT(k.cena, '') AS cena FROM kursy k ORDER BY k.id

51
sql/s1.sql Normal file
View File

@ -0,0 +1,51 @@
-- Utwórz bazę danych dla firmy szkoleniowej
CREATE DATABASE IF NOT EXISTS szkolenia CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-- Wybierz bazę danych do pracy
USE szkolenia;
-- Tabela: kategorie_kursow
-- Przechowuje informacje o poziomach kursów (np. podstawowy, średni, zaawansowany)
CREATE TABLE IF NOT EXISTS kategorie_kursow (
id INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(50) NOT NULL UNIQUE,
opis TEXT
);
-- Wstaw dane do tabeli kategorii
INSERT INTO kategorie_kursow (nazwa, opis) VALUES
('podstawowy', 'Kurs przeznaczony dla początkujących'),
('średni', 'Kurs dla osób mających podstawową wiedzę'),
('zaawansowany', 'Kurs dla osób posiadających zaawansowaną wiedzę');
-- Tabela: kursy
-- Przechowuje informacje o konkretnych kursach
CREATE TABLE IF NOT EXISTS kursy (
id INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(255) NOT NULL,
cena DECIMAL(10, 2) NOT NULL,
id_kategorii INT,
FOREIGN KEY (id_kategorii) REFERENCES kategorie_kursow(id),
UNIQUE KEY unique_nazwa (nazwa)
);
-- Wstaw dane do tabeli kursy (zgodnie z ilustracją 4)
INSERT INTO kursy (nazwa, cena, id_kategorii) VALUES
('Kurs HTML i CSS', 500.00, 1), -- podstawowy
('Kurs JavaScript', 700.00, 2), -- średni
('Kurs React.js', 900.00, 3); -- zaawansowany
-- Tabela: miasta
-- Przechowuje listę miast, w których odbywają się kursy
CREATE TABLE IF NOT EXISTS miasta (
id INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(100) NOT NULL UNIQUE
);
-- Wstaw dane do tabeli miasta
INSERT INTO miasta (nazwa) VALUES
('Warszawa'),
('Katowice'),
('Gdańsk');

10
sql/s2.sql Normal file
View File

@ -0,0 +1,10 @@
-- Zapytanie 3: Tworzenie użytkownika 'Marek'
CREATE USER IF NOT EXISTS 'Marek'@'localhost' IDENTIFIED BY 'M@reK';
-- Zapytanie 4: Nadanie uprawnień
-- Użytkownik Marek ma prawo do przeglądania i aktualizowania danych tylko w tabeli `kursy`
GRANT SELECT, UPDATE ON szkolenia.kursy TO 'Marek'@'localhost';
-- Odświeżenie uprawnień
FLUSH PRIVILEGES;

63
sql/s3.sql Normal file
View File

@ -0,0 +1,63 @@
-- Utwórz bazę danych dla firmy szkoleniowej
CREATE DATABASE IF NOT EXISTS szkolenia CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-- Wybierz bazę danych do pracy
USE szkolenia;
-- Tabela: kategorie_kursow
CREATE TABLE IF NOT EXISTS kategorie_kursow (
id INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(50) NOT NULL UNIQUE,
opis TEXT
);
-- Wstaw dane do tabeli kategorii
INSERT INTO kategorie_kursow (nazwa, opis) VALUES
('podstawowy', 'Kurs przeznaczony dla początkujących'),
('średni', 'Kurs dla osób mających podstawową wiedzę'),
('zaawansowany', 'Kurs dla osób posiadających zaawansowaną wiedzę');
-- Tabela: kursy (z dodanym czasem trwania)
CREATE TABLE IF NOT EXISTS kursy (
id INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(255) NOT NULL,
cena DECIMAL(10, 2) NOT NULL,
czas_trwania VARCHAR(50) NOT NULL DEFAULT '2 miesiące',
id_kategorii INT,
FOREIGN KEY (id_kategorii) REFERENCES kategorie_kursow(id),
UNIQUE KEY unique_nazwa (nazwa)
);
-- Wstaw dane do tabeli kursy z czasem trwania
INSERT INTO kursy (nazwa, cena, czas_trwania, id_kategorii) VALUES
('Kurs HTML i CSS', 500.00, '2 miesiące', 1),
('Kurs JavaScript', 700.00, '3 miesiące', 2),
('Kurs React.js', 900.00, '4 miesiące', 3);
-- Tabela: miasta
CREATE TABLE IF NOT EXISTS miasta (
id INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(100) NOT NULL UNIQUE
);
-- Wstaw dane do tabeli miasta
INSERT INTO miasta (nazwa) VALUES
('Warszawa'),
('Katowice'),
('Gdańsk');
-- Tabela: kursy_miasta (relacja wiele-do-wielu: kurs może być w wielu miastach)
CREATE TABLE IF NOT EXISTS kursy_miasta (
id_kursu INT NOT NULL,
id_miasta INT NOT NULL,
PRIMARY KEY (id_kursu, id_miasta),
FOREIGN KEY (id_kursu) REFERENCES kursy(id) ON DELETE CASCADE,
FOREIGN KEY (id_miasta) REFERENCES miasta(id) ON DELETE CASCADE
);
-- Przykładowe przypisanie kursów do miast (każdy kurs w każdym mieście)
INSERT INTO kursy_miasta (id_kursu, id_miasta)
SELECT k.id, m.id
FROM kursy k
CROSS JOIN miasta m;