Counter auf HP

  • Halo


    Ich habe mir einen Counter für meine Homepage zusammengebastelt, allerdings zählt dieser bei wiederholtem Seitenaufruf.


    Ich hätte gern, dass dieser Zähler so zählt, dass dieser beim wiederholtem Aufrufen nicht zählt, aber wenn der Nutzer z. B. eine Stunde wiederkommt, dann wieder zählt.


    Versteht ihr mein Anliegen?


    hier mein Quelltext (Auszug)


    ***SQL***


    CREATE TABLE IF NOT EXISTS `Zaehler_hp` (
    `Zaehler` int(11) NOT NULL auto_increment,
    `computer_id` varchar(20) NOT NULL,
    `Betriebssystem` varchar(20) NOT NULL,
    `Browser` varchar(20) NOT NULL,
    `Transaktionsdatum` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY KEY (`Zaehler`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=89 ;


    ***ENDE SQL***



    mysql_query("INSERT INTO Zaehler_hp (computer_id, Betriebssystem, Browser) VALUES
    ('$ip_addr','$os','$browser')")
    or die("Anfrage nicht erfolgreich, weil vielleicht schon einen Fragebogen mit der IP $ip_addr wurde " . mysql_error());


    //AnzahlEinträge


    $sql = "SELECT * FROM Zaehler_hp";



    $adressen_query = mysql_query($sql) or die("Anfrage nicht erfolgreich " . mysql_error());


    $anzahl = mysql_num_rows($adressen_query);{


    echo "<p>Anzahl der Zugriffe: 0 0 1 $anzahl</p>";}?><a href="counter.php" target=_blank>Statistik Zugriffe auf Startseite</a>
    <?php
    mysql_close($connection);
    ?>



    Liebe Grüße


    Stephie

  • Ok,


    Am besten du schaust dir mal im Tutorial den teil zu den Cookies an.
    Damit lässt es sich ganz gut lösen.


    Oder du sätzt eine IP sperre ein.


    Dann bäuchtest du eine tabelle die so ausehen sollte.


    Code
    CREATE TABLE IF NOT EXISTS `ip_sperre` (
      `id` int(32) NOT NULL AUTO_INCREMENT,
      `user_ip` char(16) NOT NULL,
      `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      KEY `user_ip` (`user_ip`,`time`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


    Und dann schreibst du eine Abfrage nach


    Code
    "SELECT user_ip FROM ip_sperre WHERE ip = ".$REMOTE_ADDR." LIMIT 1"


    Überprüft ob die IP bereitzs eingetragen ist. Falls ja zählst du nicht hoch. Wenn doch dann wird hochgezählt. Und die IP in die ip_sperre eingetragen.


    Bei dem feld Time musst du selbst nichts eintragen, da dort bei jedem neuen eintrag automatisch der momentane Timestampe eingetragen wird.


    Dann baust du darunter noch einen Querry der die einträge wieder löscht.


    Code
    "DELET FROM ip_sperre WHERE time > ".time()-3600.""


    das time() enthält den momentanen Timestamp, und die 3600 sind die secunden die abgezogen werden also eine Stunde. Somit würde nur jede stunde der gleiche besucher hochgezählt.


    ** Ich habe keine ahnung ob ich das so gut erklären kann. wie gesagt, falls fragen sind helfe ich gerne weiter.


    Greetz TimTim

  • So, habe mir mal deine Querrys angeschaut. Die sind so nicht schön.



    1. Warum schreibst du in die Couter TB jeden user hinein. Das sind doch auf zeit viel zu viele daten.


    2. Warum machst du Select * wen du ledigich die anzahl der einträge haben willst.


    3. Für was brauchst du bei einem counter die info über betriebssystem, und browser.


    Man sollte immer angeben welche spalten man anspricht und nicht * benutzen auch wenn man alle auslesen will.
    Wen die Tabellen größer werden und du alle abfragen so schreibst, sind 60% der verbrauchten leistung verschwändet, machen die DB langsamer und lässt den MySQL server leichter fehler ausgeben.


    Ich glaube das wird selten bei Tutorialen angesprochen ist aber sehr wichtig denke ich.


    Vielleicht solltest du dir doch lieber ein wenig mehr zeit nehmen um den ganzen php grundteil zu lernen.


    Ich kann mir vorstellen das deine scripte recht große sicherheitslücken haben.


    Am anfang ist das alles eben recht komplieziert, aber das wird mit der zeit schon =).


    Greetz TimTim

  • aber kein Erfolg LEIDER


    Hier mein Auszug PHP:



    //Ausgaben
    echo "<b>IP-Adresse : </b> $ip_addr<br>";
    echo "<b>Betriebssystem : </b> $os<br>";
    echo "<b>Browser: </b> $browser<br>";



    mysql_query("INSERT INTO Zaehler_hp (computer_id, Betriebssystem, Browser) VALUES
    ('$ip_addr','$os','$browser')") or die("Anfrage nicht erfolgreich" . mysql_error());





    $sql =
    "SELECT * FROM Zaehler_hp WHERE computer_ip = ".$REMOTE_ADDR." LIMIT 1";



    $adressen_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");


    $anzahl = mysql_num_rows($adressen_query);


    mysql_query("DELET FROM Zaehler_hp WHERE Transaktionsdatum > .TIMESTAMP()-100. ");



    mysql_close($connection);


    ?>
    <h4>
    <?php
    echo "Besucher seit 12.01.2010 : $anzahl";
    ?>
    und bitte hier meine Startseite HP: <!-- m --><a class="postlink" href="http://www.stephie-schmidt.de/index_Test.php">http://www.stephie-schmidt.de/index_Test.php</a><!-- m -->


    Statt "Anfrage nicht erfolgreich" müsste der Zählerstand kommen.


    Ganz liebe Grüße
    Stephie

  • Dann sollten wir mal über die Debbuging möglichkeiten reden.


    PHP hat dort einige hilfreiche funktionen.


    Zum sehen ob PHP fehler ausgibt die wir nicht sehen, schreiben wir ganz oben in die Datei


    Code
    error_reporting(E_ALL);


    Und nach jedem querry


    Code
    echo mysql_error();


    So bekommen wir schonmal einige fehler herraus.
    Wenn du das eingebaut hast schau ich gerne nochmal auf die seite.


    Dann lass dir mal zu testzwecken das $sql per echo ausgeben ob dort vielleicht etwas falsch ist.


    Dann zum nächsten, hast du das darüber auch genau gelesen?


    Nachdem wie das skript jetzt aussieht glaube ich es nicht.


    Greetz TimTim

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!