Tworzymy grę, część 3: Kolejny skrypt

Remigisz Szulc
05.09.2015

III - Kolejny skrypt

Ok... mamy skrypt odpowiedzialny za logowanie się gracza. Ale co nam po tym jeśli nie mamy rejestracji i nie ma szansy się zalogować?

1. Edytowanie tabeli `konta`
Powiedzmy, że przy rejestracji gracz będzie podwał swój login, hasło(2 razy), płeć w grze oraz klasę postaci. Nasza tabela `konta` zawiera póki co tylko 2 z wyżej wymienionych pól. Login oraz hasło. Musimy ją zedytować i dodać pola:
plec - Varchar o długości 1
klasa - text
Tworzymy także plik rejestracja.php, który będzie miał następujący wygląd (pod kodem wyjaśnienie co jest czym):

<?php
  if(isset($_POST['ok'])){
  $name = htmlspecialchars($_POST['name']);
  $password = $_POST['pass'];
  $password_2 = $_POST['pass2'];
  $plec = $_POST['plec'];
  $klasa = $_POST['klasa'];
  if($name != NULL AND $password != NULL AND $password_2 != NULL AND $plec !=   NULL AND $klasa != NULL){
  if($password !== $password_2){
  exit("Podane hasła są różne!");
  }
  $mysql = mysql_fetch_array(mysql_query("select   `ID` from `konta` where `login` = '$name'"));
  if($mysql != NULL){
  exit("Podany gracz już istnieje!");
  }
  $mysql = "insert into `konta` values ('',   '$name', '$password', '$plec', '$klasa')";
  $query = mysql_query($mysql);
  if($query){
  echo 'Witamy w naszym świecie '.$name.'';
  }
  }
  }
  else {
  ?>
  <form action='' method='post'>
  Login: <input type='text' name='name' />

  Hasło: <input type='password' name='pass' />

  Powtórz hasło: <input type='password' name='pass2' />

  Płeć: <select name="plec">
  <option value="M">Mężczyzna</option>
  <option value="K">Kobieta</option>
  </select>

  Klasa: <select name="klasa">
  <option value="Wojownik">Wojownik</option>
  <option value="Mag">Mag</option>
  </select>
  <input type='submit' name='ok' value='Zarejestruj się!' />
  </form>
  <?
  }
  ?>

Jak można zauważyć skrypt ten jest dość ubogi. Nie koduje haseł co jest rzeczą bardzo ważną jeśli chodzi o bezpieczeństwo gracza.

2. Wyjaśnienie kodu
[PHP]if(isset($_POST['ok'])){ [/PHP]- sprawdza czy użytkownik wcisnął przycisk "Zarejestruj się", którego imię (name) to ok

Następnie zmiennym przypisujemy zmienne pobrane z formularza. Pojawia się tam jednak dość ciekawa funkcja htmlspecialchars. Ma ona za zadanie uniemożliwiać użytkownikowi wpisanie w formularzu np. co zniszczyło by lekko strukturę naszej gry.
htmlspecialchars to bardzo przydatna funkcja, niestety nadzwyczaj często i niej zapominamy. Z doświadczenia wiem, że blokuje więcej "kwiatków" niż strip_tags(), w związku z czym polecam ją używać przy każdej zmiennej, której wartość może ustalać gracz.

exit("Podane hasła są różne!"); - funkcja exit(); użyta w obu wypadkach błędnego wykonania warunku ma za zadanie nie wykonać dalszej części skryptu i pokazać tekst napisany między "".

$mysql = mysql_fetch_array(mysql_query("select `ID` from `konta` where `login` = '$name'")); - zapytanie to skierowane do bazy danych zwróci nam ID gracza, którego login jest taki sam jak ten podany przy rejestracji. Jeśli taki gracz istnieje co sprawdza kolejny warunek to wypisze się funkcja exit();

$mysql = "insert into `konta` values ('', '$name', '$pass', '$plec', '$klasa')";
$query = mysql_query($mysql);
- a to zwykłe dodawanie do mysql'a nowego gracza.

Potem mamy już tylko zakończenie różnych warunków oraz zwykły HTML'owski formularz rejestracji. Oczywiście nie można zapomnieć o połączeniu z bazą danych opisanym w poprzedniej części.

Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie