PHP-Chat Zugangsbegrenzung

Dieses Thema im Forum "Programmieren" wurde erstellt von Bleemer, 13. April 2004.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Bleemer

    Bleemer Byte

    Registriert seit:
    14. Juni 2001
    Beiträge:
    25
    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

    Registriert seit:
    14. Juni 2001
    Beiträge:
    25
    Habe eine Lösung gefunden.
    die function fehlermeldung musste nach oben gestellt werden.
     
  3. Bleemer

    Bleemer Byte

    Registriert seit:
    14. Juni 2001
    Beiträge:
    25
    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

    Registriert seit:
    30. August 2000
    Beiträge:
    178
    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.
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen