$id = $_POST['hidden']; // -> Session id
Mach das nicht.
Man könnte hier per (zB) curl eine POST-Request absenden und jede beliebige SESSION-id mitgeben.
Besser:
$id = $_SESSION['id'];
Wenn ich jetzt per curl einen Beitrag absenden will, muss ich mir die Mühe machen Cookies mitzuschreiben.
Und ich komme immernoch nicht weiter, weil ich nicht eingeloggt bin.
Müsste also auch noch den Login per curl durchlaufen.
Und genau hier bist Du sicher, dass nur ein Authentifizierter User die Möglichkeit hat, einen Beitrag zu posten.
foreach ($fetchAll as $beitraege) {
echo '<article class="userbeitraege">';
echo '<p>Gepostet von <a href="#">' . $beitraege['username'] .'</a></p>';
echo '<p>' . $beitraege['beitrag'] . '</p>';
echo "</article>";
}
Auch wenn die Daten in Deiner db liegen - es sind Userdaten.
Nur, weil sie schon in der db sind, heißt das nicht, dass sie sicher sind. Im Prinzip sind auszugebende Daten (egal woher) immer zu maskieren.
htmlspecialchars() ist neu:
foreach ($fetchAll as $beitraege) {
echo '<article class="userbeitraege">';
echo '<p>Gepostet von <a href="#">' . htmlspecialchars($beitraege['username']) .'</a></p>';
echo '<p>' . htmlspecialchars($beitraege['beitrag']) . '</p>';
echo "</article>";
}
Du kannst das mal testen, in dem Du das hier mal manuell in deine db schreibst (zB ins feld 'beitrag'): <script>alert('ich hab mich ion deine db geschlichen :p')</script>
Ohne htmlspecialchars wird der Browser den JS code ausführen.
Um den Beitrag, der gerade gespeichert wurde, mit in die Liste zu bekommen, musst Du die Beiträge erst nach der Beitragerstellung laden.
- lade User aus der db
- speichere neuen Beitrag des Users
- lade alle Beiträge
Zur Tabelle:
Es gibt viele Wege. Vorallem auch kompliziertere zB mit Versionen des Beitrags. Aber das würde hier den Rahmen sprengen.
Grundlegendes sollte aber immer dabei sein:
- wer (ident - user id)
- was (beitrag)
- wann (datum|created_at)
Später kannst Du das erweitern. Zb wenn Der User seinen Beitrag editieren kann|darf, dann erweiterst Du die tabelle um updated_at.
Evtl willst Du als Admin auch mal Beiträge entfernen. Dann köntest Du ein Feld is_active (0 oder 1) hinzufügen.
Usw.