DE EN

Laravel Guestbook

Laravel Tutorial Laravel Guestbook

Laravel Guestbook

Willkommen im 2. Teil meines Laravel-Tutorials. Heute geht es um die Darstellung von Datensätzen aus MySQL und wir wollen am Ende in der Lage sein, per Laravel auch Datensätze zu speichern. Wir erstellen ein Gästebuch in Laravel!

Datenbanksetup

Ich gehe davon aus, dass Du schon PHP kannst. Außerdem setze ich voraus, dass Du in der Lage bist, in MySQL Tabellen anzulegen und über die Standard-MySQLi-Funktionen zu befüllen. Das hier ist keine PHP-Einführung und alles, was Du hier liest, habe ich exakt auch so gemacht, um meine kommende Homepage zu realisieren.

Unser Gästebuch soll das Datum des Eintrages, den Usernamen, die Mailadresse, den Kommentar und auch die URL des User erhalten. Wir tragen direkt per SQL schon mal ein paar Datensätze ein, um uns das Gästebuch anzeigen zu lassen und wir schaffen anschließend ein Formular, mit dem man weitere Gästebuch-Einträge hinterlegen kann.

CREATE TABLE `guestbook` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `stamp` int(11) NOT NULL,
 `mail` varchar(50) NOT NULL,
 `url` varchar(50) NOT NULL,
 `name` varchar(50) NOT NULL,
 `message` text NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Über phpMyAdmin kannst Du nun ein paar Einträge hinterlegen.

Datenbank-Setup

Laravel unterstützt diverse Datenbanksysteme: Dazu gehören SQLite, MySQL, PostgreSQL und SQL Server. Ich selbst habe nur Erfahrung mit MySQL bzw. MariaDB. Daher gehe ich auf die anderen Beispiele nicht weiter ein, obwohl das mit ziemlicher Sicherheit genau so funktioniert, wie in meinem Tutorial hier beschrieben.

Laravel muss wissen, welches Datenbank-System es nutzen soll. Öffne dazu die Datei config/database.php und trage deine Zugangsdaten ein.

Der Gästebuch-Controller

Wir nutzen nun eine der Stärken von Laravel. Wir erstellen uns ein PHP-Skript, bei dem sämtliche Aktionen, die so ein Gästebuch haben kann vordefiniert sind. Wir bewegen uns also in unser Projektverzeichnis und führen den aus dem letzten Tutorial bekannten Befehl aus.

php artisan make:controller GuestBook -r

Der Code sieht nun dem HalloWelt-Code aus dem letzten Tutorial sehr ähnlich, was der Tatsache geschuldet ist, dass wir hier den Standard-Resourcen-Code von Laravel erstellen. Wir wollen das Gästebuch anzeichen (index), Daten speichern (Store) und evtl. ja auch bearbeiten (edit/update), insofern sind alle Aktionen zumindest schon einmal vorbereitet.

Ich visualisiere jetzt mal anhand von altem PHP-Code, wie man ein Gästebuch vielleicht früher mal erstellt hätte:

<?php
$DB = new mysqli('localhost','user','passwort','database');

$result = $DB->query("SELECT * FROM guestbook");
while($data = $result->fetch_object()) {
    echo '<br/>Name:' . $data->name;
    echo '<br/>URL:' . $data->url;
    echo '<br/>Message:'. $data->message;
}

Das ist noch relativ gut lesbarer Code. Schwierig wird es dann, wenn ein neues Feld dazu kommt. Dann muss man diese Funktionen überarbeiten, neue Felder hinschreiben, neu formatieren. Die Ausgabe in ein anderes Format als HTML ist hier gar nicht möglich und nicht zuletzt sollte der PHP-Coder auch noch SQL können. Außerdem ist selbst dieser Code schon ziemlich aufgeblasen und ich habe MySQLi als Klassen genutzt. Das selbe sieht in Lavavel übrigens so aus: Wir überarbeiten die INDEX-Aktion unseres Guestbook-Controllers. Außerdem laden wir die DB-Facades.

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use IlluminateSupportFacadesDB;

