Nachrichtensystem programmieren?

3 Antworten

Hi,

lässt sich relativ leicht mit PHP und einer Datenbank umsetzen. Du brauchst ein Skript, das alle Nachrichten auflistet und optional eins, in dem ein Formular eingebettet ist, über das neue Nachrichten gesendet werden können.

Du erstellst eine Datenbank (bspw. "nachrichten") und erstellst darin eine Tabelle, in der die Nachrichten, Absender, Empfänger alle anderen Daten gespeichert werden. Vorne noch ein ID-Feld dazu, optional eine Spalte mit dem Zeitstempel, fertig.

Beim der Ausgabe im Script erstellst du einfach eine Query und lässt dir die Daten per Schleife ausgeben.

PHP

<?php
//Datenbankverbindung
$db = NEW MySQLi->query('localost','dbusername','dbpasswort','datenbank');
//Query $query = $db->query("SELECT * FROM nachrichten WHERE username = 'username' ORDER BY id DESC");
//Array if($query->num_rows != 0) {
 while($row = mysqli_fetch_assoc($query)) {
         $username = $row['username'];
         $recipient = $row['empfaenger'];
         $message = $row['msg'];
         $date = $row['timestamp'];
  }
} ?>

Es sollen natürlich nur die Nachrichten angezeigt werden, die an den eingeloggten User gesendet wurden. Das bestimmst in der Query mit:

WHERE username = 'username'

Der Username könnte aus einer Session stammen.

Last bot nut least erstellst du ein HTML-Formular, das du mit PHP auswertest und dessen Daten du dann in die DB einfügst.

HTML

<html>
 <form method="post">
   <label>Empfänger</label>
   <input type="text" name="recipient" required />

   <label>Nachricht</label>
   <textarea name="message" required></textarea>

   <input type="button" name="sendMsg" value="Nachricht senden" />
 </form>
</html>

PHP

<?php
//Form-Daten in Array
$recipient = $_POST['recipient'];
$msg = $_POST['messsage'];

//Schutz vor MySQL-Injection
$recipient = htmlspecialchars($recipient);
$msg = htmlspecialchars($msg);

//Datenbankverbindung
 
$db = NEW MySQLi->query('localost','dbusername','dbpasswort','datenbank'); $insert = $db->query("INSERT INTO nachrichten (recipient,message) VALUES ($recipient,$msg)"); if(insert != TRUE){ echo "Die Nachricht konnte nicht gesendet werden"; }else{ header("Location: example.php"); } ?>

So könnte das ungefähr aussehen. Besser wäre, du arbeitest gleich von Anfang an mit Prepared Statements und verzichtest auf MySQLi. Dann kannst du dir das Escapen sparen.

//Schutz vor MySQL-Injection

$recipient = htmlspecialchars($recipient);
$msg = htmlspecialchars($msg);

Andernfalls (wenn du MySQLi nutzt) unbedingt escapen!

Infos dazu: https://www.php-einfach.de/mysql-tutorial/php-prepared-statements/

VG
Savix

Woher ich das weiß:Berufserfahrung – Freelance IT Consultant

Die Rede ist von einem Chat?
Ich könnte mir die Datenbankstruktur wie folgt vorstellen:

Ein Gespräch bekommt eine interne ID. Dazu wird gelistet, wer dem Gespräch alles beiwohnt und dazu der Verlauf, den jeder Gesprächspartner als Abgleich bekommt. Schau' auf YouTube einfach nach "php Chat" bzw. "php Chat deutsch". Früher oder später wirst du aber auf englisches Material angewiesen sein, daher würde ich an deiner Stelle nicht zwingend nach einem deutschsprachigen Tutorial suchen.

Wozu nen tutorial? Da reichen dir basics in php, (my)sql und js aus (natürlich noch html)