User-Online-Counter

Ich habe das Script gerade mal getestet, sobald die beiden Zeilen wie folgt geändert werden:
PHP:
while ($ergebnis2 = mysql_fetch_array($result1))
PHP:
$online = mysql_num_rows($ergebnis3);

Funktioniert es bei mir ohne Probleme.

Jedoch noch ein Tip, das Array welches von der Funktion mysql_fetch_array zurück geliefert wird, kann auch als Assoziatives Array behandelt werden.
PHP:
if ($ergebnis2[1] == $ip) { // Alt
if ($ergebnis2['ip'] == $ip) { // Neu
Dies hatt den entscheidenden Vorteil, wenn du die Tabelle änderst und die Spalte IP nichtmehr an der zweiten Stelle steht, würdest du eine Falsche Spalte auslesen.
 
Ich habe das Script gerade mal getestet, sobald die beiden Zeilen wie folgt geändert werden:
PHP:
while ($ergebnis2 = mysql_fetch_array($result1))
PHP:
$online = mysql_num_rows($ergebnis3);

Funktioniert es bei mir ohne Probleme.

Jedoch noch ein Tip, das Array welches von der Funktion mysql_fetch_array zurück geliefert wird, kann auch als Assoziatives Array behandelt werden.
PHP:
if ($ergebnis2[1] == $ip) { // Alt
if ($ergebnis2['ip'] == $ip) { // Neu
Dies hatt den entscheidenden Vorteil, wenn du die Tabelle änderst und die Spalte IP nichtmehr an der zweiten Stelle steht, würdest du eine Falsche Spalte auslesen.


Danke dir vielmals, habe alles so geändert wie du es geschrieben hast.
Habe die Fehlermeldungen immer noch.
Keine Ahnung was da bei mir nicht stimmt.
 
PHP:
<?php
mysql_connect('localhost', '###', '###');
mysql_select_db('####');

$ip = $_SERVER['REMOTE_ADDR'];
$where = $_SERVER['REQUEST_URI'];
$timestamp = time();
$timeout = 5;
$noofrows = false;

if(mysql_num_rows(mysql_query("SELECT * FROM usersonline WHERE ip='$ip'")))
	$noofrows = true;

if ($noofrows)
    mysql_query("UPDATE usersonline SET timestamp = '$timestamp', url = '$where' WHERE ip = '$ip'");
else
    mysql_query("INSERT INTO usersonline (ip, timestamp, url) VALUES ('$ip', '$timestamp', '$where')");

$alt = $timestamp - $timeout;
mysql_query("DELETE FROM usersonline WHERE timestamp < '$alt'");

$ergebnis3 = mysql_query("SELECT DISTINCT ip FROM usersonline");
$online = mysql_num_rows($ergebnis3); // Fehlerzeile 2 

if ($online == 1) {
    echo "$online user online";
} else {
    echo "$online users online";
}
?>

Ok, nochmal etwas um geschrieben und komplett wie ich es hier gerade benutze. Wenn das nicht funktioniert, weiß ich leider auch nicht weiter ;)
 
PHP:
<?php
mysql_connect('localhost', '###', '###');
mysql_select_db('####');

$ip = $_SERVER['REMOTE_ADDR'];
$where = $_SERVER['REQUEST_URI'];
$timestamp = time();
$timeout = 5;
$noofrows = false;

if(mysql_num_rows(mysql_query("SELECT * FROM usersonline WHERE ip='$ip'")))
	$noofrows = true;

if ($noofrows)
    mysql_query("UPDATE usersonline SET timestamp = '$timestamp', url = '$where' WHERE ip = '$ip'");
else
    mysql_query("INSERT INTO usersonline (ip, timestamp, url) VALUES ('$ip', '$timestamp', '$where')");

$alt = $timestamp - $timeout;
mysql_query("DELETE FROM usersonline WHERE timestamp < '$alt'");

$ergebnis3 = mysql_query("SELECT DISTINCT ip FROM usersonline");
$online = mysql_num_rows($ergebnis3); // Fehlerzeile 2 

if ($online == 1) {
    echo "$online user online";
} else {
    echo "$online users online";
}
?>

Ok, nochmal etwas um geschrieben und komplett wie ich es hier gerade benutze. Wenn das nicht funktioniert, weiß ich leider auch nicht weiter ;)




Danke @trage für deine Bemühung, Aber ich habe die Fehler immer noch, und zwar
genau da, wo man mysql_num_rows stehen hat.
PHP:
<?php
mysql_connect('localhost', '###', '###');
mysql_select_db('####');

$ip = $_SERVER['REMOTE_ADDR'];
$where = $_SERVER['REQUEST_URI'];
$timestamp = time();
$timeout = 5;
$noofrows = false;

if(mysql_num_rows(mysql_query("SELECT * FROM usersonline WHERE ip='$ip'"))) //Fehlerzeile 1
    $noofrows = true;

if ($noofrows)
    mysql_query("UPDATE usersonline SET timestamp = '$timestamp', url = '$where' WHERE ip = '$ip'");
else
    mysql_query("INSERT INTO usersonline (ip, timestamp, url) VALUES ('$ip', '$timestamp', '$where')");

$alt = $timestamp - $timeout;
mysql_query("DELETE FROM usersonline WHERE timestamp < '$alt'");

$ergebnis3 = mysql_query("SELECT DISTINCT ip FROM usersonline");
$online = mysql_num_rows($ergebnis3); // Fehlerzeile 2 

if ($online == 1) {
    echo "$online user online";
} else {
    echo "$online users online";
}
?>
 
Was für ein Fehler hast du denn jetzt? Ein Parse Error oder ein not valikd MySql Result? Beim Result, bau halt mysql_error().
 
Guten Morgen
Der 1.Fehler ist : mysql_num_rows(): supplied argument is not a valid MySQL result resource
Der 2. Fehler ist : mysql_num_rows(): supplied argument is not a valid MySQL result resource

Wenn ich das or echo mysql_error(); einfüge, bekomme ich ein Parse error
 
Zuletzt bearbeitet:
Der 1.Fehler ist : mysql_num_rows(): supplied argument is not a valid MySQL result resource
Der 2. Fehler ist : mysql_num_rows(): supplied argument is not a valid MySQL result resource
Bist du schon saftmeisters Empfehlung gefolgt, das im PHP-Forum als "Wichtig" markierte und oben angeheftete Thema ("Sticky-Post") Häufig auftretende Fehler zu lesen?

Darin erläutert Markus aka Gumbo die Bedeutung, sowie die Ursache dieser Fehlermeldung, und zeigt die Lösung auf.

mfg Maik
 
@ Maik
Ja, das Thema ("Sticky-Post") habe ich mir schon durchgelesen, jedoch muss ich zu meiner Schande gestehen, daß ich da noch nicht so richtig den Durchblick habe.
Ich muss gestehen, das ich erst vor 4 Wochen mit php angefangen habe.




@ saftmeister
Ich hoffe das ich es am richtigen Ort eingefügt habe :-(


PHP:
$ip = $_SERVER['REMOTE_ADDR'];
$where = $_SERVER['REQUEST_URI'];
$timestamp = time();
$timeout = 300;
$noofrows = 0;

$result1 = mysql_query("SELECT * FROM usersonline") or echo mysql_error();
    while ($ergebnis2 = mysql_fetch_array($result1))  // Fehlerzeile 1
{
    if ($ergebnis2['ip'] == $ip) {
        $noofrows = 1;
    }
}

if ($noofrows == 1) {
    mysql_query("UPDATE usersonline SET timestamp = '$timestamp', url = '$where' WHERE ip = '$ip'");
}

if ($noofrows == 0) {
    mysql_query("INSERT INTO usersonline (ip, timestamp, url) VALUES ('$ip', '$timestamp', '$where')");
}

$alt = $timestamp-$timeout;
mysql_query("DELETE FROM usersonline WHERE timestamp < '$alt'");

$ergebnis3 = mysql_query("SELECT DISTINCT ip FROM usersonline");
 $online = mysql_num_rows($ergebnis3); // Fehlerzeile 2 

if ($online == 1) {
    echo "$online user online";
} else {
    echo "$online users online";
}
 
Zurück