tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
Like Tree3Danke
ERLEDIGT
JA
ANTWORTEN
29
ZUGRIFFE
1338
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    as333 as333 ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Beiträge
    139
    Hi Domi,

    danke für die Info.
    Du meintest wohl if()-Schleifen
    Ja damit bekommt man es hin das sich nicht mehr wie zum Beispiel 3 User einloggen können.
    Nur bei mir ist das Problem das dann alle 3 User die online sind automatisch nach 15 Minuten ausgeloggt werden sollen.
    Und diese User natürlich auch eine Benachrichtigung bekommen, dass sie nach einer bestimmten Zeit ausgeloggt werden.

    Ich hatte an die flush() Funktion gedacht, nur hinbekommen habe ich es noch nicht.
     

  2. #17
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Also ich kenne den Aufbau der Tabelle nicht aber wenn du jetzt den Benutzer abmelden willst der bereits am längsten online ist, dann musst du bei der Anmeldung die Uhrzeit/Anmeldezeit mitspeichern.

    Beim Logout suchst du dann den Benutzer mit der frühesten Anmeldezeit:

    PHP-Code:
    DELETE FROM users ORDER BY anmeldezeit ASC LIMIT 1 
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  3. #18
    as333 as333 ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Beiträge
    139
    Ich würde am liebsten den User abmelden der bereits am längsten eingeloggt ist.
    Dieser soll aber noch die Möglichkeit haben innerhalb eines Zeitfensters von 15 Minuten sich selbst abmelden zu können bzw. wenn er das nicht macht erst dann nach 15 Minuten automatisch ausgeloggt werden.

    In meiner Tabelle werden die Einloggzeit, Ausloggzeit, und er UNIX-Timestamp bereits mitgeloggt.
    Dann könnte ich ja wie du geschrieben hast den User mit dem frühesten Timestamp suchen und dann sagen die aktuelle Zeit + 15 Minuten dann wird er ausgeloggt.
    Oder verstehe ich das falsch?
     

  4. #19
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Genau so ist es!
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  5. #20
    as333 as333 ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Beiträge
    139
    Ok danke.
    Dann probiere ich es so.

    Jetzt fällt mir noch ein weiteres Problem auf.
    Der erste User soll ja so lange eingeloggt bleiben können solangen bis sich erst ein vierter User versucht einzuloggen und erst dann plus 15 Minuten ausgeloggt werden.
    Bis jetzt habe ich es so gemacht das bei Aktivität der UNIX-Timestamp aktualisiert wird.
    Nur der dürfte dann ja nicht mehr aktualisiert werden sondern es müsste dann da stehen die versuchte einlogg Zeit des vierten Users + 15 Minuten. Das würde dann ja der auslogg Zeit des ersten Users entsprechen.
    Nur wie kann ich das am besten machen? Habe da an eine if()-Anweisung gedacht weiß nur nicht wie ich die umsetzen kann.
     

  6. #21
    as333 as333 ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Beiträge
    139
    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-Code:

    $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");
        }

     

  7. #22
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Versuche es mit:

    PHP-Code:
    IF (mysql_mun_rows($result) >= 3) {
      
    header ("Location: Logedin.php");

     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  8. #23
    Registriert seit
    Mar 2004
    Beiträge
    1.856
    Blog-Einträge
    2
    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.
     
    Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
    und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!


    MfG, Zod

    __________________
    rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)

  9. #24
    as333 as333 ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Beiträge
    139
    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-Code:
    $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");
        }

     

  10. #25
    Registriert seit
    Mar 2004
    Beiträge
    1.856
    Blog-Einträge
    2
    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.
    Geändert von ZodiacXP (08.08.09 um 19:16 Uhr)
     
    Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
    und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!


    MfG, Zod

    __________________
    rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)

  11. #26
    as333 as333 ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Beiträge
    139
    Hi ZodiacXP,
    Oh ja das mit der toten Programmzeile ist mir noch dazwischengerutscht.
    Nur ich verstehe nicht wieso nicht mit
    PHP-Code:
    $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?
     

  12. #27
    Registriert seit
    Mar 2004
    Beiträge
    1.856
    Blog-Einträge
    2
    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.
     
    Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
    und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!


    MfG, Zod

    __________________
    rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)

  13. #28
    as333 as333 ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Beiträge
    139
    Bei mir wird die Zahl 1 zurückgegeben.
    Mache ich denn bei der Count Funktion einen Fehler?
     

  14. #29
    Registriert seit
    Mar 2004
    Beiträge
    1.856
    Blog-Einträge
    2
    Zitat Zitat von as333 Beitrag anzeigen
    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(*)

    Zitat Zitat von ZodiacXP Beitrag anzeigen
    Verwende COUNT(*), dass ist immer ein Tacken schneller als das selektieren einer Spalte.
    Zitat Zitat von ZodiacXP Beitrag anzeigen
    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
    Geändert von ZodiacXP (08.08.09 um 19:44 Uhr)
     
    Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
    und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!


    MfG, Zod

    __________________
    rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)

  15. #30
    as333 as333 ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Beiträge
    139
    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.
     

Ähnliche Themen

  1. Jomla - User für internen Bereich anlegen
    Von Kalito im Forum Content Management Systeme (CMS)
    Antworten: 0
    Letzter Beitrag: 22.12.10, 13:24
  2. Antworten: 2
    Letzter Beitrag: 08.10.07, 11:38
  3. User Anzahl ausgabe
    Von surffix im Forum Relationale Datenbanksysteme
    Antworten: 16
    Letzter Beitrag: 13.07.02, 15:22
  4. zeitlich begrenzter Login
    Von asmodis! im Forum PHP
    Antworten: 1
    Letzter Beitrag: 30.03.02, 21:17

Stichworte