Login-Bereich mit begrenzter User Anzahl

Hi,

ich weiß nicht was ich falsch mache,
aber scheinbar habe ich einen Fehler in den IF-Anweisungen und kann den nicht finden.
Es soll überprüft werden wieviele Leute online sind und wenns mehr als 3 Leute sind soll man zu einer anderen Seite umgeleitet werden.
Nur leider wird man nicht umgeleitet wenn es mehr als 3 Leute sind.


PHP:
$sql = 'SELECT COUNT(`online_user`) as `on` FROM `user` WHERE `online_user` = 1';

if (!$result = mysql_query($sql))
{
    print mysql_error();
}
else
{
    $row = mysql_fetch_assoc($result);
    if ($row['on']<=3)
    {

          header ("Location: Logedin.php");
    }
    else
    {
    header ("Location: Error.php");
    }
}
 
Verwende COUNT(*), dass ist immer ein Tacken schneller als das selektieren einer Spalte.

Und für die SQL-Anweisung an sich reicht mysql_fetch_row, was ebenfalls wieder ein Tacken schneller ist und weniger Speicher braucht. Somit kannst du dir das "AS `on`" auch sparen und mySQL wird ebenfalls entlastet.
 
Hi,

sorry das ich nochmal nachfrage,
aber aus irgendwelchen Gründen will es einfach nicht funktionieren.


In der Datenbank wird mir auch angezeigt wieviele User sich eingeloggt habe, also bei dem Status steht dann jeweils eine "1".
Eigentlich sollten ja die ersten 3 User auf die Logedin.php gelangen und die restlichen eine Fehlermeldung bekommen.


Ich habe jetzt es wie folgt umgeändert:

PHP:
$sql = 'SELECT COUNT(`online_user`) as `on` FROM `user` WHERE `online_user` = 1';

if (!$result = mysql_query($sql))
{
    print mysql_error();
}
else
{
$row = mysql_fetch_assoc($result);
IF (mysql_num_rows($result) <= 3) 
    {

          header ("Location: Logedin.php");
    }
    else
    {
    header ("Location: Error.php");
    }
}
 
Um einiges "verschlimmbessert":

Nochmals zur Performance: Nun gibt es eine tote Programmzeile!
$row = mysql_fetch_assoc($result);

Und wie viele Zeilen (Antworten) werden dir von SQL geliefert wenn du SELECT COUNT(*) machst? Wenn du jemanden fragst wie viele Pferde auf dem Flur stehen, wie lang ist seine Antwort? 3 Zeilen? ;)

Das was da vorher war, war schon gut.
Verwendest du dazu noch mysql_result($result, 0); dann erhälst du die Anzahl der gefundenen Zeilen sehr schnell! (Quelle)

btw: Mit zusammenkopieren fährt man immer schlecht beim Programmieren.
 
Zuletzt bearbeitet:
Hi ZodiacXP,
Oh ja das mit der toten Programmzeile ist mir noch dazwischengerutscht.
Nur ich verstehe nicht wieso nicht mit
PHP:
$sql = 'SELECT COUNT(`online_user`) as `on` FROM `user` WHERE `online_user` = 1';

die Anzahl der Online User gezählt wird.
Was mache ich denn hier falsch?
 
Ist es denn wirklich so, dass dabei die Zahl 0 zurückgegeben wird?

Bitte prüfe das. Wie man an Ergebnisse aus Abfragen dran kommt weist du.
Zur Not hilft dir so etwas wie phpMyAdmin oder ähnliches.
 
Mache ich denn bei der Count Funktion einen Fehler?

Hast du schon wieder COUNT(`user_online`) verwendet?

Wir sind jetzt beim dritten mal, wenn auch indirekt, dass ich dir sage: COUNT(*)

Verwende COUNT(*), dass ist immer ein Tacken schneller als das selektieren einer Spalte.

Und wie viele Zeilen (Antworten) werden dir von SQL geliefert wenn du SELECT COUNT(*) machst? [...]

Verwendest du dazu noch mysql_result($result, 0); dann erhälst du die Anzahl der gefundenen Zeilen sehr schnell! (Quelle)

Mit dem Link im letzten Zitat sogar vierte mal ;)
Schaue was passiert wenn du COUNT(*) benutzt und vergiss das "AS `on`".
Steht dort die korrekte Anzahl, dann lies diese Seite des Threads nochmal und du hast dein Skript.
Und vergleiche diese Anzahl mit der tatsächlichen. Count lügt erst bei sehr sehr vielen Datensätzen.

Wenn da steht "1" dann ist auch nur eine 1 drin ;)
 
Zuletzt bearbeitet:
Hi Zodiac,

sorry für den falschen Code.
Hab aus versehen den falsch Code gepostet.
Habe nur Count(*) verwendet.

Den Link hatte ich total übersehen.
Aber jetzt klappt es.
Trotzdem vielen vielen Dank für die Bemühungen.
 
Zurück