Problem bei MySQL Counter

Dieses Thema im Forum "Webentwicklung" wurde erstellt von H4xx0r, 4. August 2006 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 4. August 2006
    Hi all!
    Also ich versuche derzeit mich in MySQL einzuarbeiten und wollte daher einen einfachen Counter den ich bereits geschireben habe, jedoch auf .txt Dateien Basis, so umcoden das er mit MySQL läuft, nur um das ein wenig mal zu lernen! Jedoch läuft das Skript einfach nicht... vllt fidnet ja wer den Fehler! Es zeigt stets nur 1 an.. auch wenn ich bei der Datenbank mit phpMyAdmin den Wert der IP ändere, wodurch ja eigentlich der Counterstand wieder um 1 steigen müsste...
    Hier mal der Code:

    ----------------
    <?php
    $host = "localhost"; // Host
    $user = "lalaadadlala"; // Datenbank Username
    $password = "asd"; // Datenbank Passwort
    $dbname = "sada"; // Datenbank Name

    mysql_connect("$host","$user","$password") or die ("Keine Verbindung moeglich");
    mysql_select_db("$dbname") or die ("Die Datenbank existiert nicht");
    ?>
    ----------------
    <?php
    include("mysql_connectinfo.php");

    $abfrage = "SELECT Hits, IP FROM Counter";
    $ergebnis = mysql_query($abfrage);
    $eintrag = mysql_fetch_array($ergebnis);

    $hits = $eintrag["Hits"];
    $IP = $eintrag["IP"];

    if ($IP == $_SERVER['REMOTE_ADDR']) {echo "$hits"; exit();}
    if ($IP <> $_SERVER['REMOTE_ADDR']) {
    $hits = $hits + 1;
    echo "$hits";

    $aendern = "UPDATE Counter set Hits = \'".$hits."\', IP = \'".$_SERVER['$REMOTE_ADDR']."\'";
    $update = mysql_query($aendern);
    }
    ?>
    --------------

    Wenn ich zum Beispiel noch vor den if-Abfragen ein echo einbaue um mir die Variable $IP ausgeben zu lassen, zeigt er... tjoa nix an ^^

    Hoffe mir kann jemand helfen! 10er ist natürlich sicher!!!
    MfG
    H4xx0r
     
  2. 4. August 2006
    bei dem problem kann ich dir jetzt leider so nicht helfen. sorry. aber ich würde dir empfehlen mal das tutorial auf http://www.php-q.net durchzuarbeiten. wenn du sicher bist, dass du php ausreichend kannst dann fang halt gleich bei mysql an. wenn du das tut durchgeackert hast kannst du auf jedenfall alles was man braucht. gruß
     
  3. 4. August 2006
    lol, der ganze Counter erscheint mir falsch/doof.

    PHP:
    <? php
    @ mysql_connect ( "localhost" , ".." , ".." );
    @
    mysql_select_db ( "..." );

    $Reloadsperre  86400 # Sekunden^^

    $IP  $_SERVER [ 'REMOTE_ADDR' ];

    $Check  mysql_num_rows ( mysql_query ( "SELECT * FROM counter_ip WHERE IP = ' $IP '" ));
    if(
    $Check  ==  0 ) {
     @
    mysql_query ( "INSERT INTO counter_ip (IP,Time) VALUES (' $IP ',UNIX_TIMESTAMP())" );
     @
    mysql_query ( "UPDATE counter_stat SET Hits = Hits + 1" );
    }

    @
    mysql_query ( "DELETE FROM counter_ip WHERE Time < " .(  time () -  $Reloadsperre  ). "" );  // Abgelaufene Daten löschen. :-|


    $Hits  mysql_fetch_array ( mysql_query ( "SELECT Hits FROM counter_stat" ));
    $Hit  $Hits [ 'Hits' ];

    echo 
    'Du bist Besucher Nummer: ' . $Hit ;
    ?>
    So! ^^
    Ungetestet, ausm stehgreifdings da gebastelt.

    2 Tabellen.

    counter_ip [IP (VarChar), Time (Int)]
    counter_stat [Hits (double/int/jenachdem)]



    Dein Counter sieht mir ziemlich un-funktionierend aus.

    mfG^^

    EDIT:

    Zu deinem Counter - sieht mir so aus als ob du da immer nur EINE IP speicherst - was bringt die denn dann? Immer wenn zB User 1 klickt, wird +1 und wenn User 2 klickt + 1 und dann wieder User 1 -> wieder +1 ... is doch total schwachsinnig

    mfG^^


    EDIT 2:

    Außerdem ist es ziemlich unKLUG in einem Script einfach mal so exit(); reinzupacken, weil vllt kommt danach noch was?
     
  4. 4. August 2006
    Versuchs mal geänderter Variable:

    $IP = $eintrag[1];

    ansonsten würd ich den code sowieso ganz anders aufbauen
     
  5. 4. August 2006
    Denk drüber nach, wie genau du den Counter haben willst und dann versuch mal, irgendwie dahinzukommen.
    Ich weiß, anfangs ist es schwer, wenn du allerdings ein bisschen Übung hast, geht das kinderleicht.

    Wie ich das sehe, willst du ein Hit-Zähler für jeden Besucher der Seite, oder?
    Also keinen Seitencounter, der zählt, wie viele Besucher bereits die Seite besucht haben, sondern einen Counter, der die IP von Besucher speichert und dann jedem Seitenklick von ihm zählt?

    ---------------------------------------------------------------------------------------------------------------------

    So schwer ist das nun nicht.

    Hier mal einige Verbesserungen für dein Script

    1

    Das hier:
    PHP:
    <?
    $abfrage  "SELECT Hits, IP FROM Counter" ;
    $ergebnis  mysql_query ( $abfrage );
    $eintrag  mysql_fetch_array ( $ergebnis );
    ?>
    geht auch so:
    PHP:
    <?
    $eintrag  mysql_fetch_row ( mysql_query ( "SELECT COUNT(*) FROM Counter WHERE IP = ' $ip_adress '" ));
    ?>
    Dann machst du einfach eine If-Abfrage ob $eintrag == 1 ist.
    Wenn ja, machst du ein stink normales Update!
    Um Den Wert, der in der Datenbank gerade drin steht zu zählen, benötigst du keine Abfrage.
    Im Query selber kannst du auch +, -, *, / verwenden.

    PHP:
    <?
    mysql_query ( "UPDATE Counter SET Hits = Hits + 1 WHERE IP = ' $ip_adress '" );
    ?>
    ------------------------------------------------------------------------------------------------------------------

    Das war's schon, und wie gesagt, wenn die IP-Adresse nocht nicht existiert, machst du einfach einen INSERT-Befehl.


    Nachtrag:
    PHP:
    <?
    // Oben fehlt halt noch
    $ip_adress  $_SERVER [ 'REMOTE_ADDR' ];
    ?>
    Mfg
    Yuri
     
  6. 5. August 2006

    Ich find meine Lösung ist die eleganteste von den hier angebotenen.
    Aber über den Aufbau deiner mySQL Tabellen solltest du dir nochmal Gedanken machen, bzw. über den Aufbau eines Counters... deiner sieht so aus, als ob da nur eine IP gespeichert werdn kann, außer ich verguck mich grad..
    Und das wär ziemlich unpraktisch..

    mfG
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.