• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[Keine CODE Frage]User-Online Script

Status
Für weitere Antworten geschlossen.

Web_spider

Neues Mitglied
Hi all,
Ich habe nur 1-2 Fragen, und wollte die nur bestätigt haben...
Normalerweise schätzt man ja wie lange der User Online ist, bei einem User-Online-Script, aber könnte man nicht theoretisch mit Ajax, beim onunload
dem Server "mitteilen", dass er den User zu löschen hat, aus der Datenbank...dann wäre es doch zu 100% sicher, ob ein User online ist oder auch nicht, vorausgesetzt der USer hat js an.
Das heißt geht das mit Ajax so ein User-Online-Script, habs jetzt nicht getestet, wollte nur mal fragen, was ihr davon haltet, den Code mach ich schon ;)

Ps: Die Sache mit js ist bei mir klar, denn auf meiner Seite, entscheide ich eh zwischen js-usern, und nicht js-usern.

greez web_spider :D
 
Werbung:
na ja, wenn ich ein user-online-script machen sollte, würde ich in einer SQL-tabelle ein feld "online" erstellen und das beim login auf "1" und beim logout auf "0" setzen. so kann immer herausgefunden werden, wer online ist und wer nicht.

Nils aka XraYSoLo
 
Werbung:
Das mit der Db geht auch net. Weil wenn ich mich nicht auslogge, sondern einfach das Browserfenster schließe, wird der Wert nie auf 0 gesetzt!
 
ja aber so ist das relativ genau...

mein Script funktioniert irgendiwe nicht:
Hauptdatei:

PHP:
<?php    
    //Kongiguration
    include "templates/c_mysql.php";
    
    //Neue Mysql Sitzung
    $db = new mysql_session();
    
    //Ueberpruefen ob ip schon vorhanden ist
    $db->setSql('*', 'statistic', 'ip', $_SERVER['REMOTE_ADDR']);
    $num = $db->getNum();
    
    if($num) //Falls vorhanden ist nur Updaten
    {
        $db->updateDate('statistic', 'ip', $_SERVER['REMOTE_ADDR']);  
    }
    else //Neuen Eintrag schreiben
    {
        $puffer = "'".$_SERVER['REMOTE_ADDR']."',";
        $puffer.= "NOW()";
        $db->insert('statistic', $puffer);
    }
    
    
    //Alte Datebsaetze loeschen
    $db->$sql = "DELETE FROM
                    statistic
                 WHERE
                    DATE_SUB(NOW(), INTERVAL 1 MINUTE) > date
    ";
    mysql_query($db->$sql);
    
    $db->setSql('*', 'statistic');
    $num = $db->getNum(); //Anzahl holen

    //Box kreieren
    $box = "User Online: ".$num."<br />\n";
    $db->disconnect();
          
echo "
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
       \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">\n
<head>\n
<title></title>\n
<meta http-equiv=\"content-type\" content=\"text/html; charset=windows-1250\" />\n
<meta name=\"generator\" content=\"PSPad editor, www.pspad.com\" />\n
<meta http-equiv=\"Content-Script-Type\" content=\"text/javascript\" />\n
<script type=\"text/javascript\" src=\"script/ajax.js\"></script>\n
<script type=\"text/javascript\">\n
function deleteUser()
{\n
var postVars = \"sent=yes\"; \n
sendeHTTPRequest('post', 'delete.php', 'postVars'); \n
}\n
</script>\n
</head>\n
<body onunload=\"deleteUser();\">\n
".$box."
\n
</body>\n
</html> \n";
?>
Die ajax Datei:
Code:
// ajax.js
//
//Biblotheksdatei zum Senden eines Ajax-Requests
//von Richard Jung(web_spider)

