Demo 10

PDO: tietokantayhteys

Tietokanta

Lisää samariumille phpmyadminiin taulu ja tiedot lukemalla sql-tiedosto test_games.sql.

  • Kirjaudu cPaneliin (https://cpanel.tunnus.treok.io/) ja avaa MySQL Databases
  • Tee uusi tietokanta nimeltä tunnus_sasp
  • Tämän jälkeen tee uusi käyttäjä, tunnus_sasp, luo salasana Password Generatorin avulla, kopioi salasana itsellesi talteen!
  • Lisää vielä tekemäsi käyttäjä tietokannalle (Add User to Database), voit antaa kaikki oikeudet (ALL PRIVILEGES).
  • Avaa seuraavaksi cPanelin työkaluista phpMyAdmin, tuo sql-tiedosto tietokantaasi.

dbfunctions.php

Tee aluksi itsellesi uusi tiedosto dbfunctions10.php demot-kansioosi . Tehdään aluksi funktio jonka avulla voidaan ottaa yhteys tietokantaan:

/**
 * Ottaa yhteyden tietokantaan, palauttaa 
 * pdo-olion.
 * 13.2.2023/EM
 */
function connect() {
    $servername = "tunnus.treok.io";
    $username = "tunnus_sasp";
    $password = "salasana";
    //$port = 3306;
    $dbname = "tunnus_sasp";

    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully";
        return $conn;
    } catch(PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
        die();
    }
}

demo10.php

Kokeillaan tietokantayhteyttä

  require "./dbfunctions10.php";

  $pdo = connect();  

dbfunctions10.php

Funktio joka hakee kaikki pelit

  /**
  * Hakee kaikki pelit taulusta test_games
  */
 function getAllGames() {
     $pdo = connect();
     $sql = "SELECT * FROM test_games";
     $stm = $pdo->query($sql);
     $games = $stm->fetchAll(PDO::FETCH_ASSOC);
     return $games;
 }  

Voit testata tätä taas demossasi:

  //$pdo = connect();
  $games = getAllGames();
  var_dump($games);  

Funktio joka poistaa pelin id:n perusteella

  /**
  * Poistaa pelin jonka gameid on $id
  */
 function deleteGame($id) {
     $pdo = connect();
     $sql = "DELETE FROM test_games WHERE gameid=?";
     $stm = $pdo->prepare($sql);
     $ok = $stm->execute([$id]);
     return $ok;
 }  

Funktio joka hakee pelin id:n perusteella

  /**
  * Palauttaa tietyn pelin
  */
 function getGameById($id) {
     $pdo = connect();
     $sql = "SELECT * FROM test_games WHERE gameid=?";
     $stm = $pdo->prepare($sql);
     $stm->execute([$id]);
     $game = $stm->fetch(PDO::FETCH_ASSOC);
     return $game;
 }  

Funktio joka lisää pelin

  function insertNewGame($name, $company, $release) {
    $pdo = connect();
    $sql = "INSERT INTO test_games (`name`, company, `release`) VALUES (?, ?, ?)";
    $stm = $pdo->prepare($sql);
    $ok = $stm->execute([$name, $company, $release]);
    return $ok;
}

Funktio joka muokkaa tietyn id:n peliä

  function updateGame($name, $company, $release, $id) {
    $pdo = connect();
    $sql = "UPDATE test_games SET `name`=?, company=?, `release`=? WHERE gameid=?";
    $stm = $pdo->prepare($sql);
    $ok = $stm->execute([$name, $company, $release, $id]);
    return $ok;
}  

demo10.php

Hae funktion avulla pelit ja näytä ne taulukossa. Tulokset kannattaa käydä foreach-silmukassa läpi.

demo10

Poistaminen

Lisää linkki jolla kutsut samaa sivua ja lähetät parametrina deletedid:n.

  echo "<td><a href='./demo10.php?deletedid=" . $game["gameid"] . "'>poista</a></td>";  

Lisää sivun alkuun tarkistus:

if (isset($_GET["deletedid"])) {
  $id = $_GET["deletedid"];
  $ok = deleteGame($id);
  // ohjataan sivu lataamaan uudestaan
  header("Location: ./demo10.php");
}  

Lataamalla sivu uudestaan estetään refresh-ongelma missä aina uudelleen päivitettäessä sivua tämä funktio suoritettaisiin uudestaan.

Lisääminen

Lisää linkki sivulle joka johtaa toiselle sivulle, demo10form.php:lle.

<a href='./demo10form.php'>Lisää uusi</a>
Lisää peli






Muokkaaminen

Lisää linkki taulukolle joka johtaa form-sivulle.

echo "<td><a href='./demo10form.php?editedid=" . $game["gameid"] . "'>muokkaa</a></td>";  

Tunnilla tehty esimerkki form-sivusta: demo10form.php