SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Das Zend Framework

Das Zend Framework zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 27.11.2004, 14:25:34
KiKoN KiKoN ist offline
Anfänger
 
Registriert seit: Oct 2004
Beiträge: 25
Probleme bei nem user online Script

Hi

Ich habe ein Code Schnipsel umgeformt was anzeigt weviel User auf meine Seite online sind.
Ich hab das ein bissel umgeschrieben.
So das nur angemeldete User bei mein kleines cms als online angezeigt. Also keine Gäste, nur registrierte user.

Folgendes ist dabei rausgekommen:

PHP-Code:
$online_time=600;                // Zeit für wie lange ein User als online gezählt werden
                                // soll (in sec - 600 = 10min)
//neuen besucher registrieren (mit ip und zeit)
function insert_new(){
 global 
$conn;
 global 
$pid;
    
mysql_query("INSERT INTO users (ip, lastact) VALUES ('".$_SERVER[REMOTE_ADDR]."', '".time()."') WHERE ID='$pid'");
    
$query=mysql_query("SELECT * FROM counter_count");
    
$count=mysql_fetch_object($query);
    
$count_query=mysql_query("UPDATE counter_count SET count='".($count->count+1)."'");
}
//besucherzahl ansehen
function see(){
 global 
$conn;

    
$query=mysql_query("SELECT * FROM counter_count");
    
$see=mysql_fetch_object($query);
    echo 
$see->count;
}
//checken, ob der aktuelle besuche mit seiner ip schon registriert ist.
//wenn nicht, dann wird funktion insert_new() aufgerufen, welche ihn registriert
function check(){
 global 
$conn;

    
$query=mysql_query("SELECT * FROM users WHERE ip='".$_SERVER[REMOTE_ADDR]."'");
    
$data=mysql_fetch_object($query);
    if(!
$data->ip){
        
insert_new();
    }
}
//hier wird die onlinezeit des aktuellen besuchers aktualsiert, damit die
//online anzeige immer up to date ist
function update(){
 global 
$conn;
    
mysql_query("UPDATE users SET lastact='".time()."' WHERE ip='".$_SERVER[REMOTE_ADDR]."'");
}
//mit dieser funktion wird die anzahl der aktuell als online zählenden user
//angezeigt
function online(){
 global 
$conn;

    
$query=mysql_query("SELECT * FROM users WHERE lastact=".(time()-$online_time));
    if(
$query){
        
$online=mysql_num_rows($query);
    }
    if(
$online 1){ $online=1; }
    echo 
$online;

Für die MySQL Datenbank hab ich folgende Zeilen genommen:
PHP-Code:
CREATE TABLE counter_count 
id int(11NOT NULL auto_increment
count int(10NOT NULL default '0'
PRIMARY KEY (id
TYPE=MyISAM

// Dann noch zwei weitere zeilen in die Tabelle users eingefügt und zwar folgende:
ip varchar(20NOT NULL default ''
lastact varchar(20NOT NULL default '' 
Ausgeben tu ich das wie folgt:
PHP-Code:
check();
update();
echo 
"besucher";
see();
echo 
"
online:"
;
online(); 
Aber das will alles nicht so richtig funktionieren.
geht ich auf die Seite steht da immer folgendes: besucher online:1
An sich ja logisch... nur steht da immer das da nur ein User online ist, obwohl es mehr sein müssten.
Und dann gib es auch noch Sachen mit der Datenbank.
Die Spalten ip und lastact in der Tabelle users ist überall immer leer.
Und auch in der tabelle counter_count hat 0 Zeilen
Kann da wer die Fehler im Script entdeckte :|


Achja die varible $pid die abgefragt wird, ist die UserID die überall immer ermittelt wird.
und das $conn besteht aus diesen zeilen:
PHP-Code:
$conn=mysql_connect($db_host,$db_user,$db_passwort);
mysql_select_db($db,$conn); 

Ps.: Rechtschreibfehler ;)
Mit Zitat antworten
  #2  
Alt 27.11.2004, 15:33:09
chris17 chris17 ist offline
Senior Member
 
Registriert seit: Apr 2003
Alter: 54
Beiträge: 1.236
Hallo,

schau Dir diese Zeile mal ganz genau an...
PHP-Code:
//...
mysql_query("INSERT INTO
                 users (ip, lastact)
             VALUES
                 ('"
.$_SERVER['REMOTE_ADDR']."', '".time()."')
             WHERE ID='$pid'"
);
//... 
Fällt Dir was auf?

Was immer hilfreich ist (während der Entwicklung!) -> mysql_query(...) or die (mysql_error());

Grüße

P.S.: Schreib besser $_SERVER['REMOTE_ADDR'] -> ''
Mit Zitat antworten
  #3  
Alt 27.11.2004, 17:36:46
KiKoN KiKoN ist offline
Anfänger
 
Registriert seit: Oct 2004
Beiträge: 25
Also mir fällt da ehrlich gesagt nichts auf :|
Mit Zitat antworten
  #4  
Alt 27.11.2004, 19:54:04
chris17 chris17 ist offline
Senior Member
 
Registriert seit: Apr 2003
Alter: 54
Beiträge: 1.236
Ok, was bewirkt eine "WHERE-Klausel" bei einem INSERT? ;-)

P.S.: Hast Du or die (mysql_error()) eingefügt?
Mit Zitat antworten
  #5  
Alt 27.11.2004, 23:03:11
KiKoN KiKoN ist offline
Anfänger
 
Registriert seit: Oct 2004
Beiträge: 25
ok hab das mal gemacht mit den mysql_error und jetzt kommt auch was raus worauf du hindeutest^^
Folgende Fehlermeldung kommt:
PHP-Code:
You have an error in your SQL syntaxCheck the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ID='2'' at line 1 
Aber ich weiß nicht wie ich das Problem lösen soll :|
Er soll ja die ip und lastact in die spalte des jeweiliegen users einfügen. Wenn das nicht mit WHERE geht, wie dann?
Mit Zitat antworten
  #6  
Alt 27.11.2004, 23:13:42
chris17 chris17 ist offline
Senior Member
 
Registriert seit: Apr 2003
Alter: 54
Beiträge: 1.236
Du hast das Ganze in die Funktion insert_new() gepackt.
D.h. Du willst einen neuen Datensatz anlegen... -> Lass einfach die WHERE-Klausel weg.

WHERE wird in Verbindung mit UPDATE verwendet.

Grüße
Mit Zitat antworten
  #7  
Alt 27.11.2004, 23:29:59
KiKoN KiKoN ist offline
Anfänger
 
Registriert seit: Oct 2004
Beiträge: 25
Ah jetzt weiß ich wo der Denkfehler war.
Klar... insert into hat da ja überhaupt nichts zu suchen. update muss da hin :)
Danke :)
Hab das jetzt geändert und es scheint zu funzen.
Wenn doch noch was is meld ich mich wieder^^"
Mit Zitat antworten
  #8  
Alt 27.11.2004, 23:57:09
KiKoN KiKoN ist offline
Anfänger
 
Registriert seit: Oct 2004
Beiträge: 25
ok da is doch noch ein kleines prob :|
die ip und lastact wird jetzt ja wunderbar in die zeilen der users eingetragen.
nur die online anzeige bleibt immer bei 1 stehen :|
Gibt es nicht irgendwie ne andere möglichkeit den counter zu zählen?
Mit Zitat antworten
  #9  
Alt 28.11.2004, 10:18:12
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
Zum einen würde ich >= statt = als Vergleichsoperator in deinem Query in der Funktion online() benutzen. Und zum Anderen ist es schneller mit COUNT() anstatt mit mysql_num_rows() zu arbeiten. Außerdem war die Variable $online_time in der Funktion online() gar nicht bekannt. Du musst diese Variable also entweder als Parameter übergeben, in der Funktion definieren oder sie hier mit global holen:
PHP-Code:
<?php
    
function online()
    {
        global
            
$conn;
        
$online_time 300;

        
$sql "SELECT
                    COUNT(ip) AS anzahl
                FROM
                    users
                WHERE
                    lastact >= " 
. (time() - $online_time);
        
$result mysql_query($sql);
        
$row mysql_fetch_object($result);
        return 
$row->anzahl;
    }
?>
Mit Zitat antworten
  #10  
Alt 28.11.2004, 10:48:40
KiKoN KiKoN ist offline
Anfänger
 
Registriert seit: Oct 2004
Beiträge: 25
ok ich hab deins mal versucht.
Nur das geht auch nicht so ganz :|
Wenn ich die Seite aufrufe steht a nur noch: besucher online
sonst nichts.
hab unter dem return mal ein echo $row; eingefügt, aber kommt das selbe dabei raus.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:08:07 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.


© 2001-2020 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt