Sähköisten asiointipalveluiden toteuttaminen

Sorakuilu

Demo 13 (1908Tivib02), MVC-malli

Tehtävä: Muunna aikaisemmin tehtyä demoa 12 MVC-mallin mukaiseksi.

Alla oleva kuva esittää lopputulokseksi tulevaa pikkuriikistä järjestelmää, jolla voidaan ylläpitää pelaajien tietoja.

käsitteellinen sivukartta

Kansiot

Tiedostot organisoidaan uudestaan, ne sijoitetaan seuraavaan kansiorakennelmaan:

kansiot

MVC

Tietokanta ja yhteys

Tietokanta harjoitukseen

./database/connection.php (soveltaen omilla tiedoilla)

<?php
$dsn 
"mysql:host=magnesium;dbname=18aphpljn";
$user "leena";
$passwd "lmjn";

$pdo = new PDO($dsn$user$passwd);
?>

./database/models/Player.php

Aloitamme siirtämällä SQL-koodi funktioina tiedostoon ./database/Player.php

<?php
/*  
CREATE TABLE IF NOT EXISTS `players` (
  `playerID` int(10) NOT NULL AUTO_INCREMENT,
  `nickname` varchar(15) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(50) NOT NULL,
  `current_character` varchar(15) NOT NULL,
  `money` decimal(10,0) NOT NULL DEFAULT '500',
  `lastLogin` date NOT NULL,
  `banned` tinyint(1) NOT NULL DEFAULT '0',
  `teamID` int(10) DEFAULT NULL,
  PRIMARY KEY (`playerID`),
  KEY `teamID` (`teamID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
*/

require "./database/connection.php";

function 
getAllPlayers()
{
    global 
$pdo//Kohta 1 ota yhteys

    
$sql "SELECT * FROM players";//Kohta 2 rakenna SQL
    
$stm $pdo->query($sql); //Kohta 3 suorita sql

    
$players $stm->fetchAll(PDO::FETCH_ASSOC);

    return 
$players;

}

function 
getPlayerById($id)
{
    global 
$pdo;

    
$sql "SELECT * FROM players WHERE playerID = ?";
    
$stm $pdo->prepare($sql);

    
$stm->bindValue(1$id);
    
$stm->execute();

    
$player $stm->fetchAll(PDO::FETCH_ASSOC);
    return 
$player;
}


function 
getPlayerByNickname($nickname)
{
    global 
$pdo;

    
$sql "SELECT * FROM players WHERE nickname = ?";
    
$stm $pdo->prepare($sql);

    
$stm->bindValue(1$nickname);
    
$stm->execute();
    
    
$player $stm->fetchAll(PDO::FETCH_ASSOC);
    return 
$player;
}


function 
addPlayer($data)
{
    global 
$pdo;
    
var_dump($data);
    
$sql "INSERT INTO players (nickname,password,email,current_character,lastLogin) VALUES (?,?,?,?,?)";
    
$stm $pdo->prepare($sql);
    
$ok $stm->execute($data); //palauttaa true tai false
    
return $ok;
}

function 
editPlayer($data)
{
    global 
$pdo;

    
$sql ="UPDATE players SET nickname = ?, email = ?, current_character = ?, banned = ? WHERE playerID = ?";

    
$stm $pdo->prepare($sql);
    
$ok $stm->execute($data); //palauttaa true tai false
    
return $ok;
}

function 
deletePlayer($id)
{
    global 
$pdo;

    
$sql "DELETE FROM players WHERE playerID = ?";
    
$stm $pdo->prepare($sql);
    
$stm->bindValue(1$id);

    
$ok $stm->execute();
    return 
$ok;
}

Testitiedosto

<?php
require "./database/models/Player.php";

/************************************* */
$players getAllPlayers(); //kutsuu funktiota, pitäisi saada arvokseen funktion hakemat pelaajat

echo "<pre>";
var_dump($players);
echo 
"</pre>";

/************************************** */

$player getPlayerById(2);

echo 
"<pre>";
var_dump($player);
echo 
"</pre>";


/**************************************** */
$player getPlayerByNickname("Armas");

echo 
"<pre>";
var_dump($player);
echo 
"</pre>";


/***************************************** */

$data = array("untoliini","pasusasa","eh@gmail.com","olio","2020-12-12");
$ok addPlayer($data);
if(
$ok) echo "Lisätty";
else echo 
"Ei onnaa";

/*************************************** */

$data = array("uusinimi","uusi@gmail.com","ötökkä",1,7);

$ok editPlayer($data);
if(
$ok) echo "Muutettu";
else echo 
"Ei onnaa";

/*************************************** */

$ok deletePlayer(8);
if(
$ok) echo "Poistettu";
else echo 
"Ei onnaa";
?>