środa,
E14 - PHP: Usuwanie rekordów z bazy danych
Aby w pełni prezentowane zrozumieć przykłady, wymagana jest znajomość zagadnień przedstawionych w poprzednich artykułach: Wprowadzenie do MySQLi, Konkatenacja w PHP, Formularze HTML, Pobieranie rekordów z bazy danych). Tabela wykorzystana w przykładach jest dostępna do pobrania.
Wyświetlanie danych
Wyświetlanie danych zrealizowane zostało podobnie jak w poprzednim materiale. Zasadniczą różnicą jest generowanie formularzy, które umożliwią wskazanie danych do usunięcia. Do wysyłki formularza przyjęto metodę POST, ponieważ jego wysłanie wprowadzi trwałą zmianę po stronie serwera. Identyfikator rekordu do usunięcia umieszczony został jako atrybut value ukrytego (type="hidden") pola formularza.
$mysqli = new mysqli("host", "user", "pass", "database");
$result = $mysqli->query("SELECT fname, lname, nid FROM names ORDER BY lname ASC LIMIT 10");
echo '<table><tr>
<th>First name</th>
<th>Last name</th>
<th> </th>
</tr>';
while( $row = $result->fetch_row()) {
vprintf('<tr><td>%s</td><td>%s</td>
<td><form action="" method="post">
<input type="hidden" name="nid" value="%s">
<input type="submit" name="s" value="Usuń">
</form></td>
</tr>', $row);
}
echo '</table>';
Wyświetlone dane
Imię | Nazwisko | |
---|---|---|
Oren | Aguilar | |
Callum | Barber | |
Vincent | Beach |
Usuwanie rekordu
Ta część skryptu powinna znaleźć się zaraz po nawiązaniu połączenia (new mysqli()). W wierszu drugim następuje kontrola, czy żądanie nie pochodzi z formularza. Z założenia, danym wysłanym przez użytkownika nie powinno się bezgranicznie ufać, dlatego za pomocą funkcji sprintf() wymuszany jest właściwy typ danych (%d). Po wykonaniu zapytania SQL strona zostaje przeładowana na adres ustalony na podstawie zmiennej środowiskowej (getenv("HTTP_REFERER")) – do tej samej lokalizacji, jednak za pomocą metody GET. Instrukcja die() oznacza bezwarunkowe zaprzestanie wykonywania dalszej części skryptu.
$mysqli = new mysqli("host", "user", "pass", "database");
if(isset($_POST['nid'])) {
$sql = sprintf("DELETE FROM names WHERE nid = %d", $_POST['nid']);
$mysqli->query($sql);
header('Location: ' . getenv("HTTP_REFERER"));
die();
}
Pełna implementacja usuwania danych
$mysqli = new mysqli("host", "user", "pass", "database");
if(isset($_POST['nid'])) {
$sql = sprintf("DELETE FROM names WHERE nid = %d", $_POST['nid']);
$mysqli->query($sql);
header('Location: ' . getenv("HTTP_REFERER"));
die();
}
$result = $mysqli->query("SELECT fname, lname, nid FROM names ORDER BY lname ASC LIMIT 10");
echo '<table><tr>
<th>First name</th>
<th>Last name</th>
<th> </th>
</tr>';
while( $row = $result->fetch_row()) {
vprintf('<tr><td>%s</td><td>%s</td>
<td><form action="" method="post">
<input type="hidden" name="nid" value="%s">
<input type="submit" name="s" value="Usuń">
</form></td>
</tr>', $row);
}
echo '</table>';