9 listopada
Szkielet gry - rozwiązania
To czas na rozwiązania. Pierwszą rzeczą, którą chce wam pokazać, to szkielet strony. Wygląda on mniej więcej tak:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<div id="contener">
<div id="naglowek"></div>
<div id="menu"></div>
<div id="tresc"></div>
<div id="stopka"></div>
</div>
</body>
</html>
Jak widać, szkielet jest banalnie prosty. Całą operację “wyglądania” załatwia odpowiedni plik css. Samego pliku nie będę załączać póki nie będzie on w pełni gotowy - na razie musi wam wystarczyć fakt, że wyświetla się to w odpowiednich miejscach.
Teraz rozwiązanie zadania pierwszego, czyli formularz.
<fieldset>
<legend>Dane podstawowe</legend>
<label>Podaj login</label>
<input name="login" type="text" />
<label>Podaj maila</label>
<input name="mail" type="text" />
<label>Podaj hasło</label>
<input name="haslo" type="password" />
<label>Powrórz hasło</label>
<input name="haslo2" type="password" />
<input name="waliduj" type="hidden" value="1" />
</fieldset>
<fieldset>
<legend>Dane osobowe</legend>
<label>Podaj imie</label>
<input name="imie" type="text" />
<label>Podaj nazwisko</label>
<input name="nazwisko" type="text" />
</fieldset>
<fieldset>
<legend>Dane postaci</legend>
<label>Podaj imie postaci</label>
<input name="imie_postaci" type="text" />
</fieldset>
</form>
Formularze dobrze jest jakoś logicznie poukładać w grupy - będzie łatwiej je wypełnić. Tutaj chyba nie ma za bardzo co tłumaczyć. Kod ten wstawiamy w div o id równym tresc. Oczywiście całe formatowanie jest ukryte w pliku .css .
A teraz dopiero zaczynam bawić się w programowanie.
$_POST['waliduj']="";
switch ($_POST['waliduj'])
{
case '1':
//wykonaj walidację
break;
default:
//wyświetl formularz
}
Na początek sprawdzamy czy zmienna waliduj jest ustawiona. Jeśli nie, ustawiamy jej wartość na pusty łańcuch znaków. Następnie w konstrukcji switch sprawdzamy czy należy wykonać wyświetlenie formularza, czy jego walidację. O ile w tym przypadku konstrukcja switch jest przerostem formy nad treścią, to … nie wiem co chciałem powiedzieć :P Chodzi o to, że używając tej konstrukcji w taki sposób (dla zmiennych przesyłanych z formularzy) zabezpieczamy się przed podaniem przez użytkownika-szkodnika złej wartości zmiennej. Jeśli wartość będzie wzięta z kosmosu, wykona się domyślny kod.
Tak wygląda walidacja pól formularzy - jeśli pole spełnia warunki, nie robimy nic. W przeciwnym wypadku ustawiamy wartość zmiennej na łańcuch pusty. Poszczególne pola z ćwiczeń walidują się następującymi warunkami:
/^[a-zA-Z0-9]{8,}$/ - hasło
/^[A-Z]{1}[a-z]+$/ - imię
/^[A-Z]{1}[a-z]+(-[A-Z]{1}[a-z]+)?$/ - nazwisko
/^[a-zA-Z ]+?$/ - nazwa postaci
Teraz czas na kodowanie hasła. Dlaczego musi być kodowane? Bo thak! Musi być kodowane i koniec. Ja używam do tego kodowania md5.
Proste więc nie trzeba tłumaczyć. Jednocześnie trzeba porównać, czy hasło i powtórzone hasło są takie same. Najprościej użyje się znaku porównania (==), można też porównać łącznie z typem danych (===) albo użyć odpowiedniej funkcji.
Żeby sprawdzić czy domena podanego maila istnieje, należy ją najpierw wyciągnąć ze zmiennej.
Funkcja split rozdziela zmienną na tablicę ciągów. W tym przypadku będą dwie zmienne w tablicy. Rozdzielenie następuje po trafieniu na znak @ (można podać dowolny znak). Funkcja list tworzy tablicę z podanych zmiennych - jest to konieczne w celu odpowiedniego ich przypisania. Następnie używamy czegoś takiego:
Funkcja sprawdza czy podana domena istnieje. Teraz ładnie trzeba to ubrać w funkcję, np. taką:
if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/" , $email))
{
list($username,$domain)=split('@',$email);
if(!checkdnsrr($domain,'MX'))
{
return false;
}
return true;
}
return false;
}
Rozwiązanie do zadania piątego pokaże się na dniach - dzisiaj już nie dam rady tego napisać.

Autor: Damian dnia 09.11.09 o godz. 00:14
Mam już zrobiony szablon strony, tło oraz formularz rejestracyjny. Mam jednak dwa pytania:
1. Czy któryś z darmowych hostingów obsługuje mail()? Jeżeli nie, to jak skonfigurować lokalny SMTP w KrasnalServ?
2. Kiedy następna część kursu? ^^
Autor: misiuziu dnia 09.11.09 o godz. 00:14
Nie mam pojęcia, czy darmowe serwery obsługują tą funkcję - tylko raz, bardzo dawno temu szukałem darmowego serwera z obsługą PHP i żadnego normalnego nie znalazłem.
Możesz sprawdzić na ovh.pl . Tamte darmowe konta są podobno całkiem w pytkę. Na razie powinno wystarczyć, ale już niebawem będę wprowadzał bazę danych - raczej nie znajdziesz darmowego konta z baza danych.
Serwer można mieć już od 5 zł za miesiąc, więc to chyba nie jest aż taki wielki problem.
Następna część kursu będzie dzisiaj albo w piątek - w zależności czy zdarzę :)