Einfache Talkbox
Scripte > Attachment
Eine kleine Talkbox zur Unterhaltung
Die Talkbox für eine schnelle Nachricht. Der Benutzer kann einen Namen und eine Nachricht eintragen, diese wird dann sofort auf der Seite angezeigt. Somit kann eine kurze Unterhaltung mit mehren Benutzern geführt werden.
Es kann eine Zeichen-Begrenzung von 'Name', 'Nachricht' und auch die Anzahl der Nachrichten festgelegt werden. Die Nachrichten werden automatsch aktualisiert.
Auch Emojis werden vom aktuellen Browser unterstützt. Diese (😁💔🤣💋🤟🌹😎👍 …) werden nativ dargestellt.
(Mozilla Firefox, Microsoft Edge und Google Chrome) unterstützt — Windows-Taste + . (Punkt)
Die Nachrichten werden in einer Datenbank-Datei 'talkbox.sqt' mit SQLite gespeichert, es wird keine Verbindung zu einem Datenbank-Server benötigt.
ZIP-Datei in ein beliebiges Verzeichnis auf dem PC entpacken und das Verzeichnis "wsX5Obj" auf den Webserver in das Root-Verzeichnis kopieren. Nur den HTML-Code in den BODY-Bereich <body>.....</body> der aufrufende Datei einfügen.
Über die Datei 'talkbox.css' kann die Box der Homepage nach eigenen Bedürfnissen angepasst werden.
Die Datei "talkbox_admin.php" öffne mit einem Editor und trage Dein gewünschtes Admin Passwort ein (Standard: 0000).
Eine demo.html ist beigefügt, die zum Test in das Root-Verzeichnis des Webservers kopiert werden kann bzw. als Einbaubeispiel gedacht ist.
Ein Aufruf zum Test kann dann aber auch über "http://www.domain.tld/wsX5Obj/Obj120_0/talkbox.html" erfolgen.
In die Talkbox kann jeder Benutzer "alles mögliche" hineinschreiben. Deshalb sollten die Nachrichten der Benutzer regelmäßig kontrolliert und auch gelöscht werden.
Zum Löschen der Nachrichten rufe die Datei "talkbox_admin.php" auf oder nutze den Admin-Link (falls mit eingebaut). Damit die Datenbank-Datei nicht zu groß wird, sollten alte Nachrichten auch öfter gelöscht werden. Die Datei "talkbox.sqt" (Datenbank) darf nicht mit einem Texteditor bearbeitet werden, dadurch könnte die Datei unbrauchbar werden! Hierzu gibt es einen DB-Browser für SQL-Lite Dateien zur lokalen Installation: https://sqlitebrowser.org/dl/, bereis x runter geladen.
Code für den <BODY> Bereich
<div align="center" style="text-align: center; font-family: Verdana, Arial, Sans-Serif;">
<iframe
src="wsX5Obj/Obj120_0/talkbox.php" width="240" height="400" style="border: 2px solid #876835;">
</iframe><br><a href="wsX5Obj/Obj120_0/talkbox_admin.php" target="_blank"><small>Admin</small></a>
</div>
Code Datei "talkbox.php"
<?php
// Maximale Zeichen die der Benutzer eingeben darf$maxZeichenName = 25; // 25$maxZeichenNachricht = 125; // 125// Maximale Anzahl der Nachrichten$maxNachrichten = 25; // 25// Nachrichten neu laden nach:$sekunden = 10; // 10// Pfad zur Datenbank$datenbank = "talkbox.sqt";// Datenbank-Datei erstellenif (!file_exists($datenbank)) {
$db = new PDO('sqlite:' . $datenbank);$db->exec("CREATE TABLE talk(id INTEGER PRIMARY KEY,name TEXT,nachricht TEXT)");
} else {
// Verbindungif (!isset($db)) {$db = new PDO('sqlite:' . $datenbank);}
}// Eintragen und Lesenif ($_SERVER["REQUEST_METHOD"] == "POST" ||isset($_GET["lesen"])) {
if (isset($_POST["name"], $_POST["nachricht"])) {
$insert = $db->prepare("INSERT INTO talk( name, nachricht) VALUES (:name, :nachricht)");$insert->execute([":name" => strip_tags($_POST["name"]), ":nachricht" => strip_tags($_POST["nachricht"])]);
}$select = $db->query("SELECT name, nachricht FROM talk ORDER BY id DESC LIMIT " . $maxNachrichten);$nachrichten = $select->fetchAll();foreach ($nachrichten as $nachricht) {
$text = htmlspecialchars($nachricht["nachricht"], ENT_HTML5, 'UTF-8');echo '<div><span class="Obj120_Benutzer">' . htmlspecialchars($nachricht["name"], ENT_HTML5, 'UTF-8') . '</span>: ' .wordwrap($text, 45, "<br>\n", true) . '</div>';
}
exit;
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8"><link rel="stylesheet" href="talkbox.css"/><script>"use strict";var xhr = new XMLHttpRequest();window.addEventListener("DOMContentLoaded", function() {document.getElementById("talk").addEventListener("click", talk);});function talk() {
if (document.getElementById("Obj120_Name").value != "" &&document.getElementById("Obj120_Text").value != "") {
var daten = new FormData(document.getElementsByName("Form")[0]);xhr.open("POST", "talkbox.php");xhr.send(daten);xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE &&xhr.status == 200) {
document.getElementById("Obj120_Name").value="";document.getElementById("Obj120_Text").value="";document.getElementById("Obj120_Nachrichten").innerHTML = xhr.responseText;
}
}
}
}function get() {
xhr.open("GET", "talkbox.php" + "?lesen");xhr.send(null);xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE &&xhr.status == 200) {
document.getElementById("Obj120_Nachrichten").innerHTML = xhr.responseText;
}
}
}get();window.setInterval("get()", (<?=$sekunden;?>*1000));</script>
</head><body>
<form name="Form" id="Obj120">
<div id="Obj120_Caption">🗪 Talkbox</div><div id="Obj120_Nachrichten"></div><input type="text" name="name" id="Obj120_Name" maxlength="<?=$maxZeichenName;?>" placeholder="Name"> <input class="Obj120_Button" type="button" value="»" id="talk" title="Eintragen"><br><textarea name="nachricht" id="Obj120_Text" maxlength="<?=$maxZeichenNachricht;?>" placeholder="Nachricht"></textarea>
</form>
</body>
</html>
Code Datei "talkbox_admin.php"
<?php
// Passwort$passwort = "0000"; // Passwort setzensession_start();// Passwort überprüfenif (isset($_POST["passwort"])) {
if ($_POST["passwort"] == $passwort) {
$_SESSION["user"] = true;
}
}// Abmeldenif (isset($_GET["logout"])) {
session_destroy();
header("Location: talkbox_admin.php");}// DB$db = new PDO('sqlite:' . "talkbox.sqt");$ausgabe = '';// Löschenif ($_SERVER["REQUEST_METHOD"] == "POST") {
if (isset($_POST["option"])) {
$params = $_POST["option"];$placeholder = implode(',', array_fill(0, count($params), '?'));$delete = $db->prepare("DELETE FROM talk WHERE id IN (" . $placeholder . ")");if ($delete->execute($params)) {
$ausgabe .= '<p>✔ Die Nachrichten wurden gelöscht.</p>';
}
}
}// Formular ausgebenif (isset($_SESSION["user"])) {
$ausgabe .= '<form method="post">';$select = $db->query("SELECT id, name, nachricht FROM talk ORDER BY id DESC");$nachrichten = $select->fetchAll();foreach ($nachrichten as $nachricht) {$ausgabe .= '<input type="checkbox" name="option[]" value="' . $nachricht["id"] . '" id="lbl' . $nachricht["id"] . '"> ';$ausgabe .= '<label for="lbl' . $nachricht["id"] . '"><strong>' . $nachricht["name"] . ':</strong> ' . $nachricht["nachricht"] . '</label><br>';}$ausgabe .= '<br><input class="Obj120_Button" type="submit" value="Löschen" title="Ausgewählte Nachrichten löschen"> -<input class="Obj120_Button" type="button" value="Abmelden"
onClick="window.location.href=\'talkbox_admin.php?logout\'" title="Admin abmelden">
</form>';
} else {
// Anmeldung$ausgabe .= '<form method="post"><label>Passwort: <input id="Obj120_Name" type="password" name="passwort" required="required"></label><input class="Obj120_Button" type="submit" value="»"></form>';
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8"><title>Talkbox - Admin</title><link rel="stylesheet" href="talkbox.css"/>
</head><body>
<fieldset>
<legend>Talkbox - Admin</legend><?=$ausgabe;?>
</fieldset>
</body>
</html>
Code Datei "talkbox.css"
html, body { padding: 0px; margin: 0px; background-color: #EEF6E9; }
form#Obj120 { width: 200px; margin: auto; padding: 10px; background-color: #EEF6E9; }
div#Obj120_Caption {
text-align: center;font-family: Tahoma, Arial, Sans-Serif;text-decoration: underline;font-weight: bold;color: #876835;}
div#Obj120_Nachrichten {
width: 200px;height: 200px;margin: 10px 0 25px 0;overflow: auto;font-family: Arial, Tahoma, Sans-Serif;font-size: 12px;}
input#Obj120_Name { width: 140px; border: 1px solid #7c6031; transition: all 0.15s ease-in-out; padding: 3px; }
textarea#Obj120_Text {
width: 190px;height: 80px;border: 1px solid #876835;transition: all 0.15s ease-in-out;margin-top: 6px;padding: 3px;}
input#Obj120_Name:focus,
textarea#Obj120_Text:focus { box-shadow: 0 0 3px #5353A8; font-family: Arial, Tahoma, Sans-Serif; font-size: 12px; }
span.Obj120_Benutzer { color: #f00; }
fieldset { width: 450px; margin: auto; }
legend { color: #876835; font-weight: bold; margin-top: 40px; }
input[type=checkbox]:checked + label { color: #DF0000; }
.Obj120_Button {
color: #876835;font-size: 14px;font-weight: bold;background-color: #EEF6E8;border: 1px solid #876835;border-radius: 3px;padding: 1px 8px 1px 8px;
}
.Obj120_Button:hover { background-color: #B4DA9F; }
» nach oben «