function sendeHTTPRequest(methode, url, postVars)
{
    //***************************************************************************//

    //HTTP-Request-Objekt erzeugen
    
    var meinRequest = false;
    if (window.XMLHttpRequest)
    {
        //alle Browser ausser IE 
        meinRequest = new XMLHttpRequest();
        
    }
    else if (window.ActiveXObject)
    {
        //IE Achtung: Versionen beruecksichtigen
        //Versuche bei alten Versionen
        try
        {
            meinRequest = new ActiveXObject("Msxml2.XMLHTTP");
            
        }
        catch (e)
        {
            //Versuche bei IE 5.0 und hoeher
            try 
            {
                meinRequest = new ActiveXObject("Microsoft.XMLHTTP");
            }
            //Hoffnungsloser Fall
            catch (e)
            {}
        }
    }
    
    //***************************************************************************//
    
    //Fehlermeldung ausgeben, falls alles fehlgeschlagen ist
    if (!meinRequest)
    {
        alert("Ihr Browser unterstützt kein Ajax");
    }
    
    //***************************************************************************//
    
    //Request oeffnen und konfigurieren    
    meinRequest.open(methode.toUpperCase(), url, true) 
    
    //***************************************************************************//   
    //Spezialbehandlung fuer einige Mozilla-Versionen    
    if (meinRequest.overrideMimeType)
    {
        meinRequest.overrideMimeType('text/xml');
    }
    
    //***************************************************************************//    
    //Zusaetzlichen Header fuer Post-Requests setzten    
    if (methode.toUpperCase() == 'POST')
    {
        meinRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    }
    
    
    //***************************************************************************//    
    //Request senden
    meinRequest.send(postVars);
    return true;       
}
und zu guter letzt die Datei delete.php
PHP:
<?php
if ($_POST['sent'] == "yes")
{
    $db = mysql_connect("****", "****", "****")
    or die(mysql_error());
    mysql_select_db("db183424299")
    or die(mysql_error());
    $sql = "DELETE FROM 
              statistic
            WHERE 
              ip
            LIKE
              '".$_SERVER['REMOTE_ADDR']."'
    ";
    mysql_query($sql)
    or die(mysql_error());
    mysql_close($db)
    or die(mysql_error());
}
Also nach dem Datenbank priniziep funktioniert es nach 1 Minute wird dann halt der User gelöscht, aber der Ajax Lösch teil funktioniert nicht.

Hoffe auf Hilde ;)

greez web_spider :D
 
Werbung:
Mit der DB geht es.

Bei jedem Seitenzugriff muss nen Eintrag in die Db gemacht werden, bzw überschrieben werden. Wenn die Differenz 5 Mins oder so beträgt, ist der User ausgeloggt ^^
 
ja ich habs sogar nach ner minute aber mein Ajax teil klappt net, mitdem ich 100% präzise arbeiten möchte...
Kannste auch knicken Main Fräunt... warum sag ich ned, als "Erfahrener User" und ganz besonders als Möchtegern-Programmierer müsstest du das selbst wissen. Du Fragst dich warum ich so schroff antworte? Ganz einfach:
Deine Frage war/ist eine rhetorische, wenn du nichtmal selbst drauf kommst warum dein Anliegen garnicht gehen KANN, dann beschäftigst du dich definitiv mit dem falschen Gebiet.
Die Informatik ist eine seeeehr komplexe Wissenschaft, nicht geeignezt für jedermann da man ein gewisses Verständnis für Maschinen mitbringen muss. Hat man das nicht, mutiert man nach einigen Jahren zum sog. "Fachidiot", der nur Sourcecode kopiert und diesen dann als den eigenen ausgibt (klingt komisch, is aber so) ;ugl .
Und nun darf man mich wieder mal gerne bannen, weil die Wahrheit schmerzhaft ist, sich dritte wieder angesprochen fühlen (ein getroffener Hund bellt!) und ich als "kanz kanz pöse" deklariert werde... hihi

