08.10
This commit is contained in:
189
Tematy/T60a - praca z bazą danych/index.php
Normal file
189
Tematy/T60a - praca z bazą danych/index.php
Normal file
@@ -0,0 +1,189 @@
|
||||
<?php
|
||||
$txtPath = 'pracownicy.txt';
|
||||
|
||||
function h(string $v) {
|
||||
return htmlspecialchars($v, ENT_QUOTES, 'UTF-8');
|
||||
}
|
||||
|
||||
$messages = [];
|
||||
$rows = [];
|
||||
$shouldShowData = false;
|
||||
|
||||
$db = mysqli_connect('localhost', 'root', '', '3p_1_baza_pracownikow');
|
||||
if ($db) {
|
||||
mysqli_set_charset($db, 'utf8mb4');
|
||||
} else {
|
||||
$messages[] = 'Błąd połączenia z bazą: ' . h(mysqli_connect_error());
|
||||
}
|
||||
|
||||
$action = $_POST['action'] ?? null;
|
||||
|
||||
$sqlCreate = "
|
||||
CREATE TABLE IF NOT EXISTS pracownicy (
|
||||
numer_id INT NOT NULL PRIMARY KEY,
|
||||
nazwisko VARCHAR(100) NOT NULL,
|
||||
imie VARCHAR(100) NOT NULL,
|
||||
stanowisko VARCHAR(120) NOT NULL,
|
||||
dzial VARCHAR(120) NOT NULL,
|
||||
sekcja VARCHAR(120) NOT NULL
|
||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
|
||||
";
|
||||
|
||||
if ($db) {
|
||||
if ($action === 'create_table') {
|
||||
if (mysqli_query($db, $sqlCreate)) {
|
||||
$messages[] = 'Tabela „pracownicy” utworzona (jeśli nie istniała).';
|
||||
} else {
|
||||
$messages[] = 'Błąd tworzenia tabeli: ' . h(mysqli_error($db));
|
||||
}
|
||||
} elseif ($action === 'load_data') {
|
||||
$exists = false;
|
||||
$check = mysqli_query($db, "SELECT 1 FROM pracownicy LIMIT 1");
|
||||
if ($check) {
|
||||
$exists = true;
|
||||
mysqli_free_result($check);
|
||||
}
|
||||
|
||||
if (!$exists) {
|
||||
$messages[] = 'Tabela „pracownicy” nie istnieje. Najpierw utwórz ją przyciskiem „Utwórz tabelę”.';
|
||||
} else {
|
||||
if (!is_file($txtPath)) {
|
||||
$messages[] = 'Brak pliku pracownicy.txt w katalogu projektu.';
|
||||
} else {
|
||||
if (!mysqli_query($db, "TRUNCATE TABLE pracownicy")) {
|
||||
$messages[] = 'Nie udało się wyczyścić tabeli: ' . h(mysqli_error($db));
|
||||
} else {
|
||||
$stmt = mysqli_prepare(
|
||||
$db,
|
||||
"INSERT INTO pracownicy (numer_id, nazwisko, imie, stanowisko, dzial, sekcja) VALUES (?, ?, ?, ?, ?, ?)"
|
||||
);
|
||||
if (!$stmt) {
|
||||
$messages[] = 'Nie udało się przygotować zapytania: ' . h(mysqli_error($db));
|
||||
} else {
|
||||
$countOk = 0;
|
||||
$countErr = 0;
|
||||
|
||||
$fh = fopen($txtPath, 'rb');
|
||||
if ($fh === false) {
|
||||
$messages[] = 'Nie można otworzyć pliku pracownicy.txt.';
|
||||
} else {
|
||||
$first = fgetcsv($fh, 0, ';');
|
||||
|
||||
while (($row = fgetcsv($fh, 0, ';')) !== false) {
|
||||
if (!is_array($row) || count($row) < 6) {
|
||||
$countErr++;
|
||||
continue;
|
||||
}
|
||||
$id = (int)trim((string)$row[0]);
|
||||
$nazwisko = trim((string)$row[1]);
|
||||
$imie = trim((string)$row[2]);
|
||||
$stanowisko = trim((string)$row[3]);
|
||||
$dzial = trim((string)$row[4]);
|
||||
$sekcja = trim((string)$row[5]);
|
||||
|
||||
mysqli_stmt_bind_param($stmt, 'isssss', $id, $nazwisko, $imie, $stanowisko, $dzial, $sekcja);
|
||||
if (!mysqli_stmt_execute($stmt)) {
|
||||
$countErr++;
|
||||
} else {
|
||||
$countOk++;
|
||||
}
|
||||
}
|
||||
fclose($fh);
|
||||
}
|
||||
mysqli_stmt_close($stmt);
|
||||
$messages[] = "Załadowano rekordów: {$countOk}. Błędnych wierszy: {$countErr}.";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} elseif ($action === 'show_data') {
|
||||
$shouldShowData = true;
|
||||
$res = @mysqli_query($db, "SELECT numer_id, nazwisko, imie, stanowisko, dzial, sekcja FROM pracownicy ORDER BY numer_id");
|
||||
if ($res) {
|
||||
$rows = mysqli_fetch_all($res, MYSQLI_ASSOC) ?: [];
|
||||
mysqli_free_result($res);
|
||||
} else {
|
||||
$messages[] = 'Nie udało się pobrać danych: ' . h(mysqli_error($db));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$messagesHtml = '';
|
||||
if ($messages) {
|
||||
$items = '';
|
||||
foreach ($messages as $m) {
|
||||
$items .= '<li>' . h($m) . '</li>';
|
||||
}
|
||||
$messagesHtml = '<strong>Komunikaty:</strong><ul style="margin:8px 0 0 18px;">' . $items . '</ul>';
|
||||
}
|
||||
|
||||
$dataHtml = '';
|
||||
if ($shouldShowData) {
|
||||
if (!$rows) {
|
||||
$dataHtml = '<div class="empty">Brak danych do wyświetlenia.</div>';
|
||||
} else {
|
||||
$trs = '';
|
||||
foreach ($rows as $r) {
|
||||
$trs .= '<tr>'
|
||||
. '<td>' . (int)$r['numer_id'] . '</td>'
|
||||
. '<td>' . h($r['nazwisko']) . '</td>'
|
||||
. '<td>' . h($r['imie']) . '</td>'
|
||||
. '<td>' . h($r['stanowisko']) . '</td>'
|
||||
. '<td>' . h($r['dzial']) . '</td>'
|
||||
. '<td>' . h($r['sekcja']) . '</td>'
|
||||
. '</tr>';
|
||||
}
|
||||
|
||||
$dataHtml = '<table>'
|
||||
. '<thead><tr>'
|
||||
. '<th>ID</th><th>Nazwisko</th><th>Imię</th><th>Stanowisko</th><th>Dział</th><th>Sekcja</th>'
|
||||
. '</tr></thead>'
|
||||
. '<tbody>' . $trs . '</tbody>'
|
||||
. '</table>';
|
||||
}
|
||||
}
|
||||
|
||||
echo <<<HTML
|
||||
<!doctype html>
|
||||
<html lang="pl">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>T60a - praca z bazą danych</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="style.css" >
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>Zadanie T60a</h1>
|
||||
<h2>Autor: Jakub Grzegorczyk</h2>
|
||||
</header>
|
||||
<div class="box">
|
||||
<p>
|
||||
Tym razem zadanie jest bardziej złożone. Oto co należy zrobić:
|
||||
<ul>
|
||||
<li>Utwórz bazę danych o nazwie 3p_1_baza_pracownikow.</li>
|
||||
<li>Do zadania dołączony został plik zawierający dane 114 pracowników - dokonaj konwersji tych danych do formaty txt (uzyskaj plik z danymi pracownicy.txt.</li>
|
||||
<li>Na utworzonej stronie projektu znajduje się przycisk "Utwórz tabelę", który w bazie 3p_1_baza_pracownikow tworzy tabelę pracownicy.</li>
|
||||
<li>Drugi przycisk "Załaduj dane" dodaje dane z pliku tekstowego pracownicy.txt do tabeli pracownicy.</li>
|
||||
<li>Trzeci przycisk wyświetla dane z tabeli pracownicy w postaci tabelarycznej.</li>
|
||||
</ul>
|
||||
</p>
|
||||
</div>
|
||||
<div class="box">
|
||||
<form method="post">
|
||||
<div class="actions">
|
||||
<button type="submit" name="action" value="create_table">Utwórz tabelę</button><br>
|
||||
<button type="submit" name="action" value="load_data">Załaduj dane z pracownicy.txt</button><br>
|
||||
<button type="submit" name="action" value="show_data">Pokaż dane</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="box">
|
||||
{$messagesHtml}
|
||||
{$dataHtml}
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
HTML;
|
||||
115
Tematy/T60a - praca z bazą danych/pracownicy.txt
Normal file
115
Tematy/T60a - praca z bazą danych/pracownicy.txt
Normal file
@@ -0,0 +1,115 @@
|
||||
Numer id.;Nazwisko;Imię;Stanowisko;Dział;Sekcja
|
||||
1975;Frankowski;Leon;Asyst. Księg.;Księgowość;kopiarki
|
||||
1976;Pietrzak;Robert;St. Asyst. Admin.;Inż.-Tech.;drukarki
|
||||
1977;Adamiak;Tomasz;St. Asyst. Admin.;Inż.-Tech.;faksy
|
||||
1978;Dorg;Jarek;Inżynier informatyk;Inż.-Tech.;kopiarki
|
||||
1979;Berwicki;Sam;Sprzedawca;Marketing;kopiarki
|
||||
1980;Miller;Urszula;Księgowy;Księgowość;kopiarki
|
||||
1981;Ruda;Felicja;Asyst. Admin.;Admin.;kopiarki
|
||||
1982;Welicki;Jarek;Asyst. Admin.;Admin.;kopiarki
|
||||
1983;Kania;Sławek;Asyst. Projekt.;Reklama;drukarki
|
||||
1984;Czowski;Robert;Asyst. Projekt.;Reklama;faksy
|
||||
1985;Lin;Michał;Inżynier informatyk;Inż.-Tech.;faksy
|
||||
1986;Alkowski;Dariusz;Asyst. Tech.;Inż.-Tech.;faksy
|
||||
1987;Martin;Sara;Sprzedawca;Marketing;kopiarki
|
||||
1988;Miller;Janina;Sprzedawca;Marketing;kopiarki
|
||||
1989;Leski;Eryk;Analityk;Magazyn;faksy
|
||||
1990;Abramowicz;Bolek;Asyst. Admin.;Admin.;faksy
|
||||
1991;Baton;Ilona;Projektant;Reklama;kopiarki
|
||||
1992;Goldberg;Maria;Sprzedawca;Marketing;faksy
|
||||
1993;Lanik;Piotr;Sprzedawca;Marketing;faksy
|
||||
1994;Stawicki;Karol;Asyst. Admin.;Admin.;drukarki
|
||||
1995;Smok;Honoriusz;Asyst. Projekt.;Reklama;kopiarki
|
||||
1996;Maczek;Maria;Projektant;Reklama;kopiarki
|
||||
1997;Keln;Tomasz;Asyst. Admin.;Inż.-Tech.;drukarki
|
||||
1998;Silwer;Jan;Inżynier proj.;Inż.-Tech.;faksy
|
||||
1999;Albert;Max;St. Asyst. Admin.;Marketing;kopiarki
|
||||
2000;Lemska;Aleksandra;Analityk;Magazyn;kopiarki
|
||||
2001;Coniak;Lida;Asyst. Admin.;Admin.;faksy
|
||||
2002;Reski;Filip;Księgowy;Księgowość;drukarki
|
||||
2003;Henczak;Marek;Asyst. Księg.;Księgowość;drukarki
|
||||
2004;Foniecki;Jan;St. Asyst. Admin.;Księgowość;kopiarki
|
||||
2005;Planczak;Alan;St. Asyst. Admin.;Księgowość;drukarki
|
||||
2006;Miller;Krzysztof;Asyst. Admin.;Admin.;faksy
|
||||
2007;Batecka;Liza;Asyst. Admin.;Admin.;kopiarki
|
||||
2008;Alska;Izolda;Technik;Inż.-Tech.;faksy
|
||||
2009;Dawid;Karen;Technik;Inż.-Tech.;drukarki
|
||||
2010;Szczygieł;Tadeusz;Technik;Inż.-Tech.;kopiarki
|
||||
2011;Sikora;Sandra;Asyst. Tech.;Inż.-Tech.;kopiarki
|
||||
2012;Siwicki;Radek;Asyst. Admin.;Marketing;faksy
|
||||
2013;Chojnacki;Stefan;St. Asyst. Admin.;Marketing;drukarki
|
||||
2014;Sawicka;Ewelina;Sprzedawca;Marketing;kopiarki
|
||||
2015;Terewicz;Robert;St. Asyst. Admin.;Magazyn;drukarki
|
||||
2016;Kanek;Mirek;St. Asyst. Admin.;Magazyn;faksy
|
||||
2017;Sanicka;Anna;Księgowy;Księgowość;kopiarki
|
||||
2018;Borowski;Franek;Asyst. Księg.;Księgowość;faksy
|
||||
2019;Gordon;Halina;Asyst. Księg.;Księgowość;kopiarki
|
||||
2020;Melen;Justyna;St. Asyst. Admin.;Księgowość;faksy
|
||||
2021;Prenak;Liza;Inżynier mechanik;Inż.-Tech.;drukarki
|
||||
2022;Czowska;Maria;Inżynier informatyk;Inż.-Tech.;drukarki
|
||||
2023;Szczygieł;Halina;Technik;Inż.-Tech.;faksy
|
||||
2024;Nowak;Tomasz;Technik;Inż.-Tech.;drukarki
|
||||
2025;Kowalska;Natalia;Sprzedawca;Marketing;drukarki
|
||||
2026;Wejno;Róża;Księgowy;Księgowość;drukarki
|
||||
2027;Bielecki;Tom;Asyst. Księg.;Księgowość;drukarki
|
||||
2028;Borek;Karen;Menedżer;Inż.-Tech.;drukarki
|
||||
2029;Wnuk;Denis;Inżynier informatyk;Inż.-Tech.;kopiarki
|
||||
2030;Siwicki;Leszek;Inżynier informatyk;Inż.-Tech.;drukarki
|
||||
2031;Komar;Teodor;Asyst. Admin.;Marketing;kopiarki
|
||||
2032;Prosty;Helena;Asyst. Admin.;Admin.;drukarki
|
||||
2033;Branek;Amelia;Projektant;Reklama;drukarki
|
||||
2034;Dmoch;Sylwia;Asyst. Admin.;Inż.-Tech.;kopiarki
|
||||
2035;Kenig;Pamela;Asyst. Admin.;Inż.-Tech.;faksy
|
||||
2036;Alecka;Stefania;Inżynier proj.;Inż.-Tech.;drukarki
|
||||
2037;Wolf;Iza;Inżynier mechanik;Inż.-Tech.;kopiarki
|
||||
2038;Halski;Karol;Asyst. Admin.;Marketing;drukarki
|
||||
2039;Taczek;Radek;Menedżer;Marketing;drukarki
|
||||
2040;Bielecki;Franek;Sprzedawca;Marketing;faksy
|
||||
2041;Jaworski;Darek;St. Asyst. Admin.;Magazyn;kopiarki
|
||||
2042;Skała;Grażyna;Projektant;Reklama;faksy
|
||||
2043;Mann;Alicja;Inżynier mechanik;Inż.-Tech.;drukarki
|
||||
2044;Szczygieł;Witold;Asyst. Tech.;Inż.-Tech.;drukarki
|
||||
2045;Fryzjer;Liza;Sprzedawca;Marketing;faksy
|
||||
2046;Rowal;Bożena;Księgowy;Księgowość;faksy
|
||||
2047;Nelson;Edward;Projektant;Reklama;faksy
|
||||
2048;Rawin;Alicja;St. Asyst. Admin.;Inż.-Tech.;kopiarki
|
||||
2049;Welski;Sam;St. Inżynier;Inż.-Tech.;faksy
|
||||
2050;Glad;Weronika;Inżynier informatyk;Inż.-Tech.;faksy
|
||||
2051;Tupak;Anna;Technik;Inż.-Tech.;drukarki
|
||||
2052;Bankier;Renata;Asyst. Admin.;Marketing;drukarki
|
||||
2053;Homer;Mirek;St. Asyst. Admin.;Marketing;drukarki
|
||||
2054;Morton;Sara;Sprzedawca;Marketing;drukarki
|
||||
2055;Kamińska;Czesława;Technik;Magazyn;drukarki
|
||||
2056;Wujek;Tania;Asyst. Admin.;Admin.;faksy
|
||||
2057;Ferczyk;Karolina;Menedżer;Inż.-Tech.;kopiarki
|
||||
2058;Bartczak;Sandra;Menedżer;Magazyn;faksy
|
||||
2059;Towińska;Ewa;Analityk;Magazyn;drukarki
|
||||
2060;Zostocka;Melisa;Dyrektor;Admin.;faksy
|
||||
2061;Fermer;Julek;St. Inżynier;Inż.-Tech.;drukarki
|
||||
2062;Jaworska;Liza;Asyst. Tech.;Inż.-Tech.;drukarki
|
||||
2063;Harczak;Bartek;Asyst. Menedż.;Magazyn;drukarki
|
||||
2064;Piotrowski;Dawid;Asyst. Menedż.;Magazyn;kopiarki
|
||||
2065;Kolicki;Bolek;Asyst. Admin.;Admin.;drukarki
|
||||
2066;Seweryn;Mateusz;Sprzedawca;Marketing;drukarki
|
||||
2067;Hocka;Aleksandra;Menedżer;Admin.;drukarki
|
||||
2068;Bergen;Bożena;Asyst. Menedż.;Inż.-Tech.;faksy
|
||||
2069;Sofiński;Ariel;St. Inżynier;Inż.-Tech.;drukarki
|
||||
2070;Salomon;Aram;Inżynier informatyk;Inż.-Tech.;kopiarki
|
||||
2071;Larkin;Donald;Inżynier informatyk;Inż.-Tech.;drukarki
|
||||
2072;Półkowicz;Robert;Inżynier mechanik;Inż.-Tech.;faksy
|
||||
2073;Kraczyk;Piotr;Technik;Inż.-Tech.;drukarki
|
||||
2074;Farmer;Sam;Menedżer;Marketing;kopiarki
|
||||
2075;Samion;Marek;Sprzedawca;Marketing;drukarki
|
||||
2076;Fosz;Feliks;Analityk;Magazyn;drukarki
|
||||
2077;Larek;Eryka;Szef biura;Admin.;drukarki
|
||||
2078;Seweryn;Ryszard;St. Menedżer;Marketing;faksy
|
||||
2079;Samiak;Karol;Sprzedawca;Marketing;kopiarki
|
||||
2080;Kortowski;Czarek;Sprzedawca;Marketing;kopiarki
|
||||
2081;Wesoły;Marek;Sprzedawca;Marketing;drukarki
|
||||
2082;Malik;Helena;Księgowy;Księgowość;faksy
|
||||
2083;Janowski;Michał;St. Inżynier;Inż.-Tech.;faksy
|
||||
2084;Berek;Zuzanna;St. Inżynier;Inż.-Tech.;kopiarki
|
||||
2085;Wolska;Helena;Sprzedawca;Marketing;drukarki
|
||||
2086;Makarek;Krystyna;Główny Inżynier;Inż.-Tech.;kopiarki
|
||||
2087;Adamska;Kasia;Inżynier mechanik;Inż.-Tech.;kopiarki
|
||||
2088;Gonczyk;Jan;St. Menedżer;Admin.;kopiarki
|
||||
68
Tematy/T60a - praca z bazą danych/style.css
Normal file
68
Tematy/T60a - praca z bazą danych/style.css
Normal file
@@ -0,0 +1,68 @@
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
font-family: Verdana, serif;
|
||||
background: #ffffff;
|
||||
margin: 15px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
header {
|
||||
border: 2px solid black;
|
||||
border-radius: 1em;
|
||||
padding: 10px 20px;
|
||||
box-shadow: rgba(0, 0, 0, 0.2) 3px 3px 5px;
|
||||
background: #f0f0f0;
|
||||
}
|
||||
|
||||
input {
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
width: 30%;
|
||||
border: black 2px solid;
|
||||
border-radius: 0.5em;
|
||||
height: 2em;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 5px;
|
||||
width: 30%;
|
||||
border: black 2px solid;
|
||||
border-radius: 0.5em;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
pre {
|
||||
font-family: Verdana, serif;
|
||||
}
|
||||
|
||||
.box {
|
||||
border: 2px solid black;
|
||||
padding: 15px 20px;
|
||||
border-radius: 1em;
|
||||
margin: 15px 0 10px 0;
|
||||
box-shadow: rgba(0, 0, 0, 0.2) 3px 3px 5px;
|
||||
}
|
||||
|
||||
.box h3 {
|
||||
cursor: pointer;
|
||||
}
|
||||
td {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
tr {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.y {
|
||||
background: yellow;
|
||||
}
|
||||
|
||||
.b {
|
||||
background:blue;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user