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:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<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.

<form action="index.php" method="post">
    <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.

if(!isset($_POST['waliduj']))
    $_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.

if(!preg_match("/^[a-zA-Z0-9]+$/" , $_POST['login']))
     $_POST['login']="";


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.

$_POST['haslo']=md5($_POST['haslo']);
$_POST['haslo2']=md5($_POST['haslo2']);

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.

list($username,$domain)=split('@',$_POST['mail']);

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:

checkdnsrr($domain,'MX');

Funkcja sprawdza czy podana domena istnieje. Teraz ładnie trzeba to ubrać w funkcję, np. taką:

function checkEmail($email) {
    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ć.

Odpowiedzi: 2 do tego wpisu.

  1. Damian's Gravatar

    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? ^^

  2. misiuziu's Gravatar

    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ę :)

Dodaj swój komentarz