Ausserdem sind "100% präzise" und "Computer" Dinge, die sich gegenseitig ausschliessen, das mal so nebenbei angemerkt... aber selbst das hättest du wissen müssen
(zugegeben, man muss ein bisken Erfahrung in Sachen Elektrotechnik haben um sowas zu wissen, darum gehts hier aber auch ned)
 
Zuletzt bearbeitet:
Werbung:
Ah ja -.-
Zur Information bin ich nicht allwissend, und theoretisch würde das System klappten, wenn der USer Javascript aktiviert hat und nicht zu viele User online sind und der Zugriff auf die Datenbank zu stark ist.
 
ein "unsichtbarer" frame der sehr oft refrshed und nichts anderes macht als eine sinnlose anfrage an den server zu schicken, damit der die IP prüfen und checken kann wieviele user online sind würde zwar eine hässliche lösung sein, aber könnte funktionieren.

wenn ich den browser schliesse, dann sendet dein JS ja keine anfrage mehr und deine lösung wäre auch ned exakt, oder arbeitet das JS die funktion ab?
 
Werbung:
onUnload wird auch abgearbeitet, wenn man den Browser schließt.

PS.:
Deine Lösung funktioniert, ich habe so mal bei einem Chat gearbeitet. Es geht Problemlos
 
Also um euch Freunde der nacht mal aufzuklären:

Ihr benutzt Scriptsprachen, die entweder serverside oder clientside sind, sprich ihr habt absolut keine Möglicheit, eine bidirektionale Kommunikation herzustellen, welche aber für diese Aufgabe zwingende Vorraussetzung ist!
Kommt mir jetzt bloss nicht mit Ajax, denn das is nix anderes als ein Riesenhaufen Javascript, also clientside.

Versteht ihr jetzt endlich dad grundlegende Problem? Ihr _KÖNNT_ diese Aufgabe garnicht lösen. Man könnte jetzt eine Pseudo-2-Wege-Kommunikation aufbauen, indem eine Seite (zb. der Client) ständig Daten schickt bzw. irgendetwas abfragt ... das ist aber eine sehr hässliche, unsaubere und zudem auch unsichere, instabile Lösung. Solchen Code sollte man _NIE_ einsetzen, denn das ist das Handwerk von Spaghettiprogrammierern, zulande auch "Scriptkiddies" genannt. Solch ein Code lässt die komplette Branche in Verruf geraten und sorgt immer wieder für graue Haare bei Programmierern, die das dann wieder ausbügeln müssen.

Wenn du diese Aufgabe wirklich lösen willst (anstatt das Problem zu umgehen), dann benutze eine Programmiersprache (und keine Scriptsprache), wie zb. Java oder sogar C.

Bitte nimm Java und c++ aus deiner Signatur raus, offensichtlich weisst du nichtmal was das alles überhaupt ist
(deutlich erkennbar an den Überschriften :-D)
Hättest du tatsächlich ein wenig Einsicht in diese Hochsprachen, dann wäre der komplette Thread für dich überflüssig. Man sollte nicht mit nicht-vorhandenen Fähigkeiten prahlen, das kann nach hinten losgehen

So, und um dir für die Zukunft ein wenig Wissen mitzugeben, und dich hoffentlich von der Spaghettie-Schiene abzubringen:

Maschinencode (0010100100 usw.) :arrow: maschinennaher Code (zb. Assembler) :arrow: Hochsprachen bzw. Programmiersprachen :arrow: Interpretersprachen / Scriptsprachen

umso tiefer man in dieser Struktur geht (nach links also), umso mehr Funktionalität steht zur Verfügung bzw. umso schneller + besser lassen sich Aufgaben erledigen. Wenn man sich mehr nach rechts wendet, dann ist zwar der eigentliche Aufwand sehr klein, aber die Verarbeitungsgeschwindigkeit der Maschine nimmt exponentiell ab (weil: exponentiell mehr Rechenschritte / Befehl) und man hat weniger Funktionen
 
Zuletzt bearbeitet:
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben