Loading...   Upload Image

Klick-Counter mit Adminpanel und MySQLTutorials » PHP/MySQL Tutorials » Klick-Counter mit Adminpanel und MySQL

Verfasst von Alice am 07.03.2008 - wurde schon 10666 mal gelesen

Kategorie: PHP/MySQL
Bewertung:
14x bewertet
Schwierigkeit: mittel
Kommentare: [ 31 ]

Tag - Schlagwort Countdown Tag - Schlagwort PHP Tag - Schlagwort zaehlen Tag - Schlagwort count

Klick-Counter mit Adminpanel und MySQL - Tutorial

Da doch immer mal wieder die Frage nach einem Klick-Counter, oft auch gerne als Download-Counter bezeichnet, aufkommt,
hier also nun ein Tutorial dazu ...

Was wird benoetigt?


- Webspace der PHP unterstuetzt
- eine MySql Datenbank / PHPMyAdmin
- Php/MySQL Basiskenntnise

Was kommt am Schluss dabei heraus?


Nein, dieses Mal gibt es kein Beispiel welches Online beaeugt werden kann,
sondern nur ein paar Screenshots der Zip-Version ...

- Ansicht des Logins
- Ansicht der Uebersicht
- Ansicht URL eintragen
- Ansicht URL erfolgreich eingetragen
- Ansicht URL editieren
- Ansicht URL loeschen

Step 1


Wir erzeugen eine neue Tabelle in PHPMyAdmin

CREATE TABLE `link_count` (
`id` int(5) NOT NULL auto_increment,
`url` varchar(255) NOT NULL default '',
`klicks` int(5) NOT NULL default '0',
PRIMARY KEY (`id`)
);

Step 2


Die config.inc.php wird benoetigt um eine Verbindung zur Datenbank herzustellen,
die Dateiendung inc.php wird hier verwendet, damit die Php Datei von aussen nicht ausgelesen werden kann ...

Die Datei wird mittels include Befehl in die anderen Dateien eingebunden,
dies erspart es einem die Verbindungsdaten mehrmals anzugeben.

<?php
// config.inc.php
//---------------------------
$host = "localhost"; 	   // Adresse des Datenbankservers, fast immer localhost
$user = "Benutzername";    // Dein MySQL Benutzername
$pass = "deinPasswort";    // Dein MySQL Passwort
$dbase = "Datenbankname";  // Name der Datenbank

$connection = mysql_connect("$host","$user","$pass") OR DIE ("Keine Verbindung zu der Datenbank moeglich.");
$db = mysql_select_db($dbase , $connection) OR DIE ("Auswahl der Datenbank nicht moeglich."); 

?>

Im Abschnitt Datenbankverbindung wird die Datenbankverbindung hergestellt,
hier muessen die Variablen $host, $user, $pass sowie $dbase angepasst werden.

Step 3


Die go.php ist ist dazu da um die Klicks auf die einzelnen Links zu zaehlen ...

<?php
// go.php
//---------------------------

include('config.inc.php');

$id = mysql_real_escape_string($_GET['id']);

$abfrage = "SELECT url FROM link_count WHERE id='$id'";
$ergebnis = mysql_query($abfrage) or die (mysql_error());

if($ergebnis){

	$row = mysql_fetch_array($ergebnis);
	$url = $row['url'];
	
	$update = "UPDATE link_count SET klicks = klicks+'1' WHERE id='$id'";
	$result = mysql_query($update) or die (mysql_error());
	
	header("Location: $url" ); // Weiterleitung zur URL

}else{
	echo "Die ID ist nicht vorhanden ...";
}
?>


Zuerst wird die config.inc.php mittels include Befehl eingebunden,
damit eine Verbindung zur Datenbank hergestellt werden kann.

Die Varibale $id entschaeft mittels mysql_real_escape_string() was ueber den Get Parameter herein kommt...

Dann wird die URL des Links mit SELECT url FROM link_count WHERE id='$id' aus der Datenbank geholt,
wenn die Datenbankabfrage korrekt verlaufen ist,
dann wird der Klick mit UPDATE link_count SET klicks = klicks+'1' WHERE id='$id' um 1 hochgezaehlt,
anschliessend erfolgt die Weiterleitung an die URL ...

