Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [PHP] Counter mit mysql (kurz und knackig)

Layoutprobleme? - Styleswitcher!

Antwort
 
Themen-Optionen
Alt 07.04.2005, 19:30 Nach oben    #1
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.540
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).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.08.2005, 13:52 Nach oben    #2
Michel
 
Beiträge: n/a
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!
Mit Zitat antworten
Alt 30.08.2005, 11:38 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 3.812
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).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.09.2005, 14:47 Nach oben    #4
RudiS
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
RudiS ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.09.2005, 18:34 Nach oben    #5
Michel
 
Beiträge: n/a
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!
Mit Zitat antworten
Alt 31.03.2006, 18:23 Nach oben    #6
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.540
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
Dateityp: zip 0bis9.zip (17,2 KB, 9x aufgerufen)

Geändert von Jann Hendrik (25.05.2007 um 10:19 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.11.2006, 09:45 Nach oben    #7
Ilinsekt
/(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 20:53 Uhr).
Ilinsekt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

« [PHP] Simples Caching System mittels Dateien | [PHP] Zeitformate, Datum und Co »

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

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Suche] MySQL Tool ähnlich MySQL Front ex³ Gesuche 5 22.12.2006 19:52
Connect to mySQL DB la-finest Datenbanken 7 29.06.2006 16:11
ssh tunnel zu einer mysql datenbank beny_mcde Datenbanken 4 07.06.2006 16:05
[PHP] Blätterfunktion mit MySQL Ben Tutorials 0 15.03.2005 05:22


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:09 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.6.7, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

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