Sähköisten asiointipalveluiden toteuttaminen

Sorakuilu

Demo 12, 1908Tivipa

Toimeksianto

Suunnitellaan yhdessä taulut pelitapahtuman pelaajien, joukkueiden ja tulosten ylläpitämiseksi.

ER-kaavio

ER-kaavio

Tietokantakaavio

Mieti sopivat tietotyypit kentille

tietokantakaaviokaavio

Luo taulu ja tee hakuja

Luo taulu phpmyadminilla(voit käyttää PHP:tä ja PDO-luokkaa hyväksi).

SQL-tiedosto tunnilla luoduista tauluista.

Lisää sitten tauluihin phpmyadminin avulla tietoja.

SELECT

Laadi ohjelma, joka listaa kuvaruudulle seuraavat asiat:

Yhteys tietokantaan (connection.php)

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

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

Listaukset (demo12a.php)

<h2>Hae kaikki pelaajat</h2>
<?php
// Kohta 1: ota yhteys
// Kohta 2: luo sql
// Kohta 3: suorita sql
// Kohta 4: käsittele vastaus

require "connection.php"//Kohta 1

$sql "SELECT nickname FROM players"//Kohta 2

$stm $pdo->query($sql); //Kohta 3

$players $stm->fetchAll(PDO::FETCH_ASSOC);//KOhta 4 alkaa
//var_dump($players);

foreach($players as $player) {
    echo 
$player["nickname"]."<br>";
}
?>
<h2>Hae pelaajien pelit ja pisteet</h2>

<?php
$sql 
"SELECT playersgames.points,players.nickname,games.gamename 
FROM ((playersgames
INNER JOIN players ON players.playerID=playersgames.playerID)
INNER JOIN games ON games.gameID=playersgames.gameID);"
;

$stm $pdo->query($sql); //Kohta 3

$results $stm->fetchAll(PDO::FETCH_ASSOC);//KOhta 4 alkaa

foreach($results as $row) {
    echo 
$row["nickname"]." ".$row["gamename"]." ".$row["points"]."<br>";
}

INSERT INTO (demo12e.php)

Laadi tietoturvallinen lomake, jolla uusi pelaaja voi rekisteröityä mukaan. Tarkista lomakkeella syötetyt tiedot, suojaa parametrit sitomalla (bind)

<!doctype html>
<html lang="fi">
<head>
<title>Demo 12 e</title>
<meta charset ="utf-8">
</head>
<body>

<form method ="post">
<label for="nickname">Nickname</label><br>
<input type ="text" name ="nickname" required><br>

<label for ="password">Salasana</label><br>
<input type="password" name="password" required><br>

<label for="password2">Salasana uudelleen</label><br>
<input type="password" name="password2" required><br>

<label for="email">Email</label><br>
<input type="email" name="email" required><br>

<label for="character">Hahmo</label><br>
<select name="character">
    <option value="hirviö">hirviö</option>
    <option value ="keiju">keiju</option>
    <option value="olio">olio</option>
</select><br><br>

<input type="submit" value="Rekisteröi pelaaja">
</form>

<?php
require "connection.php";