Sollte die ID nicht in der Datenbank vorhanden sein, so wird eine Fehlermeldung ausgegeben...

Step 4


Kommen wir nun zur Daten mit der man die URLs in die eintragen, loeschen und editieren kann...

<?php 
// klick_count.php
//---------------------------

session_start(); // startet die Session 

//---------------------- Logindate --------------------------------- //
$grafixx_name = "admin";				// Loginname
$grafixx_pass = "grafixx";				// Loginpasswort
//------------------------------------------------------------------ //

ob_start();	// startet den Ausgabepuffer
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de"> 

<head>
<title>Grafixx - KlickCounte || Adminpanel</title> 

<meta http-equiv="Content-Language" content="de" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="imagetoolbar" content="no" />

</head>
<body>

<h1 id="header">Grafixx - KlickCounter</h1>
<br />
<?php 

if(!isset($_SESSION['login'])) { 

if(isset($_POST['admin_login'])) {

$login_name = strip_tags($_POST['admin_name']);
$login_pass = strip_tags($_POST['admin_pass']);

    if(empty($login_name)) { 
    	$message .= 'Bitte geben Sie ihren Usernamen ein ... <br />'; $error = "1";
 	} 	
 	if(empty($login_pass)) { 
    	$message .= 'Bitte geben Sie ihr Passwort ein ... <br />'; $error = "1";
 	} 	
 	
 	if($login_name != $grafixx_name OR $login_pass != $grafixx_pass){
    	$message .= 'Zugriff verweigert ... <br />'; $error = "1";
 	}
	
	if($error != "1"){
        
			// session handle-----------------------------
			$_SESSION['login'] = $_SERVER['REMOTE_ADDR'];

			header("Location: klick_counter.php");
	}
	
	if($error == "1"){
		echo "<h1>Error ...</h1>\n <p>$message</p>";
	}

}

}// ----------------------------------------------- Ende Login ------------------------------------- //

