Script Tutorial PHP Layout Upload Blaetterfunktion
Layout ManagerTutorials » PHP/MySQL Tutorials » Layout Manager
Verfasst von Alice am 23.08.2009 - wurde schon 38642 mal gelesen
Layout Manager - Tutorial
Es kam nun schon oeferts der Wunsch nach einen Layout-Upload-Script auf, nun denn, ich nenn das Script jetzt einfach mal Layout Manager, passend zum Affiliate Manager ;)Was wird benoetigt?
- PHP / MySql Grundkenntnisse
- 1 MySql Datenbank
- Webspace der PHP unterstuetzt
Wie schauts aus?
Administration
- Admin Ansicht
- Layout eintragen
- Layout bearbeiten
- Layout loeschen
Ausgabe
- Ausgabe der Layouts
Der Layout Manager baut auf die selbe Datenbank wie schon das Script Newssystem mit Kommentar-Funktion, wer also das Newssystem im Einsatz hat, der faengt erst bei Step2 an zu lesen ;)
Step 1
Als erstes erstellen wir uns eine neue Tabelle, fuer die Autoren, in der Datenbank(mit PHPMyAdmin)
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(48) NOT NULL,
`email` varchar(255) NOT NULL,
`passwort` varchar(48) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
);
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(48) NOT NULL,
`email` varchar(255) NOT NULL,
`passwort` varchar(48) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
);
Dann legen wir gleich mal einen User an, die Daten bitte Anpassen!
INSERT INTO `user` (`id`, `name`, `email`, `passwort`) VALUES
(1, 'DeinUsername', 'DeineEmailAdresse', 'DeinPasswort');
(1, 'DeinUsername', 'DeineEmailAdresse', 'DeinPasswort');
Step 2
Wir erzeugen abermals eine Tabelle, diesmal allerdings fuer die Layouts
CREATE TABLE IF NOT EXISTS `layouts` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`autor` varchar(50) NOT NULL,
`title` varchar(255) NOT NULL,
`typ` varchar(255) NOT NULL,
`cat` varchar(255) NOT NULL,
`icon` varchar(255) NOT NULL,
`preview` varchar(255) NOT NULL,
`download` varchar(255) NOT NULL,
`size` varchar(22) NOT NULL,
`views` int(11) NOT NULL,
`downloads` int(11) NOT NULL,
`date` datetime NOT NULL,
`ip` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
`id` int(255) NOT NULL AUTO_INCREMENT,
`autor` varchar(50) NOT NULL,
`title` varchar(255) NOT NULL,
`typ` varchar(255) NOT NULL,
`cat` varchar(255) NOT NULL,
`icon` varchar(255) NOT NULL,
`preview` varchar(255) NOT NULL,
`download` varchar(255) NOT NULL,
`size` varchar(22) NOT NULL,
`views` int(11) NOT NULL,
`downloads` int(11) NOT NULL,
`date` datetime NOT NULL,
`ip` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
Step 3 - Datenbank Verbindung | config.inc.php
Config.inc.php heisst unsere Datei mit der wir eine Verbindung zur Datenbank herstellen, ohne die geht gar nichts!
<?php // config.inc.php //--------------------------- $host = "localhost"; // Adresse des Datenbankservers, fast immer localhost $user = ""; // Dein MySQL Benutzername $pass = ""; // Dein MySQL Passwort $dbase = ""; // 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."); ?>
Step 4 - header.php
Die Datei header.php wir in alle Datein eingebunden, die fuer die Administration der News zustaendig sind, sie enthaelt zum einen einen Zugriffsschutz, sowie den oberen Teil des immer wieder benoetigen HTML Grundgeruests.Die verwendete CSS Datei kann hier heruntergeladen werden.
<?php // header.php session_start(); // Session starten include('functions.php'); // Funktion einbinden include('config.inc.php'); // DB-Verbindung einbinden $pfad = $_SERVER['PHP_SELF']; // aktuellen Dateipfad ermitteln if(!isset($_SESSION['login']) AND (basename($pfad) != 'admin.php')){ // Sofern NICHT eingeloggt echo "<meta http-equiv=\"refresh\" content=\"0; URL=admin.php\">"; //=> Weiterleitung } ?> <!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 LayoutManager</title> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta http-equiv="imagetoolbar" content="no" /> <meta http-equiv="Content-Language" content="de" /> <link rel="stylesheet" href="style.css" type="text/css" /> </head> <body> <div id="ram"> <div id="header"> <h1>Grafixx LayoutManager</h1> </div> <div id="content">
Step 5 - footer.php
Die Datei footer.php wird ebenfalls, wie zuvor schon die header.php, in alle Datein eingebunden, welche fuer die Administration der News zustaendig sind, die Datei enthaelt den abschliessenden Teil des HTML-Grundgeruestes, sowie die Navigation...
</div> <?php include('sidebar.php'); ?> <div id="footer"> <p class="right"> Valid <a href="http://validator.w3.org/check/referer" title="This page validates as XHTML 1.0 Transitional"><abbr title="eXtensible HyperText Markup Language"> XHTML</abbr></a> | Valid <a href="http://jigsaw.w3.org/css-validator/check/referer" title="CSS ist valide!"><abbr title="Cascading Style Sheets"> CSS</abbr></a> </p> <p><a href="http://unnecessary.de">Grafixx LayoutManager</a> <a href="http://alice-grafixx.de">Alice-Grafixx.de</a></p> </div> </body> </html>
Step 6 - sidebar.php
Die Datei sidebar.php enthaelt zum einen den Loginbereich, eine Moeglichkeit sich wieder auszuloggen, die Navigation...
<?php // sidebar.php echo "<div id=\"sidebar\">\n"; $action = strip_tags($_GET['action']); // Variable definieren if(isset($_POST['submit_login'])){ $log_user = mysql_real_escape_string($_POST['log_user']); // Variable definieren $log_pass = mysql_real_escape_string($_POST['log_pass']); // Variable definieren => MD5 Verschluesselung $login = mysql_query("SELECT id FROM user WHERE name='$log_user' AND passwort='$log_pass'"); if(mysql_num_rows($login) > 0){ // korrekt eingeloggt $row = mysql_fetch_object($login); // DATEN aus DB $_SESSION['login'] = $row->id; // Session zuweisen $_SESSION['user'] = $log_user; // Session zuweisen echo "<meta http-equiv=\"refresh\" content=\"0; URL=admin.php\">"; // Weiterleitung } } //-------------------------------------------------------- // Wenn Eingeloggt //-------------------------------------------------------- if(isset($_SESSION['login'])){ echo "<h2>Welcome ".$_SESSION['user']."<small>"; echo "<a href=\"?action=logout\">Logout</a></small></h2>"; echo "<p><a href=\"admin.php\" class=\"the_button\">Layouts verwalten</a>\n "; echo "<a href=\"post_layout.php\" class=\"the_button\">Layout eintragen</a></p>\n "; //-------------------------------------------------------- // Logout //-------------------------------------------------------- if($action == 'logout'){ session_unset(); // Sessionvariable loeschen session_destroy(); // Session zerstoeren echo "<meta http-equiv=\"refresh\" content=\"0; URL=admin.php\">"; // Weiterleitung => Login } }else{ ?> <form action="" method="post"> <fieldset> <legend><span class="color">Grafixx</span> Login</legend> <label>Name</label> <input type="text" name="log_user" /><br /> <label>Passwort</label> <input type="text" name="log_pass" /> <br /><br /> <input type="submit" value="Login" name="submit_login" class="button"/> </fieldset> </form> <?php } /* Close login */ ?> </div> </div>
Step 7 - admin.php
Die Datei admin.php listet alle bisher hochgeladenen Layouts auf, wenn man mit derm Maus ueber den Namen des Layouts faehrt wird das Vorschaubild eingeblendet, die Datei bieten jeweils zu jedem Layout einen Link zum Editieren/Loeschen des Layouts an ...
<?php // admin.php include('header.php'); // header einbunden if(isset($_SESSION['login'])){ // Sofern eingeloggt echo "<h2>Layouts</h2>\n"; $abfrage = mysql_query("SELECT id FROM layouts"); // DB Abfragen $total = mysql_num_rows($abfrage); // Anzahl der Zeilen in DB // ---------------------- Seitennavigationsdaten -------------------------------------------------- $per_page = "8"; // Anzahl der Datensaetze die Pro Seite angezeigt werden sollen $p = "5"; // Anzahl der Links die in der Seitenavigation ausgegeben werde // Blaetterfunktion aufrufen = > Ausgeben list ($start, $ende) = get_navi($_GET['go'], $total, "admin.php?go=", false, $per_page, $p); // ---------------------- ENDE Seitennavigationsdaten---------------------------------------------- $abfrage = mysql_query("SELECT id, autor, title, cat, icon, preview, download, size, views, downloads, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM layouts ORDER BY id DESC LIMIT $start,$ende"); if($total < 1){ // Pruefen ob Layouts vorhanden echo "<p>Zur Zeit existieren keine Layouts ...</p>"; }else{ echo "<p>Insgesamt sind derzeit <a href=\"layouts.php\">".$total." Layouts</a> vorhanden ...</p>"; echo "<ul class=\"list\">"; // News ausgeben ausgeben while($row = mysql_fetch_object($abfrage)){ echo "<li>"; echo "<div class=\"right\">\n"; echo "<a href=\"post_layout.php?action=edit&id=".$row->id."\">Bearbeiten</a> \n"; echo "<a href=\"post_layout.php?action=loeschen&id=".$row->id."\">[x]</a>\n"; echo "</div>\n "; echo "<strong>".$row->id.". </strong>\n"; echo "<a href=\"".$row->preview."\" target=\"_blank\" class=\"tool\">".$row->title."<span><img src=\"".$row->icon."\" alt=\"".$row->title."\" /></span></a>\n"; echo "» ".$row->autor."\n"; echo "<small><strong>".$row->datum."</strong> » ".$row->size." » <a href=\"".$row->preview."\" target=\"_blank\">Views (".$row->views.")</a> » \n"; echo "<a href=\"".$row->download."\" target=\"_blank\">Downloads (".$row->downloads.")</a>\n"; echo "</small>\n </li>\n"; } // close while echo "</ul>\n<br /><br class=\"clear_left\"/>"; // Blaetterfunktion aufrufen = > Ausgeben get_navi($_GET['go'], $total, "admin.php?go=", true, $per_page, $p); } // close Eintrage vorhanden //------------------------------------------------------------------------------ }else{ // Sofern nicht eingeloggt ... if(isset($_POST['submit_login'])){ $log_user = mysql_real_escape_string($_POST['log_user']); // Variable definieren $log_pass = mysql_real_escape_string($_POST['log_pass']); // Variable definieren => MD5 Verschluesselung $login = mysql_query("SELECT id FROM user WHERE name='$log_user' AND passwort='$log_pass'"); if(mysql_num_rows($login) > 0){ // korrekt eingeloggt $row = mysql_fetch_object($login); // DATEN aus DB $_SESSION['login'] = $row->id; // Session zuweisen $_SESSION['user'] = $log_user; // Session zuweisen echo "<meta http-equiv=\"refresh\" content=\"0; URL=admin.php\">"; // Weiterleitung } } // close submit // Wenn nicht eingeloggt --------------------------------------------------------- echo "<h2>Zugriff verweigert ...</h2>"; echo "<p>Du musst eingeloggt sein, um diese Seite aufrufen zu koennen ...</p>"; } // close eingeloggt include('footer.php'); // Footer einbinden ?>
Step 8 - post_layout.php
Die Datei post_layout.php ist fuer das Eintragen, Loeschen und Bearbeiten eines Layouts zustaendig. Diese Datei verwendet die PhpConcept Library Zip, mit deren Hilfe das entpacken von Zip-Daten kinderleicht ist. Die PhpConcept Library Zip muss selbst heruntergeladen werden, anschliessen dann die entpackte Datei pclzip.lib.php im selben Ordner wir die post_layout.php abgespeichern!
<?php // post_layout.php include('header.php'); // header einbunden $id = clean_it($_GET["id"]); $action = clean_it($_GET['action']); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $tab ="layouts"; // Tabellenname $icon_max_size = 800000; // Erlaubte Icon-Dateigre - 1048576 = 1 MByte, 10485760 = 10 MByte $icon_max_type = array(".jpg",".jpeg",".gif",".png"); // Die Erlaubten Datei-Endungen - Icon $zip_max_size = 1548576; // Erlaubte Zip-Dateigre - 1048576 = 1 MByte, 10485760 = 10 MByte $zip_max_type = array(".zip"); // Die Erlaubten Datei-Endung - ZIP $pfad_layi = "layouts/"; // Speicherort der Layouts //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(isset($_GET['id'])) { $query = mysql_query("SELECT autor, icon, cat, typ, title, downloads, views, size, preview, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM $tab WHERE id='$id'"); $row = mysql_fetch_object($query); $title = $row->title; $cat = $row->cat; } // if $_GET 'id' // ------------------------------------------------ / Configuration / ------------------------------------------------// if (isset($_POST['submit'])) { $action = clean_it($_GET['action']); $id = clean_it($_GET['id']); $autor = clean_it($_POST['autor']); $typ = clean_it($_POST['typ']); $cat = clean_it($_POST['cat']); $title = clean_it($_POST['title']); $icon = $_FILES['thumb']['name']; $zip = $_FILES['zip']['name']; $datei_size = $_FILES['zip']['size']; $user_ip = $_SERVER['REMOTE_ADDR']; // ------------------------------- Neues Layout ---------------------------- if(!isset($_GET['action'])){ // Pruefen ob alles angegeben wurde if ($autor == '' || $title == '' || $typ == '' || $icon == '' || $series = '' || $zip == '') { echo '<div class="error"><h2>Error ...</h2><p>Bitte Danke alle Felder ausfuellen ...</p></div>'; }else{ // Sofern denn alles da $zip_size = datei_groesse("$datei_size", 2); // Dateigroesse ermitteln // Pruefen ob Dateityp / Dateigre erlaubt -> Icon $icon_d = strrchr($_FILES['thumb']['name'], "."); // Nun ist in $icon_d folgendes enthalten: .dateiendung if ($_FILES['thumb']['size'] <= $icon_max_size && in_array($icon_d,$icon_max_type)) { // Sofern okay Dateityp/Dateigroesse // Pruefen ob Dateityp / Dateigre erlaubt -> ZIP $zip_d = strrchr($_FILES['zip']['name'], "."); // Nun ist in $zip_d folgendes enthalten: .dateiendung if ($_FILES['zip']['size'] <= $zip_max_size && in_array($zip_d,$zip_max_type)) { // Sofern okay Dateityp/Dateigroesse $x = 1; while(is_dir($pfad_layi.$x)){ $x++; } // Zahl fuer Ordner definieren mkdir($pfad_layi.$x, 00777) or die($php_errormsg); // Ordner erstellen chmod($pfad_layi.$x, 00777); // CHMOD setzen $datei_pfad = $pfad_layi.$x."/"; if (is_dir($datei_pfad)) { // pruefen ob ordner erstellt wurde echo "<p class=\"no_error\"> - Ordner <strong>".$x."</strong> in Verzeichnis layouts erstellt<br />"; } // Vorschaubild hochladen //----------------------------------------------------------------------- $datei_pfad_img = $datei_pfad.$x.'-thumb'.$icon_d; // Datei umbenenn in if(move_uploaded_file($_FILES['thumb']['tmp_name'], $datei_pfad_img)) { echo " - Vorschaubild erfolgreich hochgeladen<br /> \n"; }else{ echo " x Vorschaubild konnte nicht hochgeladen werden :("; } // Zip-Datei hochladen //----------------------------------------------------------------------- $datei_pfad_zip = $datei_pfad.$x.'.zip'; // Datei umbenenn in if(move_uploaded_file($_FILES['zip']['tmp_name'], $datei_pfad_zip)) { echo " - Zip-Datei erfolgreich hochgeladen<br />\n"; }else{ // Wenn ZIP Datei nicht hochgeladen werden konnte echo " x Zip-Datei wurde nicht hochgeladen :( \n"; } // Zip-Datei entpacken //----------------------------------------------------------------------- include('pclzip.lib.php'); // PclZip einbinden $archive = new PclZip("$datei_pfad_zip"); //zip file to extract if ($archive->extract(PCLZIP_OPT_PATH, $datei_pfad.'/') == 0){ die(" x Error : ".$archive->errorInfo(true)); // fehler -> abbrechen }else{ // Wenn kein Fehler beim Entpacken war Echo " - Zip-Datei wurde erfolgreich entpackt<br /> \n"; $icon = $datei_pfad_img; // Iconpfad $download = $datei_pfad_zip; // Downloadpfad $preview = $datei_pfad; // Vorschaupfad }// close entpacken // DB Eintrag $upload = mysql_query("INSERT INTO $tab (autor, title, typ, cat, icon, size, preview, download, ip, date ) VALUES ('$autor','$title','$typ', '$cat', '$icon','$zip_size','$preview','$download','$user_ip', now() )"); if($upload){ // Sofern Upload erfolgreich echo "<div class=\"no_error\"><h2>Wunderbar ...</h2><p>Der Eintrag in die Datenbank war erfolgreich ...</p></div>"; $okay = 1; } else { // Wenn Upload nicht erfolgreich echo "<div class=\"error\"><h2>Error....</h2>\n <p>Der Eintrag war nicht erfolgreich :( <br />\n ".mysql_error()."</p></div>\n"; } }else{ // Datei zugross / keine Zip Datei if ($_FILES['zip']['size'] > $zip_max_size){ echo "<div class=\"error\"><h2>Error...</h2>\n<p>Die Zip-Datei ist zu schwer max. ".$zip_max_size."kb ...</p></div>\n"; } if (!in_array($zip_d,$zip_max_type)){ echo "<div class=\"error\"><h2>Error...</h2>\n<p>Die hochgeladene Datei ist keine Zip-Datei!</p></div>\n"; } } // close else Datei zugross / keine Zip Datei }else{ // Datei zugross / Dateitype nicht erlaubt Icon Datei if ($_FILES['thumb']['size'] > $iconp_max_size){ echo "<div class=\"error\"><h2>Error...</h2>\n<p>Die Zip-Datei ist zu schwer max. ".$zip_max_size."kb ...</p></div>\n"; } if (!in_array($icon_d,$icon_max_type)){ echo "<div class=\"error\"><h2>Error...</h2>\n<p>Die hochgeladene Datei ist keine Zip-Datei!</p></div>\n"; } } // close else Datei zugross / keine Icon Datei } // close Check if user submit blank entry } // close !action // ------------------------------- Layout edit ---------------------------- if ($action == "edit") { // Pruefen ob alles angegeben wurde if ($autor == '' || $title == '' || $typ == '' || $series = '' ){ echo '<div class="error"><h2>Error ...</h2><p>Bitte Danke alle Felder ausfuellen ...</p></div>'; }else{ // Wenn alles notwendige angegeben wurde if(!empty($zip) AND !empty($icon)){ // Nur wenn die Dateien ein Update benoetigen $zip_size = datei_groesse("$datei_size", 2); // Dateigroesse ermitteln // ALTE Dateien Loeschen $folder = substr($row->preview, 0, -1); // zu loeschendes Verzeichnis ermitteln if(deleteDirectory($folder) == false){ // Pruefen ob die alten Dateien geloescht wurden, wenn nicht -> Fehler echo '<div class="error"><h2>Error ...</h2><p>Es ist ein Fehler aufgetreten ...</p></div>'; }else{ // wenn die alten Dateien geloescht wurden // Pruefen ob Dateityp / Dateigre erlaubt -> Icon $icon_d = strrchr($_FILES['thumb']['name'], "."); // Nun ist in $icon_d folgendes enthalten: .dateiendung if ($_FILES['thumb']['size'] <= $icon_max_size && in_array($icon_d,$icon_max_type)) { // Sofern okay Dateityp/Dateigroesse // Pruefen ob Dateityp / Dateigre erlaubt -> ZIP $zip_d = strrchr($_FILES['zip']['name'], "."); // Nun ist in $zip_d folgendes enthalten: .dateiendung if ($_FILES['zip']['size'] <= $zip_max_size && in_array($zip_d,$zip_max_type)) { // Sofern okay Dateityp/Dateigroesse $x = 1; while(is_dir($pfad_layi.$x)){ $x++; } // Zahl fuer Ordner definieren mkdir($pfad_layi.$x, 00777) or die($php_errormsg); // Ordner erstellen chmod($pfad_layi.$x, 00777); // CHMOD setzen $datei_pfad = $pfad_layi.$x."/"; if (is_dir($datei_pfad)) { // pruefen ob ordner erstellt wurde echo "<p class=\"no_error\"> - Ordner <strong>".$x."</strong> in Verzeichnis layouts erstellt<br />"; } // Vorschaubild hochladen //----------------------------------------------------------------------- $datei_pfad_img = $datei_pfad.$x.'-thumb'.$icon_d; // Datei umbenenn in if(move_uploaded_file($_FILES['thumb']['tmp_name'], $datei_pfad_img)) { echo " - Vorschaubild erfolgreich hochgeladen<br /> \n"; }else{ echo " x Vorschaubild konnte nicht hochgeladen werden :("; } // Zip-Datei hochladen //----------------------------------------------------------------------- $datei_pfad_zip = $datei_pfad.$x.'.zip'; // Datei umbenenn in if(move_uploaded_file($_FILES['zip']['tmp_name'], $datei_pfad_zip)) { echo " - Zip-Datei erfolgreich hochgeladen<br />\n"; }else{ // Wenn ZIP Datei nicht hochgeladen werden konnte echo " x Zip-Datei wurde nicht hochgeladen :( \n"; } // Zip-Datei entpacken //----------------------------------------------------------------------- include('pclzip.lib.php'); // PclZip einbinden $archive = new PclZip("$datei_pfad_zip"); //zip file to extract if ($archive->extract(PCLZIP_OPT_PATH, $datei_pfad.'/') == 0){ die(" x Error : ".$archive->errorInfo(true)); // fehler -> abbrechen }else{ // Wenn kein Fehler beim Entpacken war Echo " - Zip-Datei wurde erfolgreich entpackt<br /> \n"; $icon = $datei_pfad_img; // Iconpfad $download = $datei_pfad_zip; // Downloadpfad $preview = $datei_pfad; // Vorschaupfad }// close entpacken }else{ // Datei zugross / keine Zip Datei if ($_FILES['zip']['size'] > $zip_max_size){ echo "<div class=\"error\"><h2>Error...</h2>\n<p>Die Zip-Datei ist zu schwer max. ".$zip_max_size."kb ...</p></div>\n"; } if (!in_array($zip_d,$zip_max_type)){ echo "<div class=\"error\"><h2>Error...</h2>\n<p>Die hochgeladene Datei ist keine Zip-Datei!</p></div>\n"; } } // close else Datei zugross / keine Zip Datei }else{ // Datei zugross / Dateitype nicht erlaubt Icon Datei if ($_FILES['thumb']['size'] > $iconp_max_size){ echo "<div class=\"error\"><h2>Error...</h2>\n<p>Die Zip-Datei ist zu schwer max. ".$zip_max_size."kb ...</p></div>\n"; } if (!in_array($icon_d,$icon_max_type)){ echo "<div class=\"error\"><h2>Error...</h2>\n<p>Die hochgeladene Datei ist keine Zip-Datei!</p></div>\n"; } } // close else Datei zugross / keine Icon Datei } // close alte dateien loeschen } // close datein benoetigen Update // DB Update $update= "UPDATE $tab SET autor = '$autor', typ = '$typ', cat = '$cat', title ='$title', ip = '$user_ip'"; if((!empty($zip)) AND (!empty($icon))){ // Nur wenn die Dateien ein Update benoetigen $update.= ", icon = '$icon', size = '$zip_size', preview = '$preview', download = '$download'"; } $update.= "WHERE id='$id'"; $upload = mysql_query($update); if($upload){ // Sofern Upload erfolgreich echo "<div class=\"no_error\"><h2>Wunderbar ...</h2><p>Das Update war erfolgreich ...</p></div>"; $okay = 1; } else { // Wenn Upload nicht erfolgreich echo "<div class=\"error\"><h2>Error....</h2>\n <p>Der Eintrag war nicht erfolgreich :( <br />\n ".mysql_error()."</p></div>\n"; } } // close Check if user submit blank entry } // close action edit }//------------------------------------- close Submit geklickt -------------------------------------- if($okay != 1 AND $action != 'loeschen'){ ?> <form name="form" action="" method="post" enctype="multipart/form-data"> <fieldset> <legend>Layout eintragen</legend> <label>Autor</label> <input type="text" name="autor" size="20" value="<?php if(isset($id)){ echo $row->autor; }else{ echo $_SESSION['user']; } ?>" /> <label>Typ</label> <select name="typ" size="1" class="form"> <?php if(isset($_GET['id'])){ echo "<option selected=\"selected\" value=\"".$row->typ."\"> ".$row->typ." </option>"; }else{ echo "<option>Bitte Kategorie auswhlen</option>"; } ?> <option>----------------------------------------</option> <option value="divider">Divider</option> <option value="iframes">iFrames</option> <option value="Table">Table</option> <option value="special">Sonstiges</option> </select> <br /> <label>Series</label> <input type="text" name="cat" value="<?= $cat; ?>" size="44" class="form" /> <label>Title</label> <input type="text" name="title" value="<?= $title; ?>" size="44" class="form" /> <br /> <br /> <?php if(isset($_GET['id'])){ echo "<label>Vorhanden</label> \n "; echo "<a href=\"".$row->preview."\" target=\"_blank\" style=\"float: left; padding-right: 8px;\"><img border=\"0\" src=\"".$row->icon."\" alt=\"".$row->title."\" /></a> \n"; echo "<p><strong>Datum:</strong> ".$row->datum." \n"; echo "<br /><strong>Size:</strong> ".$row->size." \n"; echo "<br /><strong>Downloads:</strong> ".$row->downloads." \n"; echo "<br /><strong>Views:</strong> ".$row->views."</p>\n"; echo "<br class=\"clear_left\"/><br />"; echo "<h3>Optional</h3>"; } ?> <label>Icon</label> <input type="file" name="thumb" size="44" /> <label>Zip</label> <input type="file" name="zip" size="44" /> <br /><br /> <input type="submit" value="Abschicken" name="submit" class="button" /> </fieldset> </form> <?php } //close $okay // ------------------------------- Wenn action = delete ---------------------------- $mode = $_GET['mode']; if($action == "loeschen"){ if(!isset($_GET['mode'])){ // Zur Sicherheit lieber noch mal nachfragen echo "<div class=\"error\"><h2>Wirklich ...</h2>\n"; echo "<p>Bist du sicher dass du das <a href=\"".$row->preview."\" class=\"tool\">Layout ".$id."<span><img src=\"".$row->icon."\" alt=\"".$row->title."\" /></span></a>\n"; echo "loeschen moechtest?</p> \n"; echo "<p><a href=\"post_layout.php?action=loeschen&mode=del&id=$id\" class=\"button\"> Ja </a>"; echo " <a href=\"admin.php\" class=\"button\"> Nein </a></p>\n </div>"; }else{ $delete = mysql_query("DELETE from $tab WHERE id='$id'");// Loeschen der Dateien aus der Datenbank $folder = substr($row->preview, 0, -1); // zu loeschendes Verzeichnis ermitteln if((deleteDirectory($folder) == true) AND ($delete)){ // Wenn geloescht wurde echo "<div class=\"no_error\"><h2>Prima ...</h2>\n<p>Das Loeschen des Designs war erfolgreich ...</p></div>\n"; }else{ // Wenn nicht geloescht wurde echo "<div class=\"error\"><h2>Error ...</h2>\n<p>Der Loeschvorgang war leider nicht erfolgreich :(</p></div>"; } } // close mode } // close if ($action == "delete") include('footer.php'); ?>
Step 9 - functions.php
Die Datei functions.php beheimatet zum einen die Blaetterfunktion(Seitennavigation), welche fuer das Blaetern auf der Ausgabeseite und im Administrationsbereich benoetigt wird, ebenfalls anzutreffen in dieser Datei, ist eine Function, welche DB-Eintraege 'saeubert' und zu guter Letzt nich eine Function, welche die Dateigrossen wiedergibt.
<?php // functions.php // Funktion um die DB-Eintraege zu pruefen => SQL Injektions function clean_it($dirty){ // Auswirkungen von magic_quotes_gpc zuruecksetzen, wenn ON if (get_magic_quotes_gpc()) { $clean = mysql_real_escape_string(stripslashes(htmlspecialchars($dirty))); }else{ $clean = mysql_real_escape_string(htmlspecialchars($dirty)); } return $clean; } // Funktion um die Dateigroesse zu ermitteln function datei_groesse($datei_size, $nachkommastellen = 0) { $d_size = $datei_size; if($d_size >= 1073741824) { return round($d_size/(1073741824), $nachkommastellen)." GB"; } if($d_size >= 1048576) { return round($d_size/(1048576), $nachkommastellen)." MB"; } if($d_size >= 1024) { return round($d_size/(1024), $nachkommastellen)." KB"; } return $d_size." Byte"; } // Blaetterfunktion => Seitennavigation function get_navi($go, $total, $pfad, $ausgabe = false, $ende = 10, $p = 3){ //----------------------------------------------------------------------------------------------- // $pfad => Dateipfad // $total => Anzahl der in DB // $ende => Anzahl der Datensaetze die Pro Seite angezeigt werden sollen // $p => Anzahl der Links die in der Seitenavigation ausgegeben werden // $ausgabe = false => Seitennavigation NICHT ausgeben oberhalb der DB Abfrage //----------------------------------------------------------------------------------------------- $seiten = ceil($total / $ende); // Berechnet die Seitenanzahl insgesamt if(!isset($go)){ // korrigieren der aktuellen Seite $go = 1; // Sofern $go nicht uebergeben wurde }elseif($go <= 0 || $go > $seiten){ $go = 1; // Variable definieren }else{ // Wenn Obiges nicht zutraf $go = clean_it($go); // Variable definieren } $links = array(); // Linkkette bilden // Seite die vor der aktuellen Seite kommt definieren if(($go - $p) < 1){ $davor = $go - 1; }else { $davor = $p; } // Seite die nach der aktuellen Seite kommt definieren if(($go + $p) > $seiten){ $danach = $seiten - $go; }else{ $danach = $p; } $off = ($go - $davor); // Variable definieren if ($go- $davor > 1){ // Link definieren => Zur Erste Seite springen $first = 1; $links[] = "<a href=\"".$pfad."".$first."\" title=\"Zur ersten Seite springen\">« Erste ...</a>\n"; } if($go != 1){ // Link definieren => eine Seite zurueck blaettern $prev = $go-1; $links[] = "<a href=\"".$pfad."".$prev."\" title=\"Eine Seite zurueck blaettern\">«</a>\n"; } for($i = $off; $i <= ($go + $danach); $i++){ // einzelne Seitenlinks erzeugen if ($i != $go){ // Link definieren $links[] = "<a href=\"".$pfad."".$i."\">$i</a>\n"; }elseif($i == $seiten) { // aktuelle Seite, ein Link ist nicht erforderlich $links[] = "<span class=\"current\">$i</span>\n"; }elseif($i == $go){ // aktuelle Seite, ein Link ist nicht erforderlich $links[] = "<span class=\"current\">$i</span>\n"; } // close if $i }// close for if($go != $seiten){ // Link definieren => eine Seite weiter blaettern $next = $go+1; $links[] = "<a href=\"".$pfad."".$next."\" title=\"Eine Seite weiter blaettern\">»</a>\n"; } if($seiten - $go - $p > 0 ){ // Link definieren => Zur letzen Seite springen $last = $seiten; $links[] = "<a href=\"".$pfad."".$last."\" title=\"Zur letzten Seite springen\">... Letzte »</a>\n"; } $start = ($go-1) * $ende; // Berechne den Startwert fuer die DB $link_string = implode(" ", $links); // Zusammenfuegen der einzelnen Links zu einem String // -------------------------------------- Seitennavigation ausgeben ---------------------------- if($ausgabe == true){ echo "<div id=\"navigation\">\n"; echo "<span class=\"pages\">Seite $go von $seiten</span>\n"; echo $link_string; // Ausgabe der Seitennavigation echo "</div> \n"; } //close ausgabe // -------------------------------------- Seitennavigation ende -------------------------------- return array($start, $ende); } // close function // Funktion zum Loeschen von Ordner mit samt Inhalt function deleteDirectory($dir){ if (!file_exists($dir)) return false; if (!is_dir($dir) || is_link($dir)) return unlink($dir); foreach (scandir($dir) as $item) { if ($item == '.' || $item == '..') continue; if (!deleteDirectory($dir . "/" . $item)) { chmod($dir . "/" . $item, 0777); if (!deleteDirectory($dir . "/" . $item)) return false; }; } return rmdir($dir); } ?>
Step 10 - layouts.php
Die Datei layouts.php ist fuer die Ausgabe der Layouts zustaendig, sie bietet die Moeglichkeit die Layouts nach Autoren oder aber nach Kategorien sortieren zu lassen. In die layouts.php wird die config.inc.php, sowie als auch die functions.php eingebunden, sollten sich die Dateien nicht im selben Ordner befinden, muessen die Pfade angepasst werden!
<?php //layouts.php include('config.inc.php'); // Db-Verbindungsdaten einbinden include('functions.php'); // Db-Verbindungsdaten einbinden // Klicks zaehlen //------------------------------------------------------------------------------------- if(isset($_GET['id'])){ // Parameteruebergabe pruefen $id = clean_it($_GET['id']); // Variable definieren $do = clean_it($_GET['do']); // Variable definieren $abfrage = mysql_query("SELECT preview, download FROM layouts WHERE id='$id'"); $row = mysql_fetch_object($abfrage); if($do == 'view'){ // Layout anschauen $was = "views"; $url = $row->preview; } if($do == 'download'){ // Layout downloaden $was = "downloads"; $url = $row->download; } // eins hochzaehlen und leitet den Besucher weiter $update = mysql_query("UPDATE layouts SET $was = $was+'1' WHERE id='$id'"); if($update){ header("Location: $url"); }else{ echo "<div class=\"error\"><h2>Error....</h2><p>Es ist ein Fehler aufgetreten!</p></div>"; } } // close ID uebergeben //-------------------------------------------------------------------------------------- ?> <!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 LayoutManager</title> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta http-equiv="imagetoolbar" content="no" /> <meta http-equiv="Content-Language" content="de" /> <link rel="stylesheet" href="style.css" type="text/css" /> </head> <body> <div id="ram"> <div id="header"> <h1>Grafixx LayoutManager</h1> </div> <div id="content"> <?php //-------------------------------------------------------------------------------------- // Ausgabe der Layouts //-------------------------------------------------------------------------------------- echo "<h2>Layouts</h2>\n"; $pfad = "layouts.php?go="; // Pfad ermitteln if(isset($_GET['do'])){ // nur bestimmter typ $do = clean_it($_GET['do']); // Variable definieren $where = "WHERE typ = '".clean_it($_GET['do'])."'"; $pfad = "layouts.php?do=".$do."$amp;go="; // Pfad ermitteln }else{ // Wenn nichts uebergeben $pfad = "layouts.php?go="; // Pfad ermitteln } if(isset($_GET['autor'])){ // nur bestimmter Autor $auto = clean_it($_GET['autor']); // Variable definieren $where = "WHERE autor = '".$auto."'"; $pfad = $pfad."&autor=".$auto; // Pfad ermitteln } if(isset($_GET['cat'])){ // nur bestimmte Serie $cats = clean_it($_GET['cat']); // Variable definieren $where = "WHERE cat = '".$cats."'"; $pfad = $pfad."&cat=".$cats; // Pfad ermitteln } $abfrage = mysql_query("SELECT id FROM layouts ".$where." "); // DB Abfragen $total = mysql_num_rows($abfrage); // Anzahl der Zeilen in DB mysql_error(); // ---------------------- Seitennavigationsdaten -------------------------------------------------- $per_page = 6; // Anzahl der Datensaetze die Pro Seite angezeigt werden sollen $p = 5; // Anzahl der Links die in der Seitenavigation ausgegeben werde // Blaetterfunktion aufrufen = > Ausgeben list ($start, $ende) = get_navi($_GET['go'], $total, $pfad, false, $per_page, $p); // ---------------------- ENDE Seitennavigationsdaten---------------------------------------------- $abfrage = mysql_query("SELECT id, autor, title, typ, cat, icon, preview, download, size, views, downloads, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM layouts ".$where." ORDER BY id DESC LIMIT $start,$ende"); if($total < 1){ // Pruefen ob Layouts vorhanden echo "<p>Zur Zeit existieren keine Layouts in dieser Kategorie ...</p>"; }else{ echo "<p>Insgesamt sind derzeit <a href=\"layouts.php\">".$total." Layouts</a> vorhanden ...</p>"; // Layouts ausgeben ausgeben while($row = mysql_fetch_object($abfrage)){ ?> <div class="layout"> <strong class="color right"><?= $row->title; ?></strong> <br /> <img src="<?= $row->icon; ?>" alt="<?= $row-title; ?>" /> <strong>Serie:</strong> <?= $row->cat; ?><br /> <strong>Designer:</strong> <?= $row->autor; ?><br /> <strong>Datum:</strong> <?= $row->datum; ?><br /> <strong>Size:</strong> <?= $row->size; ?><br /> <strong>Typ:</strong> <?= $row->typ; ?><br class="clear_left" /> <p><a href="layouts.php?do=view&id=<?= $row->id; ?>" class="button" target="_blank"> Preview <small>(<?= $row->views; ?>)</small> </a> <a href="layouts.php?do=download&id=<?= $row->id; ?>" class="button"> Download <small>(<?= $row->downloads; ?>)</small> </a></p> </div> <?php } // close while echo "<br class=\"clear_left\" /><br />"; // Blaetterfunktion aufrufen = > Ausgeben get_navi($_GET['go'], $total, $pfad, true, $per_page, $p); } // close Eintrage vorhanden ?> </div> <div id="sidebar"> <h2>Navigation</h2> <ul> <?php // Typen abfragen $sql = mysql_query("SELECT typ, COUNT(typ) AS anzahl FROM layouts GROUP BY typ"); while($row = mysql_fetch_object($sql)){ echo "<li><a href=\"layouts.php?do=".$row->typ."\">".ucfirst($row->typ)." <small>(".$row->anzahl.")</small></a></li>\n"; } ?> <li><a href="layouts.php">» Alle</a></li> </ul> <br /> <form action="" method="get"> <fieldset> <legend>Browse by Autor</legend> <select name="autor" onchange="window.location.href='layouts.php?autor='+this.options[this.selectedIndex].value" class="select"> <option>Select a autor</option> <?php // Autoren abfragen $sql = mysql_query("SELECT autor FROM layouts GROUP BY autor"); while($rows = mysql_fetch_object($sql)){ echo "<option value=\"".$rows->autor."\">".$rows->autor."</option>\n"; } ?> </select> </fieldset> </form> <br /> <form action="" method="get"> <fieldset> <legend>Browse by Series</legend> <select name="series" onchange="window.location.href='layouts.php?cat='+this.options[this.selectedIndex].value" class="select"> <option>Select a series</option> <?php // Autoren abfragen $query = mysql_query("SELECT cat, COUNT(cat) AS anzahl FROM layouts GROUP BY cat"); while($rowq = mysql_fetch_object($query)){ echo "<option value=\"".$rowq->cat."\">".$rowq->cat."(".$rowq->anzahl.")</option>\n"; } ?> </select> </fieldset> </form> </div> <div id="footer"> <p class="right"> Valid <a href="http://validator.w3.org/check/referer" title="This page validates as XHTML 1.0 Transitional"><abbr title="eXtensible HyperText Markup Language"> XHTML</abbr></a> | Valid <a href="http://jigsaw.w3.org/css-validator/check/referer" title="CSS ist valide!"><abbr title="Cascading Style Sheets"> CSS</abbr></a> </p> <p><a href="http://unnecessary.de">Grafixx LayoutManager</a> <a href="http://alice-grafixx.de">Alice-Grafixx.de</a></p> </div> </div> </body> </html>
Step 11 - Verzeichnis layouts
Als finalen Schritt legen wir nun noch einen Ordner mit der Bezeichnung layouts an, dieser muss CHMOD 777 verpasst bekommen, in den dann die Layouts hochgeladen werden koennen...
Wir haben also nun folgende Dateien:
- config.inc.php || Baut die Verbindung zur DB auf
- header.php || enthaelt Zugriffsschutz und einen Teil des HTML-Grundgeruestes
- footer.php || enthaelt den anschliessenden Teil des HTML-Grundgeruestes
- sidebar.php || enthaelt den Login/Logout und die Navigation
- admin.php || listet alle bisher hochgeladenen Layouts auf
- post_layout.php || Loeschen, Editieren und Eintragen von Layouts
- functions.php || Blaetterfunktion, Dateigroesse bestimmen, DB-Eintraege saeubern
- layouts.php || Ausgabe der Layouts
All diese Dateien sollte sich in ein und dem selben Ordner befinden, der Ordner layouts ebenfalls,ggf. muessen sonst die einzelnen Pfadangaben angepasst werden!
Ich denke dass die einzelnen Datein eigentlich recht gut auskommentiert sein sollten, deshalb war ich mal wieder so frei, mir eine genauer Beschreibung der einzelnen Dateien zu ersparen :D
Wichtig!
Damit das Script funktioniert, muss sich in der Zip-Datei eine index.html, eine index.htm oder aber eine index.php befinden!
Desweiteren darf das Layout nicht als Ordner gezipt worden sein.
Sollten es bei der Vorschau der Layouts nicht funktionieren, dann ist keine Index-Datei im Ordner des Layouts vorhanden, oder aber der Webspace ist so konfiguriert, dass beim Aufrufen eines Ordners der Ordnerinhalt aufgelistet wird, anstatt automatisch die Index-Datei anzuzeigen, sollte dies der Fall sein, so kann man sich mit einer .htaccess Datei Abhilfe schaffen.
Die .htaccess Datei muss in den Ordner layouts gesteckt werden und sollte folgende Zeile enthalten:
DirectoryIndex index.html index.php
Viel Spass damit,
sollten Fragen zum Layout Manager auftauchen oder gar Probleme damit bestehen, bitte die Kommentarfunktion hier nutzen ;)
Tutorial Dateien 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 ...