class GuestBook extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return IlluminateHttpResponse
     */
    public function index()
    {
       $eintraege = DB::table('guestbook')->get();
        return view('guestbook',['eintraege'=>$eintraege])
        
    }

Wirklich neu ist nur dieser Bereich: $eintraege = DB::table('guestbook')->get();
return view('guestbook',['eintraege'=>$eintraege])

Laravael verbindet sich mit der Datenbank und zieht alle Datensätze. Das Array der Datensätze wird an den View namens Guestbook übergeben. Zufälligerweise ist der View hier eine HTML-Seite, also ein blade-Template, daher können wir die Seite ausgeben, wo immer wir wollen. Wir könnten die index-Methode in einem PDF-Modul auch überschreiben und unser Gästebuch direkt als PDF ausgeben. Wir geben nun aber einfach die Gästebucheinträge in einem Blade-Template aus.

<table>
@foreach ($eintraege as $eintrag)
<tr><td>
    {{$eintrag->name}}
</td>
<td>
    {{$eintrag->url or 'Keine Homepage'}}
    
</td>
</tr>
<tr>
    <td colspan="2">
        {{$eintrag->message}}
    </td>
</tr>
@endforeach
</table>

Scheisse, das ist wirklich sehr simpel und man hat hier sogar schon Fallbacks, falls der User gar keine Homepage angegeben hat. Wenn der User versucht hat, HTML mit in seinen Kommentar mit zu übergeben, wurde dies bereits von Laravel gefiltern UND bei der Ausgabe werden die Texte grundsätzlich durch die htmlspecialchars()-Funktionen von PHP durchgejagt. Du musst hier tatsächlich nichts weiter formatieren.

Template-System

Theoretisch wäre jetzt ein guter Punkt, in die Syntax von blade einzusteigen. Aktuell will ich mich aber nur mit User-Input befassen und daher kommt das Templateing von Blade erst im nächsten Tutorial dran.

Gästebucheinträge mit Laravel speichern

Jetzt kommt der Moment, bei dem wir Benutzerinput verarbeiten wollen. Normalerweise ist es bei PHP-Anwendungen so, dass ich jetzt ein Formular schreiben muss. Dieses Formular hat verschiedene $_REQUEST-Felder und je nach erwartetem Datentyp muss ich jetzt verschiedene Checks durchführen, die mindestens folgendes prüfen:

Oldschool: Je nach Umfang des Formulares kann der PHP-Code hier ziemlich unübersichtlich werden. Wir wollen zum Beispiel auf eine Mailadresse prüfen, die aber nur 255 Zeichen lang sein darf oder wir wollen Zahlen erlauben. Nebenbei müssen wir auch noch, je nach verwendetem Datenbank-Modell escapen und nicht zuletzt auch noch irgendwo Fehlermeldungen vorhalten, falls der User Schrott in das Formular einträgt. Ich garantiere dir hiermit feierlich: Du wirst immer wieder irgend etwas vergessen und dein Formular ist dann eventuell sogar noch anfällig für SQL-Injections, XSS-Attacken und sonstige fiese Schweinereien. Wir waren ja schlau und haben unsere Guestbook-Klasse bereits mit Resourcenfunktionen erstellt, daher gibt es die "Store"-Methode schon. Diese müssen wir lediglich überarbeiten.

public function store(Request $request)
{
    $this->validate($request, [
        'user' => 'max:255',
        'email' => 'email'

    ]);

    // The guestbook-post is valid, store in database
}

Man sieht sehr, sehr deutlich folgendes: Wir kümmern uns nicht mehr um mysqli Escapeing, denn das Framework hat uns diese Arbeit netterweise bereits abgenommen. Wir müssen nur noch prüfen, ob das Input, was wir erhalten haben auch der Wert ist, den wir haben möchten.

Gästebuchformular erzeugen

Das Tutorial wird fortgesetzt.


Filed in: laravel,
PDF
Like 0finden das gut
Leider hat hier noch keiner seinen Senf zum Thema abgegeben. Sei du doch der erste. Oder die erste. Oder das letzte.

Teile diesen Artikel, wenn er dir gefallen hat

Facebook Twitter Google+ LinkedIn
powered through tff3