if(isset(
$_POST["nickname"],$_POST["password"],$_POST["password2"],$_POST["email"],$_POST["character"]) && $_POST["password"] === $_POST["password2"] )  {

    
$nickname $_POST["nickname"];
    
$password $_POST["password"];
    
$email $_POST["email"];
    
$character $_POST["character"];
    
$money 500;
    
$lastLogin date('Y-m-d');
    
$banned 0;


    
$sql "INSERT INTO players(nickname, password, email, `character`, money, lastLogin, banned) VALUES (?,?,?,?,?,?,?)";
   
    
$stm $pdo->prepare($sql);
  
    if(
$stm->execute(array($nickname,$password,$email,$character,$money,$lastLogin,$banned)))
        echo 
"Pelaaja on lisätty, id on "$pdo->lastInsertId();


SELECT ja listaus linkkeineen (demo12f.php)

Laadi listaus pelaajista siten, että jokaisen perässä on linkki pelaajan muuttamiseen ja poistamiseen. Listaus ei vaadi suojaamista, sillä käyttäjä ei anna syötteitä sitä varten.

<?php
require "connection.php";
$sql ="SELECT playerID,nickname FROM players";

$stm $pdo->query($sql);

$players $stm->fetchAll(PDO::FETCH_CLASS);
//var_dump($players);

foreach($players as $player) {?>
    <h3><?= $player->nickname;?></h3>
    <a href="demo12g.php?id=<?= $player->playerID;?>">Poista</a><br>
    <a href="demo12h.php?id=<?= $player->playerID;?>">Muokkaa</a><br>  

<?php
}
?>

DELETE FROM (demo12g.php)

Tee tietoturvallinen ohjelma pelaajan poistamiseen.

<?php
if(!isset($_GET["id"])) header("Location: demo12f.php?message=puuttuu");
else {
    
$id=$_GET["id"];

    require 
"connection.php";
    
$sql "DELETE FROM players WHERE playerID=?";

    
$stm $pdo->prepare($sql);
    
$stm->bindValue(1$id);
    
$stm->execute();
    
header("Location: demo12f.php");
}

UPDATE (demo12h.php)

Tee tietoturvallinen ohjelma pelaajan muokkaamiseen.

GET, hae tiedot lomakkeelle

<!-- idea:
1. hae tiedot kannasta (SELECT)
2. tulosta ne lomakkeeseen
3. kun käyttäjä on täyttänyt/korjannut tiedot ja klikkaa "Lähetä" kutsuu seuraavaa tiedostoa, action on siis seuraavaan tiedostoon, joka päivittää (UPDATE) -->
<!doctype html>
<html lang="fi">
<head>
<title>Demo 12 e</title>
<meta charset ="utf-8">
</head>
<body>

<?php

if(!isset($_GET["id"])) header("Location: demo12f.php?message=puuttuu");
else {
    
$id=$_GET["id"];
    require 
"connection.php";
    
$sql "SELECT * FROM players WHERE playerID = ?";
    
$stm $pdo->prepare($sql);
    
$stm->bindValue(1$id);
    
$stm->execute();

    
$player $stm->fetchAll(PDO::FETCH_ASSOC);
    
//var_dump($player);

    
$id $player[0]["playerID"];
    
$nickname $player[0]["nickname"];
    
$email $player[0]["email"];
    
$current_character $player[0]["current_character"];
    
$money $player[0]["money"];
    
$banned $player[0]["banned"];

?>

    <form method ="post" action ="demo12hpost.php">

    <input type ="hidden" name="playerID" value="<?= $id;?>">

    <label for="nickname">Nickname</label><br>
    <input type ="text" name ="nickname" value ="<?= $nickname;?>" required><br>

   
    <label for="email">Email</label><br>
    <input type="email" name="email" value ="<?= $email?>" required><br>

    <label for="character">Hahmo</label><br>
    <select name="character">
        <option value="hirviö" <?php if($current_character == "hirviö") echo "selected";?>>hirviö</option>
        <option value ="keiju" <?php if($current_character == "keiju") echo "selected";?>>keiju</option>
        <option value="olio" <?php if($current_character == "olio") echo "selected";?>>olio</option>
    </select><br><br>

    <input type="submit" value="Muuta pelaajaa">
    </form>
<?php
}
?>

POST, lähetys lomakkeelta kantaan

<?php
require "connection.php";

if(isset(
$_POST["playerID"],$_POST["nickname"],$_POST["email"],$_POST["character"])) {
    
$playerID $_POST["playerID"];
    
$nickname $_POST["nickname"];
    
$email $_POST["email"];
    
$current_character $_POST["character"];

    
$sql "UPDATE players SET nickname = ?,email = ?, current_character = ? WHERE playerID = ?";
    
$stm $pdo->prepare($sql);
    
$stm->execute(array($nickname,$email,$current_character,$playerID));
    
header("Location: demo12f.php");
}