Thema geschlossen
Ergebnis 1 bis 7 von 7

Thema: [PHP] Counter mit mysql (kurz und knackig)

  1. #1
    Projektleiter Avatar von Jann Hendrik
    Registriert seit
    02.12.2004
    Ort
    Wildeshausen
    Beiträge
    3.298
    Blog-Einträge
    32

    Standard [PHP] Counter mit mysql (kurz und knackig)

    In diesem Tutorial wird euch die Möglichkeit geboten einen kleinen Counter selbst nachzuprogrammieren.
    Eine Verbindung zur Datenbank wird vorausgesetzt.

    als erstes erstellen wir die mysql-Tabelle:
    Code:
    CREATE TABLE IF NOT EXISTS `counter` (
      `id` int(2) NOT NULL auto_increment,
      `hits` int(7) NOT NULL default '0',
      PRIMARY KEY  (`id`)
    );
    
    nun können beliebig viele Counter erstellt werden:
    Code:
    INSERT INTO `counter` (`id`, `hits`) VALUES ('', 0);
    
    so könnt ihr für jede Seite einen eigenen Counter haben, oder für jeden download, für jeden ... sonstwas.


    Anzeigen des Counters geht recht simpel:

    PHP-Code:
    <?php
        $sql 
    "SELECT id, hits FROM counter WHERE id=1 LIMIT 1";
        
    $result mysql_query($sql) or die ('Fehler!<br />$sql: '.$sql.'<br />mysql_error(): '.mysql_error());
        
    $zeile=mysql_fetch_assoc($result);
        echo 
    $zeile['hits'];
     
    ?>
    nun muss natürlich der Counter auch erhöht werden können. Das geht mit folgenden Zeilen:

    PHP-Code:
    <?php 
      $sql 
    "UPDATE counter SET hits = hits +1"
      
    mysql_query($sql) or die ('Fehler!<br />$sql: '.$sql.'<br />'mysql_error(): .mysql_error());
     
    ?>

    Jetzt solltet Ihr eigentlich in der Lage sein, das Script ohne Vorlage nachzuprogrammieren. Die verwendeten Funktionen findet Ihr alle im PHP-Manual. Wem das zu schnell ging, weil ich hier auf die anderen mysql-basics nicht eingegangen bin - der möge sich zusätzlich noch die anderen MySQL-Tutorials anschauen.

    Solltet Ihr Fragen zu dem Tutorial haben, so schreibt bitte einen Beitrag im PHP-Forum mit einem Verweis auf dieses Tutorial.
    Danke.

    Ich hoffe, dass ich Euch hier etwas weiterhelfen konnte.

    Grüße Jann Hendrik
    Geändert von Jann Hendrik (25.05.2007 um 10:18 Uhr)
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

  2. #2
    Michel
    Gast

    Standard [PHP] Counter mit mysql (kurz und knackig)

    hm...
    Ich habe den Counter zwar nicht ausprobiert aber wenn ich mir den Code so anschaue, wird wahrscheinlich ein Anfänger recht Mühe haben, ihn zu konfigurieren.

    Du solltest vieleicht noch besser erklären, wie man denn den Counter auf verschiedene Seiten einbauen könnte.

    Und ich glaube in diesem Code ist noch etwas falsch.
    Wenn jetzt jemand diesen Code in der entsprechenden Seite einbaut, werden ja alle Counter geupdatet.
    <?php
    $sql = "UPDATE counter SET hits = hits +1";
    mysql_query($sql) or die ('Fehler!<br />$sql: '.$sql.'<br />'mysql_error(): '.mysql_error());
    ?>

    Gruss
    Michel
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

  3. #3
    Ben
    Ben ist offline
    Erfahrener Benutzer Avatar von Ben
    Registriert seit
    02.12.2004
    Ort
    Koblenz
    Beiträge
    4.815

    Standard [PHP] Counter mit mysql (kurz und knackig)

    Zitat Zitat von Michel
    Ich habe den Counter zwar nicht ausprobiert
    Ohne Diskussion, dann erspare dir bitte Spekulationen.

    Zitat Zitat von Michel
    Und ich glaube in diesem Code ist noch etwas falsch.
    Wenn jetzt jemand diesen Code in der entsprechenden Seite einbaut, werden ja alle Counter geupdatet.
    Nuja. Es ist halt ein "Klickcounter", da nicht überprüft wird, ob der User schon einmal den Counter erhöht hat oder nicht.

    Demnach gibt es nur einen Counter. Wozu sollte es auf einer Seite auch zwei Klickcounter geben?

    Um abzufragen, ob der User schon einmal den Counter in die Höhe geschraubt hat, also wenn man an den Visits unterschiedlicher Besucher und nicht an der Gesamtzahl an Hits interessiert ist, dann startet man eine Session und überprüft, ob die Session-ID schon einmal den Counter erhöht hat.


    PHP-Code:
    <?php

        session_start
    ();
       
        if(!
    array_key_exists('counted'$_SESSION) || !$_SESSION['counted']) {
             
    // counter-code

            
    $_SESSION['counted'] = true;
        }

    ?>
    Grüße Ben.
    Geändert von Jann Hendrik (25.05.2007 um 10:19 Uhr)
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

  4. #4
    Neuer Benutzer
    Registriert seit
    18.08.2005
    Beiträge
    2

    Standard

    Zitat Zitat von Ben
    Nuja. Es ist halt ein "Klickcounter", da nicht überprüft wird, ob der User schon einmal den Counter erhöht hat oder nicht.
    Ich glaube Michel hat etwas anderes gemeint. Jann schreibt ja das man mehrere Counter erstellen kann, also braucht man dann bei der Erhöhung eine WHERE Bedingung.
    Das müsste dann also z.B. so aussehen:
    PHP-Code:
    <?php 
      $sql 
    "UPDATE counter SET hits = hits +1 WHERE id = ".$id
      
    mysql_query($sql) or die ('Fehler!<br />$sql: '.$sql.'<br />'.mysql_error());
    ?>
    mfg RudiS
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

  5. #5
    Michel
    Gast

    Standard

    jo ich konnte leider meinen Beitrag nicht editieren, sonst hätte ich es besser erklärt. Danke RudiS
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

  6. #6
    Projektleiter Avatar von Jann Hendrik
    Registriert seit
    02.12.2004
    Ort
    Wildeshausen
    Beiträge
    3.298
    Blog-Einträge
    32

    Standard [PHP] einfacher grafischer Counter

    In dieser Tutorial-Ergänzung wird euch die Möglichkeit geboten einen simplen Grafikcounter zu erstellen.

    Dabei gehe ich davon aus, dass die Daten aus einer Datenbank kommen, oder alternativ dazu in einer Textdatei gespeichert werden.


    Der Trick, den ich verwenden möchte ist, dass ich 10 Dateien habe, die als Inhalt die Zahlen 0-9 haben. Diese könnt ihr mit einem Grafikprogramm eurer Wahl selbst gestalten.
    Im Anhang habe ich mal Beispieldateien angehängt, wobei diese sicherlich nicht jedermanns Geschmack treffen werden :)

    In der Datei, die dann die Zahlen darstellen soll gebe ich einfach jedes Bild einzeln aus. Dazu muss die Zahl aber in ihre Multiplikatoren der Zehnerpotenzen zerlegt werden.

    Dafür habe ich mir folgendes überlegt.
    Ich messe die Länge der Zahl mit strlen() aus und gebe danach einfach jedes Zeichen einzeln durch:

    PHP-Code:
    <?php
      error_reporting
    (E_ALL);
      
    /** benötigte Dateien:
          - 0.jpeg
          - 1.jpeg
          - 2.jpeg
          - 3.jpeg
          - 4.jpeg
          - 5.jpeg
          - 6.jpeg
          - 7.jpeg
          - 8.jpeg
          - 9.jpeg

      **/
      // Daten normalerweise aus der Datenbank, oder eine Textdatei

      
    for ($i=0$i strlen($zahl); $i++)
        echo 
    '<img src="'.$zahl{$i}.'.jpeg"  border="0" alt="'.$zahl.'" title="'.$zahl.'">';
    ?>
    Das ist das magere Kernstück des Tricks.





    Die verwendeten Funktionen findet Ihr alle im PHP-Manual.

    Alternativ dazu könnte man auch eine Bild-Datei mit PHP erzeugen und ausgeben - das soll aber nicht Inhalt dieses Tutorials sein.

    Solltet Ihr Fragen zu dem Tutorial haben, so schreibt bitte einen Beitrag im PHP-Forum mit einem Verweis auf dieses Tutorial.
    Danke.

    Ich hoffe, dass ich Euch hier etwas weiterhelfen konnte.
    Bei Verbesserungsvorschlägen würde ich mich über eine Nachrichtfreuen.

    Grüße Jann Hendrik
    Angehängte Dateien
    Geändert von Jann Hendrik (25.05.2007 um 10:19 Uhr)
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

  7. #7
    /(bb|[^b]{2})/
    Registriert seit
    05.11.2006
    Beiträge
    29

    Standard Ergänzung zum grafischen Counter

    Bei vielen, wenn nicht gar bei allen Countern im Web sieht man die Zahl, der einige Nullen vorangestellt sind. Ich habe nun auf Basis des Tutorials zum grafischen Counter einen solchen Counter entwickelt.

    Bei der Einbindung des Codes müssen zwei Variablen definiert werden: $number, das ist die gesamtzahl der Stellen, die der Counter haben soll, und $id, die id der Zeile in der MySQL-Tabelle. Da außerdem über eine Session-Variable sichergestellt wird, dass jeder Besucher nur einmal gezählt wird, muss eine Session gestartet werden.


    Falls nicht schon passiert, muss eine Verbindung zur Datenbank hergestellt werden. Dies geschieht über die Datei mysqlconnect.php.
    PHP-Code:
    include 'mysqlconnect.php'
    Alternativ kann man diese Zeile auch durch den Code, der zur Verbindung nötig ist, ersetzen.


    Da wir jeden Besucher nur einmal zählen wollen, unabhängig davon, wie oft er im Verlauf der Session die Seite aktualisiert, fragen wir nun ab, ob die Session-Variable counted bereits definiert ist.
    PHP-Code:
    if(!array_key_exists('counted'$_SESSION) || !$_SESSION['counted']) 
    Falls dies nicht der Fall sein sollte, sprich der Besucher noch nicht gezählt wurde, wird die in der Datenbank gespeicherte Zahl um eins erhöht und der Session-Variable counted der Wert true zugewiesen.
    PHP-Code:
    {
      
    //Wenn nein, wird die Zahl in Spalte hits in der Zeile mit der 
      //angegebenen id um 1 erhöht
      
    mysql_query("UPDATE counter SET hits = hits +1 WHERE id = $id;");
        
      
    //Die Session-Variable counted wird als true definiert.
      
    $_SESSION['counted'] = true;    


    Widmen wir uns nun der grafischen Ausgabe der Daten. Dazu benötigen wir einen Ordner namens counter, in dem die Dateien counter0.gif bis counter9.gif liegen.
    Als erstes müssen wir den gespeicherten Wert auslesen und dessen Länge ermitteln. Dies machen wir mit diesem Code:

    PHP-Code:
    //Wählt die Spalte hits aus der Zeile $id aus
    $result mysql_query("SELECT hits FROM counter WHERE id=$id;");

    //Liest den Wert aus
    $zahl mysql_fetch_assoc($result);

    //Bestimmt die Länge der Zahl
    $laenge strlen($zahl['hits']); 
    Falls der Webmaster schlampig ist und vergessen hat, $number (die Gesamtzahl der Stellen) höher zu setzen, wenn der Counter diese Länge überschritten hat, würde der Counter nicht funktionieren. Daher fragen wir jetzt ab, ob $number kleiner als die Länge der Zahl ist. Wenn ja, wird $number ein neuer Wert zugewiesen, der sich aus der Länge der Zahl plus 1 ergibt.
    PHP-Code:
    //wenn die gewünschte Zahl der Stellen kleiner als die tatsächliche 
    //Zahl der Stellen ist, wird $number neu definiert, 
    //sodass sie um 1 länger als die tatsächliche Anzahl der Stellen ist
    if ($number $laenge)
    {
      
    $number $laenge 1;   

    Jetzt wird die Differenz zwischen der gewünschten Gesamtzahl der Stellen und der tatsächlichen Länge der Zahl bestimmt.
    PHP-Code:
    $null $number $laenge
    Jetzt werden die Nullen grafisch ausgegeben. Hierzu machen wir eine for-Schleife, die so oft läuft, wie die Null ausgegeben werden soll, d.h. die Variable $null bestimmt die Anzahl der Durchläufe.
    PHP-Code:
    {

     
    //gibt den HTML-Code für die Bilder der Nullen aus
     
    echo '<img src="/counter/counter0.gif" border="0" alt="0" title="'
    Der aufmerksame Leser wird gemerkt haben, dass im Code-Beispiel oben dder ausgegebene HTML-Code unvollständig und die for-Schleife nicht abgeschlossen ist.
    Wir schreiben jetzt eine untergeordnete for-Schleife, die für das title-Attribut die Nullen ausgibt:
    PHP-Code:
    for ($zero 0$zero $null$zero++)
    {
      echo 
    '0';

    Nun wird die Zahl selbst als title-Attribut ausgegeben und die for-Schleife geschlossen.
    PHP-Code:
     echo "".$zahl['hits']."'>"

    Jetzt wird die Zahl selbst grafisch ausgegeben. Dies geschieht dadurch, dass wir für jedes Zeichen eine Bild-Datei als HTML-Code ausgeben.
    PHP-Code:
    for ($i 0$i $laenge$i++)
    {

      
    //Gibt den HTML-Code des Bildes einer Ziffer aus
      
    echo '<img src="/counter/counter'.$zahl['hits']{$i}.
             
    '.gif" border="0" alt="'.$zahl['hits']{$i}.'" title="';
           
      
    //Gibt die Nullen als title-Attribut aus
      
    for ($zero 0$zero $null$zero++)
      {
        echo 
    '0';
      }

       
    //gibt die Zahl als title-Attribut aus
       
    echo "".$zahl['hits']."'>";

    Die Ausgabe des title-Attributs ist analog zu oben besprochener.

    Jetzt wird noch die MySQL-Verbindung geschlossen
    PHP-Code:
    mysql_close(); 
    und fertig ist unser Counter:
    PHP-Code:
    <?php

    /*
    Variablen die beim reqire/include-Befehl angegeben werden müssen:
    $id           ID des Counters in der MySQL-Datenbank
    $number       Gesamtzahl der Stellen, die der Counter hat

    Außerdem muss eine Session gestartet werden.
    */


    include 'mysqlconnect.php'//Verbindung zur Datenbank
      
    //fragt ab, ob in der Session die Variable counted als true definiert wurde
    //d.h. ob derjenige bereits gezählt wurde
    if(!array_key_exists('counted'$_SESSION) || !$_SESSION['counted']) 
    {
      
    //Wenn nein, wird die Zahl in Spalte hits in der Zeile mit der 
      //angegebenen id um 1 erhöht
      
    mysql_query("UPDATE counter SET hits = hits +1 WHERE id = $id;");
        
      
    //Die Session-Variable counted wird als true definert.
      
    $_SESSION['counted'] = true;    
    }

    //Wählt die Spalte hits aus der Zeile $id aus
    $result mysql_query("SELECT hits FROM counter WHERE id=$id;");

    //Liest den Wert aus
    $zahl mysql_fetch_assoc($result);

    //Bestimmt die Länge der Zahl
    $laenge strlen($zahl['hits']);
      
    //wenn die gewünschte Zahl der Stellen kleiner als die tatsächliche 
    //Zahl der Stellen ist, wird $number neu definiert, 
    //sodass sie um 1 länger als die tatsächliche Anzahl der Stellen ist
    if ($number $laenge)
    {
      
    $number $laenge 1;
    }
    $null=$number-$laenge;
      
    //gibt die Nullen aus
    for ($b 0$b $null$b++)
    {

      
    //gibt den HTML-Code für die Bilder der Nullen aus
      
    echo '<img src="/counter/counter0.gif" border="0" alt="0" title="';

      
    //gibt als title-Attribut die Nullen aus
      
    for ($zero 0$zero $null$zero++)
      {
        echo 
    '0';
      }

      
    //gibt als title-Attribut die Zahl aus.
      
    echo "".$zahl['hits']."'>"
    }

    // gibt die Zahl aus
    for ($i 0$i $laenge$i++)
    {

      
    //Gibt den HTML-Code des Bildes einer Ziffer aus
      
    echo '<img src="/counter/counter'.$zahl['hits']{$i}.
             
    '.gif" border="0" alt="'.$zahl['hits']{$i}.'" title="';
           
      
    //Gibt die Nullen als title-Attribut aus
      
    for ($zero 0$zero $null$zero++)
      {
        echo 
    '0';
      }

      
    //gibt die Zahl als title-Attribut aus
      
    echo "".$zahl['hits']."'>";

    mysql_close();

    ?>
    Geändert von Ilinsekt (16.11.2006 um 19:53 Uhr)
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

Thema geschlossen

Aktive Benutzer

Aktive Benutzer

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

     

Ähnliche Themen

  1. [Suche] MySQL Tool ähnlich MySQL Front
    Von ex³ im Forum Gesuche
    Antworten: 5
    Letzter Beitrag: 22.12.2006, 18:52
  2. Connect to mySQL DB
    Von la-finest im Forum Datenbanken
    Antworten: 7
    Letzter Beitrag: 29.06.2006, 16:11
  3. ssh tunnel zu einer mysql datenbank
    Von beny_mcde im Forum Datenbanken
    Antworten: 4
    Letzter Beitrag: 07.06.2006, 16:05
  4. MySQL 5.1 kommt in die Beta-Phase
    Von Ben im Forum Nachrichten
    Antworten: 1
    Letzter Beitrag: 02.03.2006, 14:31
  5. [PHP] Blätterfunktion mit MySQL
    Von Ben im Forum Tutorials
    Antworten: 0
    Letzter Beitrag: 15.03.2005, 04:22

Lesezeichen

Berechtigungen

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

Impressum · Tutorials · Nutzungsbedingungen · thematisch sortierte Linklisten · Spendenaufruf · Team · Partnerprojekte

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48