Przejdź do treści

Centrum Kształcenia Zawodowego i Ustawicznego w Mrągowie

E14 - PHP: Usuwanie rekordów z bazy danych

ś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  
OrenAguilar
CallumBarber
VincentBeach

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>';
Artykuł: Szkoła Rycerska

Szkoła Rycerska

Ślubowanie kadetów Oddziału Przygotowania Wojskowego

Kawaleria polska

Słynne szarże polskiej kawalerii

Artykuł: Szarża pod Somosierrą

Szarża pod Somosierrą

Nasze technikum

Technik informatyk

Szkoły dla dorosłych

Nasza szkoła

Pełna oferta edukacyjna

Oferta szkoły