środa,
Dodawanie rekordów
Aby w pełni prezentowane zrozumieć przykłady, wymagana jest znajomość zagadnień przedstawionych w poprzednich artykułach. Tabela wykorzystana w przykładach jest dostępna do pobrania.
Fromularz HTML
Aby dodawać dane, należy zbudować formularz HTML. Ma on dwa pola typu text do wprowadzenia imienia i nazwiska. Trzeci input to typ submit – przycisk do wysłania formularza. Zastosowana metoda to POST, ponieważ wysłanie formularza wprowadzi trwałe zmiany po stronie serwera.
<form action="" method="post">
<input type="text" name="fname" placeholder="Imię">
<input type="text" name="lname" placeholder="Nazwisko">
<input type="submit" name="t" value="Zapisz">
</form>
Wygląd formularza
Kod PHP
Jeśli istnieje zmienna przesłana z formularzem, wykonywane są operacje, które prowadzą do zapisania danych. Zastosowano tzw. prepared statements, które są odporne na ataki SQL Injection. Za pomocą funkcji mysqli_stmt_init () otrzymano identyfikator instrukcji ($stmt) używany w wywołaniach następnych funkcji. W utworzonym za pomocą mysqli_stmt_prepare() szkielecie zapytania SQL miejsca na zmienne oznaczone są znakiem „?”. Funkcja mysqli_stmt_bind_param() pozwala przypisać w to miejsce wartości, jako drugi argument przyjmuje ciąg znaków (tutaj jest to "ss") określający typy kolejnych argumentów. Oznaczenie "s" oznacza łańcuch znaków, "ss" dwa łańcuchy. Funkcja mysqli_stmt_execute() wykonuje przygotowane zapytanie. Ostatnia instrukcja (header()) przeładowuje stronę.
include 'config.php';
$link = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME);
if(isset($_POST['fname'])) {
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "INSERT INTO names (fname, lname) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $_POST['fname'], $_POST['lname']);
mysqli_stmt_execute($stmt);
header('Location: ' . $_SERVER['PHP_SELF']);
}
Efekt finalny
Obydwa fragmenty kodu należy zawrzeć w jednym skrypcie. Dla wygody użytkownika powinno się także dodać kod wyświetlający dane pobrane z bazy, wtedy od razu widoczny jest efekt dodawania kolejnych rekordów.