Czego się nauczysz?
- Generowania losowych danych w PHP (rand, shuffle, array_rand)
- Manipulacji stringami (substr, strtolower, ucfirst)
- Tworzenia wzorców i szablonów
- Walidacji i sanityzacji danych wejściowych
- Pracy z tablicami słowników
Stworzysz Generator nicków - aplikację umożliwiającą tworzenie unikalnych nazw użytkownika na podstawie podanych parametrów. Użytkownik może podać swoje imię, wybrać styl nicka i otrzymać propozycje. System zapisuje historię wygenerowanych nicków i pozwala na różne wzorce generowania.
Czego się nauczysz?
W prawdziwej pracy...
Generatory danych są używane wszędzie: generowanie tymczasowych haseł, kodów promocyjnych, identyfikatorów zamówień, unikalnych URL-i. Umiejętność pracy z losowością, wzorcami i manipulacją stringami jest fundamentem dla wielu funkcji w systemach e-commerce, grach online, platformach społecznościowych i aplikacjach biznesowych.
Formularz generowania Użytkownik podaje swoje imię (lub słowo bazowe) i klika przycisk “Generuj”. System tworzy nick na podstawie tego słowa z dodaniem losowych elementów.
Wyświetlenie wyniku Wygenerowany nick jest wyświetlany w czytelny sposób z możliwością skopiowania do schowka (JavaScript).
Zapis do historii Każdy wygenerowany nick jest zapisywany do pliku JSON z datą utworzenia.
Przeglądanie historii Użytkownik może zobaczyć listę wszystkich wygenerowanych nicków.
Przykładowa struktura pliku JSON:
{ "nicknames": [ { "id": 1, "base_word": "Kamil", "nickname": "KamilX42", "pattern": "word_number", "created_at": "2026-02-13 10:30:00" }, { "id": 2, "base_word": "Anna", "nickname": "ShadowAnna", "pattern": "prefix_word", "created_at": "2026-02-13 10:35:00" }, { "id": 3, "base_word": "Pro", "nickname": "ProGamer2026", "pattern": "word_suffix_year", "created_at": "2026-02-13 11:00:00" } ]}Wymagane funkcje:
Przykładowy scenariusz:
Ocena: 3.0Użytkownik wpisuje “Kamil” i klika “Generuj”. System dodaje losową liczbę 1-999 i wyświetla “Kamil742”. Nick zostaje zapisany do historii.
Wszystko z wariantu A, plus:
Przykładowy scenariusz:
Ocena: 4.0-5.0Użytkownik wpisuje “Kamil”, wybiera wzorzec “prefix + słowo” i klika “Generuj 5 nicków”. System wyświetla: “DarkKamil”, “ProKamil”, “NightKamil”, “ShadowKamil”, “CyberKamil”. Może kliknąć ikonę kopiowania przy wybranym nicku.
Wszystko z wariantu B, plus:
Przykładowy scenariusz:
Ocena: 5.0-6.0Użytkownik wybiera styl “fantasy”, wpisuje “Kamil” i generuje nicki. System proponuje: “KamilTheWise”, “SirKamil”, “KamilShadowbane”. Użytkownik dodaje “SirKamil” do ulubionych. Może też włączyć leet speak i dostać “K4m1l” lub “K@m!l”.
Walidacja słowa bazowego:
$baseWord = trim($_POST['base_word'] ?? '');
if (empty($baseWord)) { $errors[] = "Podaj słowo bazowe";}
if (!preg_match('/^[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]+$/u', $baseWord)) { $errors[] = "Słowo może zawierać tylko litery";}
if (strlen($baseWord) < 2 || strlen($baseWord) > 20) { $errors[] = "Słowo musi mieć 2-20 znaków";}Prosty generator nicków:
function generateNickname(string $baseWord, string $pattern = 'word_number'): string { $baseWord = ucfirst(strtolower($baseWord));
switch ($pattern) { case 'word_number': return $baseWord . rand(1, 999);
case 'prefix_word': $prefixes = ['Dark', 'Pro', 'Night', 'Shadow', 'Cyber', 'Ultra', 'Mega']; return $prefixes[array_rand($prefixes)] . $baseWord;
case 'word_suffix': $suffixes = ['Master', 'King', 'Lord', 'Star', 'Hero', 'X', 'Pro']; return $baseWord . $suffixes[array_rand($suffixes)];
case 'word_year': return $baseWord . date('Y');
default: return $baseWord . rand(1, 999); }}Generowanie wielu nicków:
function generateMultiple(string $baseWord, string $pattern, int $count = 5): array { $nicknames = []; $attempts = 0; $maxAttempts = $count * 3; // zabezpieczenie przed nieskończoną pętlą
while (count($nicknames) < $count && $attempts < $maxAttempts) { $nick = generateNickname($baseWord, $pattern); if (!in_array($nick, $nicknames)) { $nicknames[] = $nick; } $attempts++; }
return $nicknames;}Leet speak (wariant C):
function toLeetSpeak(string $text): string { $replacements = [ 'a' => '4', 'A' => '4', 'e' => '3', 'E' => '3', 'i' => '1', 'I' => '1', 'o' => '0', 'O' => '0', 's' => '5', 'S' => '5', 't' => '7', 'T' => '7', ];
return strtr($text, $replacements);}JavaScript - kopiowanie do schowka:
function copyToClipboard(text) { navigator.clipboard.writeText(text).then(() => { alert('Skopiowano: ' + text); }).catch(err => { console.error('Błąd kopiowania:', err); });}Wykorzystaj lekcje!
Cotygodniowe spotkania podczas lekcji to idealny moment, by:
Pracuj iteracyjnie - lepiej mieć działający wariant A niż niedokończony C!