if(isset($_SESSION['login'])){ 

include('config.inc.php');				// bindet die Datei fuer die Datenbankverbindung ein

$tab = "link_count";					// definiert die zu benutzende DB-Tabelle

$links_per_page = "5";					// Anzahl der Links die Pro Seite angezeigt werden sollen

$pfad = $_SERVER['PHP_SELF'];			// generiert aktueller Pfad zur Datei

// ---------------------------------------------------------------------------------------------------- //

$id = mysql_real_escape_string($_GET['id']);
$action = strip_tags($_GET['action']);

if(isset($_GET['id'])){ // wenn ID vorhanden dann Daten aus DB auslesen

    $abfrage = "SELECT id, url, klicks FROM $tab WHERE id='$id'";
    $ergebnis = mysql_query($abfrage) OR DIE (mysql_error());

    while ($ausgabe = mysql_fetch_array($ergebnis)){
		extract($ausgabe); 
    }
}

if($action == ''){

	echo "<a href=\"$pfad?action=new\" style=\"padding: 3px 5px; border: 1px solid #B5B8BB;\">
		  Neuen Link eintragen ...</a>\n";
?>
<br /><br />

<h1>Uebersicht ...</h1>
<?php 
		
$q = "SELECT id from $tab";
$result = mysql_query($q) or die (mysql_error());

if(!$result || mysql_num_rows($result)<1) {
    	echo "<p>Zur Zeit sind keine Links vorhanden ...</p>\n";
} else {

// ---------------------- Seitennavigationsdaten ------------------------------------------- //

$total_records = mysql_num_rows($result); 
$pages = ceil($total_records / $links_per_page); 
$p = "5"; 				 // Anzahl der Links die in der Seitenavigation ausgegeben werden

// korrigieren der aktuellen Seite
if(empty($_GET['go'])) {
    $go = 1;
} elseif($_GET['go'] <= 0 || $_GET['go'] > $pages) {
    $go = 1;
} else {
    $go = $_GET['go'];
}

// Linkkette
$links = array();

if(($go - $p) < 1){          
  $prevOffset = $go - 1;      
}else {          
  $prevOffset = $p;      
}            
if(($go + $p) > $pages) {          
  $nextOffset = $pages - $go;      
}else {          
  $nextOffset = $p;      
}          
$off = ($go - $prevOffset);    
                
if ($go- $prevOffset > 1){          
    $first = 1;
    $links[] = "<a href=\"".$pfad."?go=$first\" title=\"Zur ersten Seite springen\">&laquo; Erste ...</a>\n";      
}      
if($go != 1){          
    $prev = $go-1;
    $links[] = "<a href=\"".$pfad."?go=$prev\" title=\"Zurueck zur letzen Seite\"> &laquo;</a>\n";     
}   
       
for($i = $off; $i <= ($go + $nextOffset); $i++){  
  if ($i != $go){              
        $links[] = "<a href=\"".$pfad."?go=$i\" title=\"Seite $i anzeigen\">$i</a>\n";
  }elseif($i == $pages) {              
        // aktuelle Seite, braucht keinen Link
        $links[] = "<span class=\"current\">[ $i ]</span>\n";  
        }          
  elseif($i == $go){              
        // aktuelle Seite, braucht keinen Link
        $links[] = "<span class=\"current\">[ $i ]</span>\n";  
        }      
}                
if($go != $pages){          
    $next = $go+1;
    $links[] = "<a href=\"".$pfad."?go=$next\" title=\"Weiter zur naechsten Seite\"> &raquo; </a>\n";
}      

if ($off+$prevOffset*2 < $pages){          
    // zur letzen Seite springen
    $last = $pages;
    $links[] = "<a href=\"".$pfad."?go=$last\" title=\"Zur letzen Seite springen\">... Letzte &raquo;</a>\n";
}      
 
$link_string = implode(" &nbsp; ", $links);  // Packt alles in einen String

$start = ($go-1) * $links_per_page; 

// ---------------------------------------------------------------------------------------------------- //

$links_ab = "SELECT id, url, klicks FROM $tab ORDER BY id DESC LIMIT $start,$links_per_page";
$ergebnis = mysql_query($links_ab, $connection) or die (mysql_error()); 
?>
<table width="500" style="border: 1px solid #B5B8BB;">
<tr>
<th width="21" align="center">ID</th>
<th>URL</th>
<th align="center">Klicks</th>
<th align="center">Option</th>
</tr>
<?php
while ($links = mysql_fetch_array($ergebnis)){
extract($links);

 $zeile++;  // jede 2te Zeile einfaerben
   if ($zeile % 2 == 0) {
       echo "<tr>";
   } else {
          echo "<tr bgcolor=\"#E6E9EC\">";
   }
?>
<td width="21" align="center"><?php echo $id; ?></td>
<td><?php echo $url; ?></td>
<td width="56" align="center"><?php echo $klicks; ?></td>
<td width="95" align="center">
<a href="<?php echo $pfad; ?>?action=edit&amp;id=<?php echo $id; ?>"> Edit </a>&nbsp;|&nbsp;
<a href="<?php echo $pfad; ?>?action=delete&amp;id=<?php echo $id; ?>"> Delete </a>
</td>
</tr>
<?php 
} // close while
?>
</table>
<br />
<?php
 echo "<div id=\"navigation\">\n";

 echo "<span class=\"pages\">Seite $go von $pages</span>\n";

 echo $link_string; // Ausgabe der Seitennavigation
 
 echo "</div>\n"; 

 } // close urls vorhanden
 
} // close action leer

// ---------------------------------- / Config / ---//

if (isset($_POST['submit'])){

$url = mysql_real_escape_string($_POST['url']);

// ------------------------------- Wenn action = new --------------------------------------------------

if ($action == "new") {  

$suchen = strpos($url, 'http://'); // ueberprueft ob http:// angegeben wurde

    if(empty($url)){ // wenn keine URL angegeben wurde
    	$message .= "Bitte Danke eine URL angeben ...<br /><br />\n";  $error = "1";
    }
    
    if($suchen === false ){
    	$message .= "Die URL bitte mit http:// angeben ...<br /><br />";  $error = "1";
    }
    
    if($error != "1"){ // wenn alles korrekt ausgefuellt ist
    
        $eintrag ="INSERT INTO link_count (id, url) 
        		   VALUES ('','$url')";
        $okay = mysql_query($eintrag, $connection);
 
   	   if ($okay) { // wenn eingetragen
   	   
   	   $count_id = mysql_insert_id();
   	   $generate_link = "&lt;a href=&quot;go.php?id=$count_id&quot;&gt; - Linkbezeichnung/titel - &lt;/a&gt;";
   	     echo "<h1>Prima ...</h1> \n";
   	     echo "<p>Vielen Dank ...<br /><br /> \n";
   	     echo "Der Eintrag war erfolgreich :)<br /><br />\n";
   	     echo "Der Link Tag lautet:\n <br /><strong> $generate_link </strong> <br /><br />";
   	     echo "<a href=\"$pfad?action=new\"> noch einen Link eintragen</a><br /><br />\n";
   	     echo "<a href=\"$pfad\"> Uebersicht ...</a></p>\n";
	
			
   	   }else { // wenn nicht eingetragen
   	     echo '<p>Der Eintrag war nicht erfolgreich ' .
   	     mysql_error() . '</p>';
   	   }
	}

	if($error == "1"){ // wenn nicht alles korrekt ausgefuellt war
		echo "<h1>Error ...</h1><p>$message</p>";
	}
} // close action - new

// ------------------------------- Wenn action = edit --------------------------------------
if ($action == "edit") {  

    if (empty($url)){ // wenn keine URL angegeben wurde
    	echo "Bitte Danke eine URL angeben ...\n";
    }else {

      $update = "UPDATE link_count SET url='$url' WHERE id='$id'";
      $okay = mysql_query($update, $connection);

      if ($okay){ // wenn update erfolgreich
        echo "<h1>Prima ...</h1> \n";
        echo "<p>Das Update war erfolgreich ...<br /><br />\n";
	    echo "<a href=\"$pfad\"> Uebersicht ...</a></p>\n";
        
      }else{ // wenn nicht erfolgreich
        echo "<h1>Error ...</h1> \n";
        echo '<p>Fehler beim Aktualisieren der Details: ' .
        mysql_error() . '</p>';
      }
  
  }
} // close action - edit
}// ------------------------------- Wenn action = delete ----------------------------------


if($action == "delete") {
  
$mode = strip_tags($_GET['mode']);
   
   if(isset($_GET['mode'])){ // Wenn JA geklickt wurde
   
    $loeschen = "DELETE FROM link_count WHERE id='$id'";
    $ergebnis = mysql_query($loeschen) or die (mysql_error());
    
        if ($ergebnis) { // wenn geloescht
            echo "<h1>Prima ...</h1> \n";
            echo "<p>Die URL wurde erfolgreich geloescht ...<br /><br />\n";
            echo "<a href=\"$pfad\"> Uebersicht ...</a></p>\n";
        }else{
        	echo "<h1>Error</h1>\n";
        	echo "<p>Der Eintrag konnte nicht geloescht werden ...". mysql_error() ."</p>\n";
        }
    
    } else { // Fragen ob wirklich geloescht werden soll
    	echo "<h1>Wirklich ...</h1>\n";
        echo "<p>Ganz sicher loeschen?<br /><br />\n";
        echo "<a href=\"$pad?action=delete&amp;mode=yes&id=$id\">Ja</a>";
        echo "&nbsp;&nbsp;<a href=\"$pad\">Nein</a></p> ";
    }
    
}// close action - delete
   
//------------------------------------- close wenn Abschicken geklickt ------------------------------------

if(($action == "edit" AND !$okay) OR ($action == "new" AND !$okay)){

    if(isset($_GET['id'])) {
        echo "<h1>Link editieren ...</h1>";
    }else{
        echo "<h1>Neuen Link eintragen ...</h1>";
    }
// ---------------- Formular zu Eintragen der URL --------------------------------------    
?>
<form action="" method="post">
<fieldset style="width: 400px">
<label for="url">URL: </label>
<input type="text" name="url" value="<?php echo $url; ?>" style="width: 250px" />

<input type="submit" value=" Eintragen " name="submit" />
</fieldset>

</form>
<?php } // close action 

}else{ // wenn nicht eingeloggt - login anzeigen
?>
<form action="" method="post">
<fieldset style="width: 300px">
<label for="user">Username: </label>
<input type="text" name="admin_name" style="width: 250px" />

<label for="passwort">Passwort:&nbsp; </label>
<input type="password" name="admin_pass" style="width: 250px" />
<br /><br />
<input type="submit" value=" Login " name="admin_login" />
</fieldset>

</form>
<?php }
ob_end_flush(); // leert/beendet den Ausgabepuffer
?>
</body>
</html>


