Counter PHP Count Script Flatfiles
DownloadCounter ohne MySQLTutorials » PHP/MySQL Tutorials » DownloadCounter ohne MySQL
DownloadCounter ohne MySQL - Tutorial
Es wurde ein Tutorial fuer einen Klickcounter/DownloadCounter ohne MySQL Datenbank gewuenscht ...Okay zugegeben, ein richtiges Tutorial an sich ist es ja nicht geworden,
dazu fehlt mir im Moment leider die Zeit,
aber das Script ist eigentlich recht gut auskommentiert, so dass es leicht nachvollziehbar sein sollte ...
Was wird benoetigt?
- Webspace der PHP unterstuetzt
Wie schauts aus?
- Loginformular
- Adminpanel
- Eintragen
- Editieren
- Loeschen
Step 1 - index.php / count.txt
Das Script benoetigt eine leere Textdatei mit der Bezeichnung count.txt,
diese Datei muss die Rechte(CHMOD)666 besitzen und im selben Verzeichnis liegen, wie die index.php!
Die index.php enthaelt das Login-Formular, damit niemand ohne Zugangsdaten Links eintragen kann.
Die Datei bietet eine komplette Auflistung aller eingetragenen URL's, mit Blaetterfunktion,
mitels index.php koennen neue Eintraegen hinzugefuegt, Loeschen und Editieren werden...
Die CSS-Datei die fuer die index.php genutzt/benoetigt wird, kann hier heruntergeladen werden.
Code der index.php
<?php session_start(); // startet die Session $pfad = $_SERVER['PHP_SELF']; // aktueller Pfad zur Datei //---------------------- Logindaten --------------------------------- // $grafixx_name = "USERNAME"; // Loginname angeben $grafixx_pass = "PASSWORT"; // Loginpasswort angeben //------------------------------------------------------------------ // 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 - DownloadCounter || 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" /> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div id="ram"> <h1 id="header">Grafixx <small>DownloadCounter</small></h1> <br /> <?php if(!isset($_SESSION['login'])) { // wenn keine Session vorhanden if(isset($_POST['admin_login'])) { // wenn supbit gedrueckt $login_name = strip_tags($_POST['admin_name']); // Variable definieren $login_pass = strip_tags($_POST['admin_pass']); // Variable definieren if(empty($login_name)) { // Pruefen ob Username angegeben wurde $message .= 'Bitte geben Sie ihren Usernamen ein ... <br />'; $error = "1"; } if(empty($login_pass)) { // Pruefen ob Passwort angegeben wurde $message .= 'Bitte geben Sie ihr Passwort ein ... <br />'; $error = "1"; } if($login_name != $grafixx_name OR $login_pass != $grafixx_pass){ // Angaben auf Korrektheit pruefen $message .= 'Zugriff verweigert ... <br />'; $error = "1"; } if($error != "1"){ // Wenn kein Fehler war // session handle----------------------------- $_SESSION['login'] = $_SERVER['REMOTE_ADDR']; // Session setzen header("Location: $pfad"); // Weiterleiten } if($error == "1"){ // Fehlermeldung ausgeben wenn vorhanden echo "<h1>Error ...</h1>\n <p>$message</p>"; } } } // ----------------------------------------------- Ende Login ------------------------------------- // if(isset($_SESSION['login'])){ // Sofern Session vorhanden ... $db_file = "count.txt"; // Pfadangabe zur count.txt $read_dbfile = file($db_file); // Daten auslesen => Array packen $ermittel_id = count($read_dbfile); // Anzahl der Zeilen in datei ermitteln if($ermittel_id == ""){ $ermittel_id = 0; } // wenn count == 0 $links_per_page = 15; // Anzahl der URL's die Pro Seite angezeigt werden sollen $p = 5; // Anzahl der Links die in der Seitennavigation angezeigt wird //------------------------ Funktion um die letze ID zu ermitteln ------------------ function last_id(){ $array = file('count.txt'); // Datei in ein Array einlesen $count = sizeof($array)-1; // Anzahl der Elemente ermitteln - 1 fuers Array $teile = explode("|", $array[$count]); // Array zerlegen return $teile[0]; // zuletzt eingetragene ID ermitteln } $next_id = last_id() + 1; // naechste ID ermitteln // ---------------------------------------------------------------------------------------------------- // $id = strip_tags($_GET['id']); // Variable definieren $action = strip_tags($_GET['action']); // Variable definieren if(isset($_GET['id'])){ // falls ID uebregeben wurde $datei = fopen($db_file, "r"); // Daten auslesen while($zeile = fgetcsv($datei, 1000, "|")){ // Daten werden aus der Datei // in ein Array $zeile gelesen if($zeile[0] == $id){ $url = $zeile[1]; // Variable definieren $klicks = $zeile[2]; // Variable definieren } } fclose($datei); // Datei schliessen } if($action == ''){ // Wenn Variable $action nicht uebergeben / leer ?> <a href="<?php echo $pfad; ?>?action=new" class="button">Neuen Link eintragen ...</a> <br /><br /><br /> <h1>Uebersicht ...</h1> <?php $total_records = count($read_dbfile); // Anzahl der Zeilen in Datei ermitteln if($total_records == '') { // Falls keine Daten vorhanden echo "<p>Zur Zeit sind keine Links vorhanden ...</p>\n"; // 'Fehler' ausgeben } else { // -------------------------------------------------------- Seitennavigation ------------------------- // $pages = ceil($total_records / $links_per_page); // ermittelt die Anzahl der Seiten // korrigieren der aktuellen Seite if(empty($_GET['go'])) { $go = 1; } elseif($_GET['go'] <= 0 || $_GET['go'] > $pages) { $go = 1; } else { $go = $_GET['go']; } $links = array(); // Linkkette 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\">« Erste ...</a>\n"; } if($go != 1){ $prev = $go-1; $links[] = "<a href=\"".$pfad."?go=$prev\" title=\"Zurueck zur letzen Seite\"> «</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\"> » </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 »</a>\n"; } // Zusammenfgen der einzelnen Links zu einem String $link_string = implode(" ", $links); // --------------------------------------------------------------------------------------------------------------------- // $start = $go * $links_per_page; // AusleseStart ermitteln $ende = $start - $links_per_page; // AusleseEnde ermitteln if ($start > $total_records){ $start = $total_records; } $start = $total_records - $start-1; $ende = $total_records - $ende-1; $nummerdel = $go * $pro - $pro + 1; ?> <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 for ($do_zeile = $ende; $do_zeile > $start ; $do_zeile--){ $eintraege = explode ("|", $read_dbfile[$do_zeile]); // Eintraege auseinander nehmen $zeile++; // jede 2te Zeile einfaerben if ($zeile % 2 == 0) { echo "<tr>"; } else { echo "<tr bgcolor=\"#E6E9EC\">"; } ?> <td width="21" align="center"><?php echo $eintraege[0]; ?></td> <td><?php echo $eintraege[1]; ?></td> <td width="56" align="center"><?php echo $eintraege[2]; ?></td> <td width="95" align="center"> <a href="<?php echo $pfad; ?>?action=edit&id=<?php echo $eintraege[0]; ?>"> Edit </a> | <a href="<?php echo $pfad; ?>?action=delete&id=<?php echo $eintraege[0]; ?>"> Delete </a> </td> </tr> <?php $nummerdel++; } // close for-schleife ?> </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'])){ // Wenn submit gedrueckt $url = strip_tags($_POST['url']); // Variable definieren // ------------------------------- Wenn action = new -------------------------------------------------- if ($action == "new") { $suchen = strpos($url, 'http://'); // $url pruefen auf http:// if(empty($url)){ // Fehler 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 kein Fehler war $datei = fopen($db_file, "a"); // Datei oeffnen fputs($datei, $next_id . "|" . $url . "|0 \n"); // Daten eintragen fclose($datei); // Datei schliessen $generate_link = "<a href="go.php?id=$next_id"> - Linkbezeichnung/titel - </a>"; 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"; $okay = 1; } if($error == "1"){ // Fehler fals vorhanden ausgeben 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 { $datei = fopen($db_file, "r"); // Datei oeffnen - lesen while($zeile = fgetcsv($datei, 1000, "|")){ // Daten werden aus der Datei // in ein Array $zeile gelesen if($zeile[0] == $id){ $write[] = "$id|$url|$klicks\n"; // neue Daten definieren }else{ $write[] = "$zeile[0]|$zeile[1]|$zeile[2]\n"; // Daten definieren } } //while fclose($datei); // Datei schliessen $datei = fopen($db_file, "w"); // Datei oeffnen um zu schreiben $who = 0; while($write[$who] != ""){ fputs($datei, $write[$who]); // In Datei schreiben $who++; $okay = 1; // Variable definieren } fclose($datei); // Datei schliessen if($okay == 1){ echo "<h1>Prima ...</h1> \n"; echo "<p>Das Update war erfolgreich ...<br /><br />\n"; echo "<a href=\"$pfad\"> Uebersicht ...</a></p>\n"; }else{ // Fehlermeldung ausgeben echo "Es ist ein Fehler aufgetreten"; } } } // close action - edit } // ------------------------------- Wenn action = delete -------------------------------------------------------- if ($action == "delete") { $mode = $_GET['mode']; if(isset($_GET['mode'])){ // Pruefen ob Variable uebergeben wurde $datei = fopen($db_file, "r"); // Datei oeffnen um zu lesen while($zeile = fgetcsv($datei, 1000, "|")){ // Daten werden aus der Datei // in ein Array $zeile gelesen if($zeile[0] == $id){ continue; // weiter geht's - Eintrag raus }else{ $write[] = "$zeile[0]|$zeile[1]|$zeile[2]"; // Daten definieren } } fclose($datei); // Datei schliessen $datei = fopen($db_file, "w"); // Datei oeffnen um zu schreiben $who = 0; while($write[$who] != ""){ fputs($datei, "$write[$who]\n"); // In Datei schreiben $who++; } fclose($datei); // Datei schliessen echo "<h1>Prima ...</h1> \n"; echo "<p>Die URL wurde erfolgreich geloescht ...<br /><br />\n"; echo "<a href=\"$pfad\"> Uebersicht ...</a></p>\n"; } else { // zur Sicherheit noch mal nachfragen ... echo "<h1>Wirklich ...</h1>\n"; echo "<p>Ganz sicher loeschen?<br /><br />\n"; echo "<a href=\"$pad?action=delete&mode=yes&id=$id\" class=\"button\">Ja, ganz sicher</a>"; echo " <a href=\"$pfad\" class=\"button\">Nein, lieber doch nicht</a></p> "; } }// close action - delete //------------------------------------- close wenn Abschicken geklickt ------------------------------ if(($action == "edit" AND !$okay) OR ($action == "new" AND !$okay)){ if(isset($_GET['id'])) { // pruefen ob Variable uebergeben echo "<h1>Link editieren ...</h1>"; // Headline fuer Edit ausgeben }else{ echo "<h1>Neuen Link eintragen ...</h1>"; // Headline fuer Neuen Link ausgeben } // ----------------------------- Formular zu Eintragen --------------------------------------------- ?> <form action="" method="post"> <fieldset style="width: 400px"> <legend> URL Eintragen </legend> <input type="text" name="url" value="<?php echo $url; ?>" style="width: 390px" /><br /> <input type="submit" value=" Speichern " name="submit" class="button" /> </fieldset> </form> <?php } // close action }else{ // --------------------------- wenn nicht eingeloggt - login formular anzeigen ----------------------- ?> <form action="" method="post"> <fieldset style="width: 300px"> <legend>Login</legend> <label for="user">Username: </label> <input type="text" name="admin_name" style="width: 250px" /> <label for="passwort">Passwort: </label> <input type="password" name="admin_pass" style="width: 250px" /> <br /><br /> <input type="submit" value=" Login " name="admin_login" /> </fieldset> </form> <?php } // close login ob_end_flush(); // leert/beendet den Ausgabepuffer ?> <h3 id="footer">Grafixx - DownloadCounter <a href="http://alice-grafixx.de">Alice-Grafixx.de</a> <?php echo date('Y'); ?></h3> </div> </body> </html>
Wichtig!
Die Variable $benutzer = "USERNAMEN"; enthalt den Benutzernamen, dieser MUSS angepasst werden!
Die Variable $passwort = "PASSWORT"; enthalt das Passwort, dieses MUSS angepasst werden!
Step 2 - go.php
Die Datei go.php ist einzig und allein fuer das Zaehlen der Klicks zustaendig
<?php // go.php //--------------------------- $id = strip_tags($_GET['id']); // Variable definieren $db_file = "count.txt"; // Pfadangabe zur count.txt if(!isset($id) OR empty($id)){ // Pruefen ob ID uebergeben wurde echo "Keine ID angegeben ..."; // Fehlermeldung wiedergeben }else{ $datei = fopen($db_file, "r"); // Daten oeffnen um zu lesen while($zeile = fgetcsv($datei, 1000, "|")){ // Daten werden aus der Datei // in ein Array $zeile gelesen if($zeile[0] == $id){ $url = $zeile[1]; // URL fuer Weiterleitung $klicks = $zeile[2]+1; // Klick um eines erhoehen $yes = 1; // Setzen der Variable = Eintrag vorhanden $write[] = "$id|$url|$klicks\n"; // neue Daten definieren }else{ $write[] = "$zeile[0]|$zeile[1]|$zeile[2]\n"; // Daten definieren } } fclose($datei); if(!$yes){ die("ID wurde nicht gefunden!"); // Fehlermeldung, falls ID nicht vorhanden } $datei = fopen($db_file, "w"); // Datei oeffnen um zu schreiben $who = 0; while($write[$who] != ""){ fputs($datei, $write[$who]); // Neue Daten in Datei schreiben $who++; $okay = 1; // Setzen der Variable fuer evtl. Fehler } fclose($datei); if($okay == 1){ // Wenn alles korrekt dann weiterleiten header("Location: $url"); // Weiterleiten }else{ // wenn nicht, dann Fehlermeldung echo "Es ist ein Fehler aufgetreten"; } } // close ID angegeben ?>
Step 3 - show_klicks.php
Die Datei show_klicks.php enthaelt eine Funktion, die ist fuer das Anzeigen der Klicks einer bestimmten URL zustaendig ist...
<?php // show_klicks.php //--------------------------- function showklicks($id){ $datei = fopen("count.txt", "r"); // Datei zum lesen oeffnen while($zeile = fgetcsv($datei, 1000, "|")){ // Daten werden aus der Datei // in ein Array $zeile gelesen if($zeile[0] == $id){ $klicks = $zeile[2]; // Anzahl der Klicks ermitteln } } return $klicks; // Anzahl der Klicks wiedergeben fclose($datei); // Datei schliessen } ?>
Um die Anzahl der Klicks einer bestimmten URL,
in einer Datei (MUSS eine PHP-Datei sein!) wiederzugeben,
muss mittels include-Befehl
<?php include('show_klicks.php'); ?>
Sofern sich die Datei show_klicks.php nicht im selben Ordner wie die Datei,
die die Klicks wiedergeben soll, befindet, muss die Pfadangabe beim include-Befehl angepasst werden...
Anschliessend an der Stelle, an der Anzahl der Klicks wiedergegeben werden soll,
muss folgender Code angebracht werden:
<?php echo showklicks('linkID'); ?>
Bei linkID MUSS die ID(Zahl) der URL angegeben werden, von dem die Anzahl der Klicks ausgegeben werden soll!
Beispiel
Zur Anwendung der Funktion showklicks...
<!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 - Beispiel</title> </head> <body> <?php include("show_klicks.php"); ?> <a href="go.php?id=4"> Alice-Grafixx.de <?php echo showklicks('4'); ?>;</a> <a href="go.php?id=6"> Design-Grafixx.com <?php echo showklicks('6'); ?></a> </body> </html>
Tutorialdateien herunterladen
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 ...