INF.03.drill.5 – HTML + JS

Poniżej pokazuję najbardziej typowe fragmenty skryptów JS z zadań wraz z odpowiadającymi im kodami HTML i ich wyglądem. Kody napisane są tak, by były jak najbardziej powtarzalne i łatwe do zapamiętania. Zestawienie ma pomóc w porównaniu i usystematyzowaniu. Zapamiętanie powinno odbyć się przez rozwiązanie wystarczającej liczby zadań 🙂

Pobieranie danych

<input type="text" 
  id="username" 
  placeholder="Wpisz nazwę użytkownika">
  
  
let dane = 
document.getElementById("username").value;
console.log(dane);
<input type="number" 
  id="wiek" min="0" max="120" 
  placeholder="Wpisz wiek">
  
  
let age = 
parseInt(document.getElementById("wiek").value);
console.log(age);
Mężczyzna Kobieta
<input type="radio" name="gender" 
  id="male" value="male"> Mężczyzna
<input type="radio" name="gender" 
  id="female" value="female"> Kobieta
  
  
  
let on = 
  document.getElementById("male").checked;
let ona = 
  document.getElementById("female").checked;

console.log("Mężczyzna zaznaczony:", on);
console.log("Kobieta zaznaczona:", ona);
Sport Muzyka Podróże
<input type="checkbox" name="hobby" 
  id="sport" value="sport"> Sport
<input type="checkbox" name="hobby" 
  id="muzyka" value="muzyka"> Muzyka
<input type="checkbox" name="hobby" 
  id="podroze" value="podróże"> Podróże
let s = 
  document.getElementById("sport").checked;
let m = 
  document.getElementById("muzyka").checked;
let p = 
  document.getElementById("podroze").checked;

console.log("Sport zaznaczony:", s);
console.log("Muzyka zaznaczona:", m);
console.log("Podróże zaznaczone:", p);
<select id="kraj">
  <option value="pl">Polska</option>
  <option value="de">Niemcy</option>
  <option value="us">USA</option>
</select>

let k = 
document.getElementById("kraj").value;
console.log(k);
<input type="date" id="urodziny">

let data = 
document.getElementById("urodziny").value;
console.log(data);
<input type="time" id="czas">

let meetingTime = 
document.getElementById("czas").value;
console.log(meetingTime);
<input type="range" id="suwak" 
  min="0" max="100" value="70">
  
  
let s = 
document.getElementById("suwak").value;
console.log(s);

Wyświetlanie wyników

<button onclick="wykonaj()">Uruchom</button>
<p id="wynik"></p>



function wykonaj() {
  let a = 10;
  document.getElementById("wynik").innerHTML 
  = "Wynik: " + a;
  }

dane z pola powyżej pojawią się zamiast tego tekstu po „odkliknięciu”

<input type="text" id="poleFormularza" 
  onchange="wykonaj()">

<p id="wynik">dane z pola powyżej pojawią się
 zamiast tego tekstu po "odkliknięciu"</p>
function wykonaj() {
  let trescFormularza =
  document.getElementById("poleFormularza").value;
      document.getElementById("wynik").innerHTML =
      "Wynik: " + trescFormularza;
    }

INF.03.drill.4 – JS

Rozważmy zadanie INF.03-02-25.01-SG a konkretniej skrypt JS z tego zadania.
Rozważmy też zadanie INF.03-01-25.01-SG a konkretniej skrypt JS z tego zadania (nieco trudniejszy).

Oba te skrypty wykonują proste obliczenia, a główna trudność polega na pobieraniu danych z formularza. Warto zrobić same formularze html i skrypty.

Do drugiego z wymienionych zadań może przydać się kodzik html:

<form action="/submit" method="post">
  <label for="device">Wybierz typ urządzenia:</label>
  <select id="device" name="device">
    <option value="pc">Komputer stacjonarny</option>
    <option value="laptop">Laptop</option>
    <option value="monitor">Monitor</option>
    <option value="drukarka">Drukarka</option>
  </select>

  <input type="submit" value="Wyślij">
</form>

Ten formularz jest kompletny dla skryptów w php, ale do js niektóre fragmenty można pominąć.

Rozważmy może też zadanie INF.03-02-24.01-SG

Maleńka baza na start

Zrozum, zaimportuj przez phpMyAdmin i poeksperymentuj (zadania są na końcu):

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";

--
-- Baza danych: `salon`
--

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `kadra`
--