Als erstet wird die Session gestartet, dies ist noetig fuer den Login ...
Danach folgen die Logindaten, diese MUESSEN angepasst werden!

if(!isset($_SESSION['login'])) leitet den Loginabschnitt ein, es folgt eine ueberpruefung der Logindaten

if(isset($_SESSION['login'])) leitet den Abschnitt ein, den nur eingelogte zu sehen bekommen

Mit include('config.inc.php'); wird die Datei zur Datenbankverbindung eingebunden,
die Variable $tag definiert die Datenbank-Tabelle, diese hier heisst link_count

Die Varibable $links_per_page ist fuer die Seitennavigation wichtig,
sie gibt an wie viele URL pro Seite auf der Uebersichtsseite angezeigt werden sollen.

if(isset($_GET['id'])) Prueft ob eine ID uebergeben wurde,
sollte dies der Fall sein, dann werden die Daten der ID aus der Datenbank ausgelesen,
damit diese dann Editiert werden koennen ...

Der Abschnitt if($action == '') kommt zum Einsatz, wenn keine Action vorhanden,
dann wird eine Uebersicht der in der DB enthaltenen URLs, mit Seitennavigation ausgegeben.
Hier wird dann ermoeglicht bereits vorhandene URLs zu loeschen/editieren ...

Der Abschnitt if ($action == "new") Prueft die Daten die per Formular uebergeben wurden, und traegt die neue Url dann in die Datenbank,
sollte der Eintrag korrekt abgelaufen sein, so wird ein Link Tag generiert,
der die einfache Verlinkung der gerade eingetragenen URL ermoeglicht ...
Damit die Verlinkung korrekt funktioniert, muss sich die go.php im selben Verzeichnis befinden,
wie die Datei in der der Link zum Einsatz kommt, ansonsten muss der Pfad ggf. angepasst werden!


Der Abschnitt if($action == "delete") ist fuer das Loeschen einer eingetragenen URL zustaendig,
hier wir nochmals nachgefragt ob die URL auch wirklich geloescht werden soll,
erst nach der Bestaetigung wird die URl dann mittels DELETE FROM link_count WHERE id='$id' aus der DB geloescht ...

Danach folgt dann das Formular zum Eintragen der URl und zu guter letzt das Loginformular ....

Step 5


Damit die Anzahl der Klicks einer bestimmten URL ausgegeben werden kann,
wird nun noch eine kleine Funktion benoetigt ...
<?php
// show_klicks.php
//---------------------------
include('config.inc.php');

function showklicks($id){

	$abfrage = "SELECT klicks FROM link_count WHERE id = '$id'";
	$ergebnis = mysql_query($abfrage) or die (mysql_error());

	if($ergebnis){
	$row = mysql_fetch_array($ergebnis);
	extract($row);

	return $klicks; // Klicks ausgeben
	}
}
?>


Um die Klicks auszugeben muss nun nur die Datei in das Dokument,
es muss eine PHP-Datei sein, per include Befehl eingebunden werden
<?php include('show_klicks.php'); ?>


Und genau an der Stelle, wo die Anzahl der Klicks ausgegeben werden soll, muss hin
<?php echo showklicks('ZAHL'); ?>

Fuer ZAHL muss die ID der URL eingesetzt werden, sonst wird nix ausgegeben ...

Tutorialdateien herunterladne

----------------------------------------------------
Lieben Dank an Nerotism fuer die Fehlerbehebung :)

Kommentar schreibenHinterlasse einen Kommentar

Du musst angemeldet sein, um einen Kommentar zu hinterlassen...

Du bist noch kein Mitglied von Alice-Grafixx.de?
Dann kannst du dich hier kostenlos registrieren ...


       ALL-INKL.COM - Webhosting Server Hosting Domain Provider