Obstoječe zapise v tabeli spreminjamo z ukazom
UPDATE. Uporabnik najprej izbere zapis, nato
popravi podatke v obrazcu, na koncu pa spremembe shranimo v bazo.
Posodabljanje zapisov v tabeli
Pri urejanju podatkov običajno izvedemo tri korake:
- izpišemo seznam zapisov,
- izberemo zapis za urejanje,
- spremembe shranimo z ukazom
UPDATE.
Osnovna sintaksa za posodobitev zapisa je:
UPDATE imeTabele
SET stolpec1 = novaVrednost1,
stolpec2 = novaVrednost2
WHERE idStolpec = vrednostID;
Pri ukazu UPDATE je zelo pomemben pogoj
WHERE. Če ga izpustimo, se lahko spremenijo vsi
zapisi v tabeli.
Osnovni primer z mysqli
Spodnji zgled posodobi izbran zapis v tabeli
knjige z uporabo pripravljenega stavka.
<?php
define('DB_SERVER', 'localhost');
define('DB_USER', 'uporabnik');
define('DB_PASS', 'skritoGeslo');
define('DB_NAME', 'knjiznica');
// Povezava do podatkovne zbirke
$connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
// Preverjanje povezave
if (!$connection) {
die(
'Povezava s podatkovno zbirko ni vzpostavljena: ' .
mysqli_connect_error() .
' (' . mysqli_connect_errno() . ')'
);
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$id = (int)($_POST['id'] ?? 0);
$priimek = trim($_POST['priimek'] ?? '');
$ime = trim($_POST['ime'] ?? '');
$naslov = trim($_POST['naslov'] ?? '');
$strani = (int)($_POST['strani'] ?? 0);
$cena = (float)($_POST['cena'] ?? 0);
$leto = (int)($_POST['leto'] ?? 0);
$stmt = mysqli_prepare(
$connection,
"UPDATE knjige
SET Priimek_avtorja = ?,
Ime_avtorja = ?,
Naslov = ?,
Strani = ?,
Cena = ?,
Leto = ?
WHERE ID_knjige = ?"
);
mysqli_stmt_bind_param(
$stmt,
'sssidii',
$priimek,
$ime,
$naslov,
$strani,
$cena,
$leto,
$id
);
if (mysqli_stmt_execute($stmt)) {
echo 'Zapis je bil uspešno posodobljen.';
} else {
echo 'Napaka pri posodabljanju zapisa.';
}
mysqli_stmt_close($stmt);
}
mysqli_close($connection);
?>
Osnovni primer s PDO
Tudi z vmesnikom PDO zapise praviloma
posodabljamo s pripravljenimi stavki in vezanimi parametri.
<?php
$streznik = 'localhost';
$baza = 'knjiznica';
$uporabnik = 'uporabnik';
$geslo = 'skritoGeslo';
try {
// Povezava do podatkovne zbirke
$pdo = new PDO("mysql:host=$streznik;dbname=$baza;charset=utf8mb4", $uporabnik, $geslo);
// Vklop izjem pri napakah
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$id = (int)($_POST['id'] ?? 0);
$priimek = trim($_POST['priimek'] ?? '');
$ime = trim($_POST['ime'] ?? '');
$naslov = trim($_POST['naslov'] ?? '');
$strani = (int)($_POST['strani'] ?? 0);
$cena = (float)($_POST['cena'] ?? 0);
$leto = (int)($_POST['leto'] ?? 0);
$stmt = $pdo->prepare(
"UPDATE knjige
SET Priimek_avtorja = :priimek,
Ime_avtorja = :ime,
Naslov = :naslov,
Strani = :strani,
Cena = :cena,
Leto = :leto
WHERE ID_knjige = :id"
);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->bindValue(':priimek', $priimek, PDO::PARAM_STR);
$stmt->bindValue(':ime', $ime, PDO::PARAM_STR);
$stmt->bindValue(':naslov', $naslov, PDO::PARAM_STR);
$stmt->bindValue(':strani', $strani, PDO::PARAM_INT);
$stmt->bindValue(':cena', number_format($cena, 2, '.', ''), PDO::PARAM_STR);
$stmt->bindValue(':leto', $leto, PDO::PARAM_INT);
$stmt->execute();
echo 'Zapis je bil uspešno posodobljen.';
}
}
catch (PDOException $e) {
echo 'Napaka pri posodabljanju zapisa: ' . $e->getMessage();
}
?>
Zaščita obrazca in preverjanje podatkov
Pri urejanju podatkov moramo preveriti, ali je izbrani zapis veljaven, ali so vneseni podatki pravilni in ali je obrazec zaščiten pred zlorabami.
Zato pri resničnih aplikacijah pogosto uporabimo:
- preverjanje ID-ja zapisa,
- validacijo vseh polj obrazca,
- CSRF žeton za zaščito obrazca,
- pripravljene SQL stavke za varen ukaz
UPDATE.
Pomembnosti pri posodabljanju zapisov
- pred urejanjem moramo poznati ID zapisa,
- z ukazom SELECT najprej preberemo obstoječe podatke,
- obrazec navadno predizpolnimo z obstoječimi vrednostmi,
- za shranjevanje uporabimo ukaz UPDATE,
- pogoj WHERE določi, kateri zapis bomo spremenili,
- po uspešni spremembi uporabniku pokažemo posodobljen seznam zapisov.
📘Aplikacija Knjige
V priloženi aplikaciji Knjige je urejanje razdeljeno na tri datoteke. Prva prikaže seznam vseh knjig in povezavo za urejanje izbranega zapisa.
Druga datoteka iz URL parametra prebere id,
preveri njegovo veljavnost, nato pa iz baze prebere en sam
zapis in pripravi predizpolnjen obrazec za urejanje. Obrazec
vsebuje tudi CSRF žeton in skriti ID zapisa.
Tretja datoteka sprejme podatke prek metode POST,
preveri CSRF žeton, validira besedilna in številska polja ter
nato izvede posodobitev z ukazom UPDATE knjige.
Po uspešnem shranjevanju se izpiše še posodobljen seznam knjig
in število urejenih zapisov.
Navodila za izdelavo aplikacije Knjige
- Najprej izpišemo seznam vseh zapisov, ki jih lahko urejamo.
- Ob kliku na povezavo prenesemo
idizbranega zapisa na stran za urejanje. - Iz baze preberemo en sam zapis in z njegovimi podatki predizpolnimo obrazec.
- V obrazec dodamo skriti ID in CSRF žeton.
- Ob oddaji obrazca preverimo veljavnost žetona in podatkov.
- Za posodobitev uporabimo pripravljen SQL stavek UPDATE.
- Po uspešni spremembi uporabniku prikažemo sporočilo in posodobljen seznam zapisov.
Pri učenju je smiselno poznati oba pristopa:
- mysqli za klasično posodabljanje zapisov v tabeli,
- PDO za sodobnejši in varen pristop z vezanimi parametri,
- aplikacijski pristop, kjer so izbor zapisa, obrazec in shranjevanje razdeljeni na več korakov.