CREATE TABLE `kadra` (
  `id` int(10) UNSIGNED NOT NULL,
  `imie` text DEFAULT NULL,
  `nazwisko` text DEFAULT NULL,
  `stanowisko` text DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Zrzut danych tabeli `kadra`
--

INSERT INTO `kadra` (`id`, `imie`, `nazwisko`, `stanowisko`) VALUES
(1, 'Anna', 'Kowalska', 'dietetyk'),
(2, 'Jolanta', 'Szczesny', 'kosmetolog'),
(3, 'Aleksandra', 'Wilk', 'stylista'),
(4, 'Katarzyna', 'Nowak', 'fryzjer'),
(5, 'Piotr', 'Bartczak', 'fizjoterapeuta');

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `uslugi`
--

CREATE TABLE `uslugi` (
  `id` int(10) UNSIGNED NOT NULL,
  `kadra_id` int(10) UNSIGNED NOT NULL,
  `rodzaj` int(10) UNSIGNED DEFAULT NULL,
  `nazwa` text DEFAULT NULL,
  `cena` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Zrzut danych tabeli `uslugi`
--

INSERT INTO `uslugi` (`id`, `kadra_id`, `rodzaj`, `nazwa`, `cena`) VALUES
(1, 2, 1, 'Peeling enzymatyczny', 45),
(2, 5, 3, 'Masaz twarzy', 20),
(3, 2, 1, 'Maska', 30),
(4, 2, 1, 'Regulacja brwi', 5),
(5, 4, 2, 'Farbowanie', 50),
(6, 4, 2, 'Strzyzenie', 40),
(7, 1, 3, 'Ustalenie diety', 70),
(8, 2, 1, 'Henna', 10),
(9, 2, 1, 'Paznokcie', 90),
(10, 4, 2, 'Czesanie', 30);

-- --------------------------------------------------------

--
-- Indeksy dla tabeli `kadra`
--
ALTER TABLE `kadra`
  ADD PRIMARY KEY (`id`);

--
-- Indeksy dla tabeli `uslugi`
--
ALTER TABLE `uslugi`
  ADD PRIMARY KEY (`id`),
  ADD KEY `uslugi_FKIndex1` (`kadra_id`);

--
-- AUTO_INCREMENT dla tabeli `kadra`
--
ALTER TABLE `kadra`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;

--
-- AUTO_INCREMENT dla tabeli `uslugi`
--
ALTER TABLE `uslugi`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;
COMMIT;

Zadani 1

Co to robi?

SELECT k.imie, k.nazwisko, u.nazwa FROM uslugi u JOIN kadra k ON u.kadra_id = k.id ORDER BY u.cena; 

Zadanie 2

Dodaj za pomocą SQL tabelę z rodzajami usług:
1 – usługi kosmetyczne,
2 – usługi fryzjerskie,
3 – inne.

Zadanie 3

Utwórz zapytanie wybierające osoby wykonujące jedynie usługi kosmetyczne

Zadanie 4

Utwórz zapytanie liczące średnią arytmetyczną cen usług oraz liczbę usług jedynie dla usług kosmetycznych

INF.03.drill.3 – JS: input type radio vs checkbox

W formularzach HTML można dodać dwa podobne, ale działające inaczej pola:

  • input type=”checkbox” (kwadraciki – mogę zaznaczyć wiele)
  • input type=”radio” (kółeczka – mogę zaznaczyć jedno)

Dodaje się je podobnie, ale…

<input type="radio" name="promocja" id="kr">
<label for="kr">Krótkie</label>

<input type="radio" name="promocja" id="sr">
<label for="sr">Średnie</label>

<input type="radio" name="promocja" id="po">
<label for="po">Półdługie</label>

<input type="radio" name="promocja" id="dl">
<label for="dl">Długie</label>
<input type="checkbox" id="kot" name="kot">
<label for="kot">Koteczek</label>

<input type="checkbox" id="pies" name="pies">
<label for="pies">Pieseczek</label>

<input type="checkbox" id="osa" name="osa">
<label for="osa">Mała osa</label>

<input type="checkbox" id="slon" name="slon">
<label for="slon">SŁonik</label>

Wszystkie radio mają to samo name, czyli tworzą jedną grupę (można wybrać tylko jeden).
Jeśli każdy checkbox ma inne name, wtedy każdy traktowany jest jako osobne pole true/false.
Gdyby wszystkie checkboxy miały by to samo name, to na serwer wysłały by listę zaznaczonych wartości

JavaScript

Checkboxy są potrzebne np. w zadaniu INF.03-05-24.01-SG. JS jest podobny do tego poniżej.
Radio są potrzebne w zadaniu z drill.1 Tu jest plik pdf z zadaniem. Poniżej kod gotowego rozwiązania:

<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Fryzjerstwo</title>
    <link rel="stylesheet" href="stylB.css">
</head>
<body>
    <div>
        <div id="kolumna_szeroka">
            <section id="lewy1" >
                <h1><a href="index.html">SALON FRYZJERSKI</a></h1>
            </section>
            <section id="lewy2" >
                <h2>PROMOCJA</h2>
                <form>
                <input type="radio" name="promocja" id="kr"><label for="kr">Krótkie</label><br>
                <input type="radio" name="promocja" id="sr"><label for="sr">Średnie</label><br>
                <input type="radio" name="promocja" id="po"><label for="po">Półdługie</label><br>
                <input type="radio" name="promocja" id="dl"><label for="dl">Długie</label><br>
                <input type="button" value="Odkryj promocję" onclick="promo()"><br>
                <p id="wynik">...</p>
                </form>
            </section>
            <section id="lewy3" >
                <p>Witaj! Miło nam, że odwiedziłeś nasz salon. Sprawdź promocje!</p>
                <h4>Kontakt: 444 555 666</h4>
            </section>
        </div>
        <div id="kolumna_waska">
            <section id="prawy1" class="prawy">
                <h4><a href="fryzura.html">Ceny strzyżenia</a></h4>
                <table>
                    <tr><th>Długość włosów</th><th>Cena</th></tr>
                    <tr><td>Krótkie</td><td>25</td></tr>
                    <tr><td>Średnie</td><td>30</td></tr>
                    <tr><td>Półdługie</td><td>40</td></tr>
                    <tr><td>Długie</td><td>50</td></tr>
                </table>
            </section>
            <section id="prawy2" class="prawy">
                <img src="obraz1.jpg" alt="Fryzjerka">
            </section>
        </div>
        <section id="stopka">
            <p>Autor:1234567890</p>
        </section>
    </div>
    <script>
        function promo() {
            let wynik = document.getElementById("wynik");
            let cena = "";

            if (document.getElementById("kr").checked) {
                cena = "Cena promocyjna: 15 zł";
            } else if (document.getElementById("sr").checked) {
                cena = "Cena promocyjna: 20 zł";
            } else if (document.getElementById("po").checked) {
                cena = "Cena promocyjna: 30 zł";
            } else if (document.getElementById("dl").checked) {
                cena = "Cena promocyjna: 40 zł";
            } else {
                cena = "Wybierz długość włosów!";
            }

            wynik.textContent = cena;
        }
    </script>
</body>
</html>

INF.03.drill.2 – Html + Css

Cel zadania: Jak najszybsze utworzenie HTML i CSS bez kopiowania kodu z AI.
Zadanie: Fragment zadania inf.03-2025-01-06-SG (str. 3 i 4)
Potrzebne pliki z zadania: zip (dane + gotowa animacja)

Przygotuj HTML i CSS strony. Jeśli wystarczy Ci czasu – przygotuj animację. Jeśli nie wystarczy Ci czasu – użyj gotowej animacji – jest w tym samym archiwum. Animację najlepiej zrobić Gimpem (dodać wszyskie pliki jako kolejne warstwy i zapisać jako gif)

INF.03.drill.1 – VS Code + html + css

Cel zadania: Jak najszybsze utworzenie HTML i CSS bez kopiowania kodu z AI.
Metoda: Użycie trików (Emmet: rozszerzenie wbudowane w VS Code)
Zadanie: Fragment zadania INF.03-08-24.01-SG (str. 3 i 4)
Potrzebne pliki z zadania: obraz1.jpg, obraz2.jpg

Plik index.html

  1. Przeczytaj 3 i 4 stronę zadania
  2. Utwórz pusty plik index.html i otwórz go w VS Code
  3. Utwórz szablon pliku:
    • Wpisz znak „!” i wciśnij klawisz Tab
    • Ustaw kursor wewnątrz body i wpisz section#blok$*6 (i wciśnij klawisz Tab)
    • Jeśli chcesz – zmień nazwy bloków wg uznania
    • W pierwszym bloku wpisz h1>a (i wciśnij klawisz Tab)
    • W bloku dla tabelki wpisz h4>a (i wciśnij klawisz Tab)
      i dalej table>tr*5>td*2 (i wciśnij klawisz Tab)
    • W blokach dla obrazków wpisz img (i wciśnij klawisz Tab)
  4. Jeśli to konieczne uporządkuj kod
  5. Wypełnij szablon tekstami i obrazkami z zadania

Plik styl8.css

  1. W pliku index.html ustaw kursor wewnątrz head, wpisz link:css (i wciśnij klawisz Tab)
  2. Wpisz odpowiednią nazwę pliku, utwórz ten plik i otwórz w VS Code
  3. Wpisz *{ i wciśnij klawisz Enter
  4. Wpisz ff:Garmond (i wciśnij klawisz Tab)
  5. Poniżej wpisz ta:c (i wciśnij klawisz Tab)
  6. Poniżej za } wpisz body { i wciśnij klawisz Enter
  7. Wpisz m:a (i wciśnij klawisz Tab)
  8. Dalej pobaw się sam. Może przydadzą się:
    • m10
    • fl:l
    • cl:b
    • p20-10
    • pos:a
    • bg#f00
    • c#fff
    • w100p

Inne przydatne skróty Emmet dla HTML

  • div.container>ul>li*5
  • lorem10
  • ul>li.item$*3
  • h3+p
  • script:src

Na kolejnych stronach porównuję 3 wersje rozwiązania. NIE IDŹ TAM OD RAZU!!! Czytanie gotowca nic Ci nie da!