Ergebnis 1 bis 12 von 12

Thema: Mitgliederzählen -> bei mehr als 10 Weiterleiten

  1. #1
    Contao-Urgestein
    Registriert seit
    06.07.2009.
    Beiträge
    1.527

    Standard Mitgliederzählen -> bei mehr als 10 Weiterleiten

    Hallo Community,

    ich hab eine Seite auf der nur registrierte User zugreifen können. Ich möchte jetzt einfach (kleines Script) alle Mitglieder die auf einer bestimmten Seite zugreifen, zählen... und wenn es mehr als 10 sind jeden weiteren User auf eine Info-Seite weiterleiten.

    Könnt ihr mir Helfen?

    Code:
    <?php
    
    $anzahl= count alle aktiven Mitglieder
    
    if ($anzahl > 10 ){
    header( 'Location: tl/index.php/1047' ) ; }
     ?>
    Geändert von Acta (05.02.2014 um 09:38 Uhr)

  2. #2
    Contao-Urgestein
    Registriert seit
    06.07.2009.
    Beiträge
    1.527

    Standard

    Gibt es ein Insertag welches alle User auflistet die aktuell auf einer Seite sind?


    Code:
    <?php
    $user = $this->replaceInsertTags('{{user::username}}');
    
    $anzahl= count($user); 
    if ($anzahl > 1 ){
    header( 'Location: http://vm-map/tl/index.php/index.html' ) ; }
     ?>
    Der Code funktioniert nur für einen user da ja nur der eigene Username ausgegeben wird. Ich bräuchte die, von allen leuten!

  3. #3
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Die Erweiterung lastlogin bietet für jede Zahl die es ausgeben kann einen Insert-Tags an.
    Code:
    Display number of online members
    {{cache_last_login_number_online_members}}
    Im Prinzip bräuchtest Du also nur die Erweiterung installieren und dann diesen Insert-Tag nutzen.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  4. #4
    Contao-Urgestein
    Registriert seit
    06.07.2009.
    Beiträge
    1.527

    Standard

    Jop hab es so probiert!

    Ich müsste das ganze aber auf einer Spezielle Seite beschränken.....

    D.h. nur wieviele leute gerade auf dieser einen Seite online sind.

  5. #5
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    In der Session Tabelle die ich verwende stehen solche Informationen nicht drin.
    Auch das Problem wieviel "gerade" auf der Seite sind, ist nicht einfach einzugrenzen.
    Hierzu müsstest du sehr warscheinlich was eigenes Programmieren.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  6. #6
    Contao-Urgestein
    Registriert seit
    06.07.2009.
    Beiträge
    1.527

    Standard

    Ich hab da schon aktuell was im Einsatz. Aber das ist wohl veraltet zumindest einige Funktionen daraus (ereg_replace)


    Das ganze ist mir aber zu lang *fg* ... ich würde halt gern auf irgendwas aus dem Contao Standart zurückgreifen.

    PHP-Code:
    <?php
    $daten 
    "besucher2.txt";
    $time time();
    $ip getenv("REMOTE_ADDR");
    $ablaufzeit $time "300";
    $pruefung = @file($daten);

    while (list (
    $line_num$line) = @each ($pruefung)) {
    $zeiten explode("&&",$line);
    if(
    $zeiten[0] <= $ablaufzeit) {
    $fp fopen"$daten""r" );
    $contents fread($fpfilesize($daten));
    fclose($fp);
    $line=quotemeta($line);
    $string2 "";
    $replace ereg_replace($line$string2$contents);
    $fh=fopen($daten"w");
    @
    flock($fp,2);
    fputs($fh$replace);
    @
    flock($fp,3);
    fclose($fh);
    }
    }
    $ippruefung = @file($daten);
    while (list (
    $line_num$line) = @each ($ippruefung)) {
    $ips explode("&&",$line);
    if(
    $ips[1] == $ip) {
    $fp fopen"$daten""r" );
    $contents fread($fpfilesize($daten));
    fclose($fp);
    $line=quotemeta($line);
    $string2 "";
    $replace ereg_replace($line$string2$contents);
    $fh=fopen($daten"w");
    @
    flock($fp,2);
    fputs($fh$replace);
    @
    flock($fp,3);
    fclose($fh);
    }
    }
    $fp fopen("$daten""a+");
    flock($fp,2);
    fputs ($fp"$time&&$ip&&\n");
    flock($fp,3);
    fclose ($fp);
    $anzahldaten file($daten);
    $anzahl count($anzahldaten);
    ?> 
    <div class="fpcounter">
    <?php 
    if ($anzahl 10 ){
    header'Location: /tl/index.php/1047' ) ; }
     
    ?> </div>

  7. #7
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Also unter Verwendung des Contao Frameworks und der Beachtung ob angemeldet oder nicht, wäre das nicht kürzer.
    Das angemeldet oder nicht könnte man umgehen, in dem man ein externes Script einbindet zur Zählung in einem Content Element was nur aktiv ist für angemeldete Nutzer.
    Damit würden auch nur diese Nutzer gezählt werden.
    Damit würde dann dein Script sogar gehen, wenn du dieses per {{file::...} Insert-Tag dort einbindest.
    https://contao.org/de/manual/3.2/man...clude-elemente
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  8. #8
    Contao-Urgestein
    Registriert seit
    06.07.2009.
    Beiträge
    1.527

    Standard

    Hi Bugbuster.. ja so hab ich es bisher eingebunden.

    Auf der ganzen Seite (bis auf Login-Seite) kommen nur registrierte ... Wie gesagt das Script läuft. Aber ab PHP 5.3 ist ja ereg_replace veraltet.

    Wenn ich das ganze durch preg_replace ersetzte (ohne was anderes zu tun), dann bekomm ich ne warnung, dass irgend nen Delimiter???? ne andere Einstellung brauch

    PHP-Code:
    Warningpreg_replace(): Delimiter must not be alphanumeric or backslash in D:\xampp\htdocs\tl\templates\counter_die.tpl on line 16 
    Zeile 16 Sieht dabei so aus:

    PHP-Code:
    $replace preg_replace($line$string2$contents); 

  9. #9
    Contao-Urgestein
    Registriert seit
    06.07.2009.
    Beiträge
    1.527

    Standard

    Du hattest ja gesagt, unter Beachtung ob angemeldet oder nicht... wäre es nicht kürzer... Diese Regelung fällt ja raus, da aller Nutzer angemeldet sein müssen, um auf die Seite zugreifen zu können.

    Am liebsten wäre es mir ja dein Tool einzusetzen aber nur auf der jeweiligen Seite zählen zu lassen. So ne art

    IF Seite mit ID 5 dann verwende den Counter ............. Oder noch anders. IF Header = Seite 5 dann fang an zu zählen!

  10. #10
    Contao-Urgestein
    Registriert seit
    06.07.2009.
    Beiträge
    1.527

    Standard

    Hallo Bugbuster, ich stehe gerade kurz auf dem Schlauch^^..

    Ich hab mein Script nun anhand einer Vorlage im Netz komplett umgebau und an eine Mysql Datenbank angebunden.

    PHP-Code:
    <?php
    $link 
    mysql_connect('localhost''benutzername''passwort');
    if (!
    $link) {
        die(
    'Verbindung schlug fehl: ' mysql_error());
    }
    mysql_select_db('tl');
        
    $sql "SELECT
                    COUNT(*) as Anzahl
                FROM
                    Online
                WHERE
                    IP = '"
    .$_SERVER['REMOTE_ADDR']."'
                And 
                URL = '"
    .$_SERVER['REQUEST_URI']."'";
        
    $result mysql_query($sql) OR die(mysql_error());
        
    $row mysql_fetch_assoc($result);
        if(
    $row['Anzahl']) {
            
    // Nur Datum Updaten
            
    $sql "UPDATE
                        Online
                    SET
                        Datum = NOW()
                    WHERE
                        IP = '"
    .$_SERVER['REMOTE_ADDR']."'
                    And 
                URL = '"
    .$_SERVER['REQUEST_URI']."'";
            
    mysql_query($sql) OR die(mysql_error());
        } else {
            
    // Neuer eintra
            
    $sql "INSERT INTO Online
                        (IP, Datum, URL)
                    VALUES
                        ('"
    .$_SERVER['REMOTE_ADDR']."', NOW(),'".$_SERVER['REQUEST_URI']."' )";
            
    mysql_query($sql) OR die(mysql_error());
        }

        
    // alte Datensätze löschen
        
    $sql "DELETE FROM
                    Online
                WHERE
                    DATE_SUB(NOW(), INTERVAL 5 MINUTE) > Datum"
    ;
        
    mysql_query($sql) OR die(mysql_error());

        
    // Anzahl Ausgeben
        
    $sql "SELECT
                    COUNT(*) as Anzahl
                FROM
                    Online
                WHERE
                    URL = '"
    .$_SERVER['REQUEST_URI']."'";
        
    $result mysql_query($sql) OR die(mysql_error());
        
    $row mysql_fetch_assoc($result);
    if (
    $row['Anzahl'] > 10 ){
    header'Location: /tl/index.php/1047' ) ; }
     
    ?>
    Das Script funtkioniert super .... Mein Frage ist lediglich: Gab es nicht in Contao eine Möglichkeit den DatenbankConnect anders zu gestalten?

    Würde nur ungern die Conncetdaten im Script hinterlegen. Das Script wird dann via Inserttag eingebunden.

  11. #11
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Ja das geht garantiert.
    Theoretisch müsstest du sogar die DB Verbindung schon bestehen haben, da dein Script ja mitten in der Verarbeitung includet wird.
    Abfragen in der Art:
    PHP-Code:
    $objDaten Database::getInstance()->prepare("SELECT
                                                    *
                                                  FROM
                                                    tl_tabelle
                                                  WHERE
                                                    id=?"
    )
                                      ->
    execute($meineID); 
    sollten gehen.
    Wie das syntaktisch weiter geht, das musst du dir aus anderen Erweiterungen abschauen.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  12. #12
    Contao-Urgestein
    Registriert seit
    06.07.2009.
    Beiträge
    1.527

    Standard

    Stimmt Datenbank ist automatisch ausgewählt yeah...

    Dann kann ich die anderen abfragen auch einfach so lasseN!

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •