Loading...   Upload Image

Layout ManagerTutorials » PHP/MySQL Tutorials » Layout Manager

Verfasst von Alice am 23.08.2009 - wurde schon 36605 mal gelesen

Kategorie: PHP/MySQL
Bewertung:
11x bewertet
Schwierigkeit: mittel
Kommentare: [ 94 ]

Tag - Schlagwort Script Tag - Schlagwort Tutorial Tag - Schlagwort PHP Tag - Schlagwort Layout Tag - Schlagwort Upload Tag - Schlagwort Blaetterfunktion

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`)
);


Dann legen wir gleich mal einen User an, die Daten bitte Anpassen!
INSERT INTO `user` (`id`, `name`, `email`, `passwort`) VALUES
(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`)
);


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> &nbsp;
		</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&amp;id=".$row->id."\">Bearbeiten</a>  \n";
    echo "<a href=\"post_layout.php?action=loeschen&amp;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 "&#xBB; ".$row->autor."\n";
	
	echo "<small><strong>".$row->datum."</strong> &#xBB; ".$row->size." &#xBB; <a href=\"".$row->preview."\" target=\"_blank\">Views (".$row->views.")</a> 

&#xBB; \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-Dateigröße - 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-Dateigröße - 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 / Dateigröße 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 / Dateigröße 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 / Dateigröße 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 / Dateigröße 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 auswählen</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&amp;mode=del&id=$id\" class=\"button\">&nbsp;&nbsp;Ja&nbsp;&nbsp;</a>";
	echo "&nbsp;&nbsp;<a href=\"admin.php\" class=\"button\">&nbsp;&nbsp;Nein&nbsp;&nbsp;</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\">&laquo; 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\">&laquo;</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\">&raquo;</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 &raquo;</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."&amp;autor=".$auto; // Pfad ermitteln
}

if(isset($_GET['cat'])){ // nur bestimmte Serie

	$cats = clean_it($_GET['cat']); // Variable definieren

	$where = "WHERE cat = '".$cats."'";
	$pfad = $pfad."&amp;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&amp;id=<?= $row->id; ?>" class="button" target="_blank"> Preview <small>(<?= $row->views; ?>)</small> </a>&nbsp;&nbsp;&nbsp;
<a href="layouts.php?do=download&amp;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">&#xBB; 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> &nbsp;
		</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 ...


Affiliates:   Blue-Graphics  •   Design Grafixx  •   The Seduction  •   Chibi Graphics  •   Pat DG  •   Gallery Yuri  •   Colorful Gfx  • Show all ...
designenlassen.de - Der Design-Marktplatz für Webdesign, Logo-Design, Flyerdesign u.v.m.        ALL-INKL.COM - Webhosting Server Hosting Domain Provider