Andreas: kleiner Chat

Hallo!!!

wollte mal mein kleinen mit PHP geschriebenen Chat posten.
Den ich mir als Übung gefertig habe, zum auspropieren das Skript
als "chat.php" speichern.

<?php
//Ein kleiner Chat!
//von: - Andreas -

function chatoutput()
{
////Zuerst wird auf gesetzen Werten der Variablen geprüft,
////also ob eine Nachricht überhaupt abgesendet wurde!

if (isset($_REQUEST['input']) && $_REQUEST['input'] != "") {

////////Wenn Werte gesetzt sind,
////////wird der Nickname und ein Zeilenumbruch definiert.

$_REQUEST['nick'] = "Nickname: ";
        $breaker = "\n";
    }
////Dann wird eine Textdatei(txt) geöffnet bzw. erstellt.

$textfile = @fopen("text.txt", "a+");

////Und es werden in der Reihenfolge "Nickname, abgesendeter Text,
////und ein Zeilenumbruch" in jeweils eine Zeile der Textdatei geschrieben.
////(Danach wird sie wieder geschlossen.)

fwrite($textfile, $_REQUEST['nick']. $_REQUEST['input']. $breaker);
    fclose($textfile);

////Ab hier wird nun die Textdatei in ein Array geschrieben.

$text = file('text.txt');
    foreach ($text as $line => $output) {
        if ($line < 10) {

////////////Mittels Durchlaufen des Arrays können alle eingegebenen Daten
////////////von der Textdatei per Echo als Chatausgabe ausgegeben werden.

echo $output;
        }
////////Wenn über 10 Zeilen gesendet wurden,
////////wird der Dateizeiger wieder auf den Anfang der Textdatei resetet.
        else {
            @fopen("text.txt", "w+");
            fclose("text.txt");
        }
    }
}
?>
<html>
<head>
<title>My Chat</title>
</head>
<body onLoad="document.chat.input.focus()">
<h1>My Chat</h1>
<form action="chat.php" method="post" name="chat">
<textarea cols="50" rows="10" name="output">
<?php chatoutput(); ?>
</textarea>
<br>
<br>
<input type="text" maxlength="40" name="input" size="30">
<input type="submit" value="Send">
</form>
</body>
</html>

  1. beim hanser verlag gibt es ein buch über php4 von jörg krause (einführung in die webserverprogrammierung) mit einer sehr guten Anleitung wie man einen Chat basierend auf php und javascript erstellt.

    1. beim hanser verlag gibt es ein buch über php4 von jörg krause (einführung in die webserverprogrammierung) mit einer sehr guten Anleitung wie man einen Chat basierend auf php und javascript erstellt.

      Ein Buch, das erklärt, wie man mit einem denkbar ungünstigen Protokoll wie HTTP einen Chat erstellt, kann kein sehr gutes Buch sein.

      1. Hallo,

        Ein Buch, das erklärt, wie man mit einem denkbar ungünstigen Protokoll wie HTTP einen Chat erstellt, kann kein sehr gutes Buch sein.

        Was hat PHP mit HTTP zu tun?

        Grüße aus Barsinghausen,
        Fabian

        --
        "It's easier not to be wise" - < http://www.fabian-transchel.de/kultur/philosophie/ialone/>
        1. Ein Buch, das erklärt, wie man mit einem denkbar ungünstigen Protokoll wie HTTP einen Chat erstellt, kann kein sehr gutes Buch sein.

          Was hat PHP mit HTTP zu tun?

          Du wolltest mich wohl an Schlauheit überbieten, was? Ist Dir leider nicht gelungen, lies Dir nochmal durch, welchen Titel das empfohlene Buch hat. Oder worum es in der ursprünglichen Frage ging.

          1. Hallo,

            Ein Buch, das erklärt, wie man mit einem denkbar ungünstigen Protokoll wie HTTP einen Chat erstellt, kann kein sehr gutes Buch sein.

            Was hat PHP mit HTTP zu tun?

            Du wolltest mich wohl an Schlauheit überbieten, was?

            Nein, ich wollte aufzeigen, dass deine Formulierung unqualifiziert ist, da HTTP als Protokoll mit PHP als _Touring-kompletter_ Programmiersprache absolut nichts zu tun hat. Und dass der Chat über HTTP implementiert werden soll steht bei der Referenz auf das Buch nicht, und das ist alles, was ich beurteilen kann.

            Dass sehr häufig PHP über das Protokoll HTTP zum Erstellen dynmaischer Webapplikationen verwendet wird ändert nichts daran, dass ein Chat in PHP keinesfalls sinnfrei ist, wohl aber, wenn dabei HTTP zum Einsatz kommen soll.

            Ist Dir leider nicht gelungen, lies Dir nochmal durch, welchen Titel das empfohlene Buch hat. Oder worum es in der ursprünglichen Frage ging.

            Der Kontext ist für die Richtigkeit einer These unbedeutend, da sie immer für sich stehend gültig sein muss, oder aber die Vorraussetzungen gennant werden müssen, was _hier_ nicht passiert ist. Füge die notwendige Einschränkung des Gültigkeitsbereiches deiner These hinzu und du hast Recht.

            Grüße aus Barsinghausen,
            Fabian

            --
            "It's easier not to be wise" - < http://www.fabian-transchel.de/kultur/philosophie/ialone/>
            1. Ein Buch, das erklärt, wie man mit einem denkbar ungünstigen Protokoll wie HTTP einen Chat erstellt, kann kein sehr gutes Buch sein.

              Was hat PHP mit HTTP zu tun?

              Du wolltest mich wohl an Schlauheit überbieten, was?

              Und dass der Chat über HTTP implementiert werden soll steht bei der Referenz auf das Buch nicht

              Vor so viel Analphabetismus ergebe ich mich. Du hast vollkommen Recht und kennst mindestens so viele tolle Fremdwörter wie ich.

            2. Hi Fabian,

              mit PHP als _Touring-kompletter_ Programmiersprache

              ja, sie hat tatsächlich etwas von einem Lifestyle-Kombi.

              Grüße,
               Roland

              1. Hi Roland,

                mit PHP als _Touring-kompletter_ Programmiersprache

                ja, sie hat tatsächlich etwas von einem Lifestyle-Kombi.

                *g* In der Sache hat er ja auch Recht, nur eben war seine Formulierung ungenau.

                Nichts fuer ungut.

                Grüße aus Barsinghausen,
                Fabian

                --
                "It's easier not to be wise" - < http://www.fabian-transchel.de/kultur/philosophie/ialone/>
                1. Hi!

                  *g* In der Sache hat er ja auch Recht, nur eben war seine Formulierung ungenau.

                  Aber gut, dass das ausdiskutiert wurde!

                  Grüße
                  Andreas

                  --
                  SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/
                  1. Aber gut, dass das ausdiskutiert wurde!

                    Schwerer Ausnahmefehler! Der Kontext ist für die Richtigkeit einer These unbedeutend! Fügen Sie die notwendige Einschränkung des Gültigkeitsbereiches der These hinzu! BIEPBIEPBIEPERROR!$%&*§#+¬
                    ??!%${

  2. wollte mal mein kleinen mit PHP geschriebenen Chat posten.

    function chatoutput()
    {
    ////Zuerst wird auf gesetzen Werten der Variablen geprüft,
    ////also ob eine Nachricht überhaupt abgesendet wurde!

    if (isset($_REQUEST['input']) && $_REQUEST['input'] != "") {

    ////////Wenn Werte gesetzt sind,
    ////////wird der Nickname und ein Zeilenumbruch definiert.

    $_REQUEST['nick'] = "Nickname: ";

    Kann man da nur mit sich selbst reden?

    $breaker = "\n";
        }
    ////Dann wird eine Textdatei(txt) geöffnet bzw. erstellt.

    $textfile = @fopen("text.txt", "a+");

    Unterlasse es bitte in Deinem eigenen Interesse, Fehlermeldungen gänzlich zu unterdrücken, Fehlermeldungen sind eine Hilfe. Dass Du sie nicht in der ausgegebenen Seite haben willst, ist verständlich, weshalb dieser Ausgabeweg auf gut eingerichteten Servern eigentlich auch ausgeschaltet sein sollte, siehe http://www.php.net/manual/de/ref.errorfunc.php: display_errors ausgeschaltet, log_errors eingeschaltet.

    ////Und es werden in der Reihenfolge "Nickname, abgesendeter Text,
    ////und ein Zeilenumbruch" in jeweils eine Zeile der Textdatei geschrieben.
    ////(Danach wird sie wieder geschlossen.)

    fwrite($textfile, $_REQUEST['nick']. $_REQUEST['input']. $breaker);

    Und warum bist Du Dir so sicher, dass die Datei geöffnet wurde? Eine Fehlerbehandlung hast Du jedenfalls nicht gemacht. Extrem schlecht.
    Außerdem hast Du Dich nicht gegen übermittelte Zeilenumbrüche abgesichert. Die kann man zwar nicht in einem input-Feld eingeben, aber das bedeutet noch lange nicht, dass nicht irgendein Scherzkeks sie trotzdem einschmuggelt.

    fclose($textfile);

    ////Ab hier wird nun die Textdatei in ein Array geschrieben.

    $text = file('text.txt');

    Es ist nicht unbedingt schlau / effizient, dieselbe Datei innerhalb eines Durchlaufs zweimal zu öffnen.

    foreach ($text as $line => $output) {
            if ($line < 10) {

    ////////////Mittels Durchlaufen des Arrays können alle eingegebenen Daten
    ////////////von der Textdatei per Echo als Chatausgabe ausgegeben werden.

    Dummerweise gibst Du immer nur die ersten zehn Zeilen aus, anstatt Dich lieber um die letzten zehn, also die neuesten zu kümmern.

    echo $output;

    Und was passiert, wenn ich als Text '<script type="text/javascript">window.location.href="http://rotten.com";</script>' eingegeben habe? Befasse Dich mit der Funktion htmlentities() und gewöhne Dir an, alles, aber wirklich alles, was von draußen kommt, mit entsprechender Vorsicht zu behandeln.

    }
    ////////Wenn über 10 Zeilen gesendet wurden,
    ////////wird der Dateizeiger wieder auf den Anfang der Textdatei resetet.
            else {
                @fopen("text.txt", "w+");
                fclose("text.txt");

    Jetzt machst Du die Datei zum dritten Mal wieder auf und löscht zudem alle Einträge anstatt nur die ältesten je nach Bedarf rauszuschmeißen.
    Versuche, die Datei nur einmal zu öffnen, indem Du am Anfang alles per file() einliest, die Änderungen an dieser Variablen durchführst und sie abschließend in die Datei zurückschreibst (Tipp: fseek()).

    Noch bequemer wird es, wenn Du die einfachen Datenbankfunktionen aus http://www.php.net/manual/de/ref.dba.php verwendest. Als Schlüssel eignet sich eine fortlaufende Nummer, die mit einem eigenen Schlüssel ("letzterEintrag") natürlich ebenfalls in der Datenbank gespeichert werden kann.