1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

PHP-Chat Zugangsbegrenzung

Discussion in 'Programmieren' started by Bleemer, Apr 13, 2004.

Thread Status:
Not open for further replies.
  1. Bleemer

    Bleemer Byte

    Hallo!

    Ich habe ein Problem mit einem PHP-Chat.
    Da ich selber leider eher wenig Ahnung von PHP habe, bin ich an ein Problem gestoßen.
    Der Chat funktioniert so wunderbar, aber ich möchte eine User-Begrenzung einschalten. Ab 30 Benutzern soll

    die Anmeldung nicht mehr möglich sein.
    Mein Problem ist nun die Erfassung der derzeitigen Benutzer.
    Folgendermaßen wird diese zwar schon einmal ermittelt, aber direktes einsetzen funktioniert nicht.
    "
    function chat_online() {
    global $_T_USERS,$v;
    $ergebnis=mysql_query("SELECT COUNT(DISTINCT nick) FROM $_T_USERS WHERE chat_raum>'0'",$v);
    $i=mysql_fetch_array($ergebnis); $chat_gesamt=$i[0];
    if ($chat_gesamt>0) { if ($chat_gesamt==1) { $a="ist 1"; } else { $a="sind ".$chat_gesamt; } }
    else { $a="keine"; }
    echo "<b>Zurzeit ".$a." User online</b><br><br>";
    }

    "

    $_T_USERS ist die UserTabelle
    $v=mysql_connect($_DB_HOST,$_DB_USER,$_DB_PASSWORT);mysql_select_db($_DB_NAME,$v);$sql="USE

    ".$_DB_NAME;mysql_query($sql,$v);



    Die Stelle, wo die Zugangskontrolle eingefügt werden woll liegt in dieser datei (chat.php)

    "

    <?php
    # (c) Viktor Widiker http://www.widiker.de, Berlin 2003
    include ("settings.inc.php");
    include("design/$_DESIGN/functions.inc.php");

    $nick=trim(stripslashes($HTTP_POST_VARS['nick']));
    $passwort=trim(stripslashes($HTTP_POST_VARS['passwort']));
    $chatroom=$HTTP_POST_VARS['chatroom']*1; if ($chatroom<1) { $chatroom=2; }

    if ($nick=="" && $passwort=="") { Header ("Location:index.php"); }
    elseif ($nick=="") { fehlermeldung("Sie haben keinen Nicknamen eingegeben"); }
    elseif ($passwort=="") { fehlermeldung("Sie haben kein Passwort eingegeben"); }
    elseif (!ereg("^[_a-zA-Z0-9-]+$",$nick)) { fehlermeldung("Der Nickname enthält unzulässige Zeichen"); }
    else {
    $ergebnis=mysql_query("SELECT * FROM $_T_CHAT_ROOMS WHERE id='$chatroom'",$v);
    if (mysql_num_rows($ergebnis)!=1) {
    fehlermeldung("Der gewählte Chatraum existiert nicht");
    }
    else {
    $raum=mysql_fetch_object($ergebnis);
    }

    $ergebnis=mysql_query("SELECT * FROM ".$_T_USERS." WHERE nick='".$nick."'",$v);
    $anzahl=mysql_num_rows($ergebnis);
    if ($anzahl==0) {
    # Nick nicht in der Datenbank vorhanden
    fehlermeldung("Der Nickname '".$nick."' befindet sich nicht in der Datenbank");
    }
    elseif ($anzahl==1) {
    # Nick in der Datenbank gefunden
    $row=mysql_fetch_object($ergebnis);
    if ($HTTP_COOKIE_VARS["chatdaten"]!="") {
    # Ich bin schon online
    fehlermeldung("Sie sind schon online");
    }
    elseif ($row->chat_raum!="0") {
    # User ist schon online
    fehlermeldung("User '".$row->nick."' ist schon online");
    }
    elseif ($row->status=="-1") {
    # Account gesperrt
    fehlermeldung("Der Nickname '".$row->nick."' ist gesperrt");
    }
    elseif ($passwort==$row->passwort) {
    # Alles richtig
    # einfach weitermachen, denn bei einer Fehlermledung wird die Ausführung beendet
    }
    else {
    # Passwort falsch
    fehlermeldung("Sie haben falsches Passwort eingegeben");
    }
    }
    else {
    # Sonstiger Fehler
    fehlermeldung("Beim Einloggen ist ein Fehler aufgetreten");
    }

    if ($ XXX >=0) { fehlermeldung("Der Chat ist derzeit voll. Bitte versuchen Sie es gleich erneut"); }
    else {

    # Loginvorgang
    if ($row->status=="0") { mysql_query("UPDATE ".$_T_USERS." SET status='1' WHERE nick='$row->nick' AND

    passwort='$passwort'",$v); }
    $chatdaten="$row->id:$row->nick:$row->passwort";
    $chatdaten=base64_encode("$chatdaten");
    setcookie ("chatdaten","$chatdaten");
    $zeit=date("YmdHis");
    $zeit_s=time();
    mysql_query("UPDATE ".$_T_USERS." SET

    chat_raum='$chatroom',login_chat='".$zeit."',login_raum='".$zeit."',lastip='".$_IP."',refresh='".$zeit_s."

    ' WHERE nick='$row->nick' AND passwort='$passwort'",$v);
    mysql_query("INSERT INTO ".$_T_CHAT_MESSAGES." VALUES (','$chatroom','User \'".$row->nick."\' betritt den

    Raum','".$_CHAT_ROBOTER."',',',','<b>','".$zeit."')",$v);
    echo <<<CHAT
    <HTML>
    <HEAD>
    <TITLE>$_CHAT_NAME</TITLE>
    </HEAD>
    <frameset rows="*,45,0,0" frameborder="no" framespacing="0">
    <frameset cols="*,170" frameborder="no" framespacing="0">
    <frame src="chat_ausgabe.php" frameborder="0" marginheight="0" marginwidth="0" noresize

    scrolling="auto" name="ausgabe"></frame>
    <frame src="chat_online.php" frameborder="0" marginheight="0" marginwidth="0" noresize scrollig="auto"

    name="online"></frame>
    </frameset>
    <frame src="chat_eingabe.php" frameborder="0" marginheight="0" marginwidth="0" noresize scrolling="no"

    name="eingabe"></frame>
    <frame src="chat_lesen.php" frameborder="0" marginheight="0" marginwidth="0" noresize scrolling="no"

    name="lesen"></frame>
    <frame src="chat_schreiben.php" frameborder="0" marginheight="0" marginwidth="0" noresize scrolling="no"

    name="schreiben"></frame>
    </frameset>
    </HTML>
    CHAT;
    }


    ########### FUNKTIONEN ###########
    function fehlermeldung($a) {
    global $_EMAIL_WEBMASTER,$_CHAT_NAME,$headline,$zeile;
    $headline="Community-Chat: Fehler";
    $leiste="<a href='index.php'>$_CHAT_NAME</a> > Fehler";
    seite_anfang($_CHAT_NAME);
    echo "
    $leiste<br><br><h1>Fehler</h1><br>
    <center>
    <br><br><br><br>
    <b>".$a.".</b><br><br>
    Bei Fragen wenden Sie sich an <a href='mailto:".$_EMAIL_WEBMASTER."'>".$_EMAIL_WEBMASTER."</a>
    <br><br><br><br>
    <a href='index.php'>zum Chat</a>
    </center>
    ";
    seite_ende();
    die();
    }

    ?>


    "


    Vor den Loginvorgang habe ich
    if ($ XXX >=0) { fehlermeldung("Der Chat ist derzeit voll. Bitte versuchen Sie es gleich erneut"); }
    else {

    selber eingefügt. Mir fehlt nur eine passende Variable.


    Ich weiss, dass dieses Problem sehr speziell ist, aber vielleicht kennt ja jemand dieses Problem, oder

    versteht die Erfassung der derzeitigen Besucher.
    Der Chat stammt übrigens von http://www.widiker.de und ist ansich prima zu empfehlen.

    Viele Grüße,
    Johannes
     
  2. Bleemer

    Bleemer Byte

    Habe eine Lösung gefunden.
    die function fehlermeldung musste nach oben gestellt werden.
     
  3. Bleemer

    Bleemer Byte

    Ansich würde ich denken, dass "$chat_gesamt" meine benötigte Variable ist. Sie einfach einzusetzen funktioniert jedoch leider nicht.
    So wie du es beschreibst, habe ich es zuvor auch schon probiert (einfach die funktion ohne das echo eingesetzt), aber leider auch ohne erfolg...

    trotzdem danke :)
     
  4. Sumo

    Sumo Kbyte

    Ich hab von PHP selber keine Ahnung. Könnte dir aber einen Tipp geben. Trenne Ausgabe und Berechnung.
    Für function chat_online() heisst das:
    Die Ausgabe
    echo "<b>Zurzeit ".$a." User online</b><br><br>";
    fliegt raus. Stattdessen gibt die Funktion die Anzahl der User im Chat zurück. Dann kannst du die Funktion mehrfach verwenden wann immer du die Anzahl der User brauchst.
    z.B. wieder für die Ausgabe oder eben für deine Überprüfung ob die maximale Anzahl der User erreicht ist.
     
Thread Status:
Not open for further replies.

Share This Page