Loading...   Upload Image

DownloadScriptTutorials » PHP/MySQL Tutorials » DownloadScript

Verfasst von Alice am 31.01.2012 - wurde schon 9495 mal gelesen

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

Tag - Schlagwort Tutorial Tag - Schlagwort PHP Tag - Schlagwort Upload Tag - Schlagwort Script

DownloadScript - Tutorial

Ich hab schon lange mehr keinen Tutorial-Wunsch erfuellt, also hab ich mir den Erstbesten geschnappt und in die Tat umgesetzt ..

Ich würde mich total freuen wenn du ein einfaches Download-Script machen würdest! Also eins wo man eine ganz beliebige Datei und ein VorschauBild dazu hochladen kann, egal ob es jetzt eien zip-Datei oder einfach ein .jpg ist. Vielleicht noch mit einer Anzeige wann die Datei hochgeladen wurde und einer kurzen Beschreibung...?

Nun denn, ich bin sogar noch einen Schritt weiter gegangen als gewuenscht wurde...
- der Dateiupload ist mittels Username u. Passwort gesichter, damit niemand ungewollte Dateien hochladen kann
- die Downloads koennen in Kategorien eingeteilt werden
- die Anzahl der Downloads jeder Datei wird mitgezaehlt
- bei bestimmte Dateitypen wie z.B. (.jpg, .gif, .png) wird ein Download erzwungen,
nicht so wie hier auf Alice-Grafixx z.B. mit den Texturen,
die der User mittels Rechtsklick->Speichern unter selbst herunterladen muss

Was wird benoetigt?


- PHP / MySql Grundkenntnisse
- 1 MySql Datenbank
- Webspace der PHP unterstuetzt

Wie schauts aus?


- Downloadbereich
- Admin Uebersicht
- Download eintragen

Step 1


Als Erstes erstellen wir zunaechst einmal eine neue Tabelle 'grafixx_downloads' in der Datenbank,
in welche wir spaeter dann die Daten der einzelnen Downloaddateien (nennt man das so?) einzutragen gedenken...
CREATE TABLE IF NOT EXISTS `grafixx_downloads` (
`id` int(22) NOT NULL AUTO_INCREMENT,
`titel` varchar(255) NOT NULL,
`beschreibung` text NOT NULL,
`cat` varchar(255) NOT NULL,
`icon` varchar(255) NOT NULL,
`datei` varchar(255) NOT NULL,
`date` datetime NOT NULL,
`downloads` int(22) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
);


Step 2 - Datenbank Verbindung u. Funktionen | config.inc.php


Config.inc.php heisst unsere Datei mit der wir eine Verbindung zur Datenbank herstellen,
welche ausserdem bestimmte Funktionen, wie z.B. eine Blaetterfunktion, beinhaltet, welche wir im Download-Script benoetigen.

Error ...

\n

".$var."

\n
\n"; return $fehler; } // Funktion um no error ausgeben function get_okay($var){ $fehler = "

Prima ...

\n

".$var."

\n
\n"; return $fehler; } //-------------------------------------------------------------------------------------------- // // Blaetterfunktion => Seitennavigation //-------------------------------------------------------------------------------------------- // // 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[] = "« Erste ...\n"; } if($go != 1){ // Link definieren => eine Seite zurueck blaettern $prev = $go-1; $links[] = "«\n"; } for($i = $off; $i <= ($go + $danach); $i++){ // einzelne Seitenlinks erzeugen if ($i != $go){ // Link definieren $links[] = "$i\n"; }elseif($i == $seiten) { // aktuelle Seite, ein Link ist nicht erforderlich $links[] = "$i\n"; }elseif($i == $go){ // aktuelle Seite, ein Link ist nicht erforderlich $links[] = "$i\n"; } // close if $i }// close for if($go != $seiten){ // Link definieren => eine Seite weiter blaettern $next = $go+1; $links[] = "»\n"; } if($seiten - $go - $p > 0 ){ // Link definieren => Zur letzen Seite springen $last = $seiten; $links[] = "... Letzte »\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 "
\n"; echo "Seite $go von $seiten\n"; echo $link_string; // Ausgabe der Seitennavigation echo "
\n"; } //close ausgabe // -------------------------------------- Seitennavigation ende -------------------------------- return array($start, $ende); } // close function ?>


Step 3 - Adminbereich ~ Dateiverwaltung | admin.php


Die Datei admin.php ist mit einem Loginbereich versehen, so dass niemand unbefugt Dateien hochladen kann.
Sie bietet eine Uebersicht aller bisher hochgeladenen DownloadDateien, wenn man mit derm Maus ueber den Titel der DownloadDateie faehrt wird das Vorschaubild

eingeblendet, es wird ein Link zum Loeschen der DownloadDatei angeboten und eben das Formular zum Eintragen eines Downloads...
In die admin.php wird die config.inc.php eingebunden (include()), bitte hier dann darauf

achten, dass der Pfad angepasst wird, sollten sich beide Dateien nicht in ein und dem selben Ordner befinden!
 Login 
}

ob_start();	// startet den Ausgabepuffer => no header allready send error ;)
?>




Grafixx DownloadScript










Bisher wurden noch keien Datein hochgeladen...

\n

"; echo "

Datei hochladen

\n"; }else{ echo ""; } } //------------------------------------------------------------------ // // Upload Loeschen //------------------------------------------------------------------ // if(isset($_GET['do']) && isset($_GET['id']) && ($_GET['do'] == 'delete')){ if(isset($_GET['id'])) $id = clean_it($_GET['id']); if(isset($_GET['mod'])) $mod = clean_it($_GET['mod']); if(isset($_GET['mod'])){ // DB Abfrage => Datei/Bild - Daten $query = mysql_query("SELECT icon, datei FROM ".$tabelle." WHERE id = '".$id."'"); $row = mysql_fetch_object($query); if (unlink($upload_dir.$id.$row->datei) && unlink($upload_dir_img.$id.$row->icon)){ // Bild u. Datei loeschen // DB Eintrag loeschen $loeschen = mysql_query("DELETE FROM ".$tabelle." WHERE id='$id'"); if($loeschen){ header("Location: $pfad"); }else{ echo get_error('Es ist ein Fehler aufgetreten'); } }else{ echo get_error('Das Bild konnte nicht geloescht werden'); } }else{ echo "

Ganz sicher Eintrag loeschen?

"; echo "

   Ja, Loesch den Mist!   "; echo "  Nein, doch lieber nicht ...  



\n"; } } //------------------------------------------------------------------ // // Upload eintraegen //------------------------------------------------------------------ // if(isset($_GET['do']) && ($_GET['do'] == 'upload')){ if (isset($_POST['submit'])){ // Sofern auf hochladen geklickt wurde $titel = clean_it($_POST['titel']); // Variable definieren $msg = clean_it($_POST['beschreibung']); // Variable definieren $cat = clean_it($_POST['cat']); // Variable definieren $new_cat = clean_it($_POST['new_cat']); // Variable definieren if(empty($titel)){ // pruefen ob alles ausgefuellt wurde echo get_error('Bitte Danke alle benoetigten Felder ausfuellen!'); }else if(empty($cat) && empty($new_cat)){ echo get_error('Bitte danke Kategorie auswaehlen oder eine neue Kategorie angeben...'); }else if(!isset($_FILES['datei']['tmp_name']) OR (!isset($_FILES['image']['tmp_name']))){ // wenn kein Bild o. Datei angegeben echo get_error('Bitte danke Vorschaubild und Datei angeben...'); }else{ // sofern alles benoetigte angegeben // Die Dateiendung herausfiltern $datei = strrchr($_FILES['datei']['name'], "."); // Nun ist in $datei folgendes ethalten: .dateiendung $img_datei = strrchr($_FILES['image']['name'], "."); // Nun ist in $img_datei folgendes ethalten: .dateiendung // Prüfen, ob bei Datei die Dateigröße und die Dateiendung erlaubt ist! if ($_FILES['datei']['size'] >= $datei_max_size && !in_array($datei, $datei_type) OR $_FILES['image']['size'] >= $datei_max_size && !in_array($img_datei, $datei_type_img)){ echo get_error('Die Dateiendung ist nicht erlaubt, oder die Datei war zu gross ...'); // Fehler ausgeben }else{ // alles korrekt => hochladen if(empty($cat)){ $cat = $new_cat; }else{ $cat = $cat; } // for kategorie // DB Eintrag $eintragen = mysql_query("INSERT INTO ".$tabelle." (titel, cat, icon, datei, date, beschreibung) VALUES ('$titel','$cat', '$img_datei', '$datei', now(), '$msg')"); if (mysql_errno() == 0) { // Wenn MySQL keine Fehler hat dann.. $id = mysql_insert_id(); // letztw id auslesen $img_datei_file = $upload_dir_img.$id.$img_datei; // <= NEUER DATEI NAME - IMGs $datei_file = $upload_dir.$id.$datei; // <= NEUER DATEI NAME // Datei hochladen u. umbenennen move_uploaded_file($_FILES['image']['tmp_name'], $img_datei_file); move_uploaded_file($_FILES['datei']['tmp_name'], $datei_file); if (file_exists($datei_file) AND file_exists($img_datei_file)){ // Bild,Datei hochladen header("Location: $pfad"); // Weiterleiten }else{ echo get_error('Der Upload war nicht erfolgreich :('); } } else { // Wenn MySQL Fehler.. echo get_error("Der Eintrag war leider nicht erfolgreich! ".mysql_error()."\n"); } }// Bild hochgeladen }// close empty }// close isset // Formular ausgeben ?>
Datei Eintrag
Vorschaubild Erlaubte Dateitypen:


Neue Kategorie erstellen

Datei Erlaubte Dateitypen:

nicht eingeloggt if(isset($_POST['submit_login'])) { // wenn supbit gedrueckt $login_name = strip_tags($_POST['log_user']); // Variable definieren $login_pass = strip_tags($_POST['log_pass']); // Variable definieren if(empty($login_name) OR empty($login_pass)) { // Pruefen ob Username angegeben wurde $message .= 'Bitte geben Sie ihren Usernamen und das Passwort ein ...
'; $error = "1"; } if($login_name != $grafixx_name OR $login_pass != $grafixx_pass){ // Angaben auf Korrektheit pruefen $message .= 'Zugriff verweigert ...
'; $error = "1"; } if($error != "1"){ // Wenn kein Fehler war // session handle----------------------------- $_SESSION['grafixx_login'] = $_SERVER['REMOTE_ADDR']; // Session setzen header("Location: $pfad"); // Weiterleiten } if($error == "1"){ // Fehlermeldung ausgeben wenn vorhanden echo "

Error ...

\n

$message

\n"; } } // Login Formular ausgeben ?>
Grafixx Login




Step 4 - Ausgabe der Downloads | download.php


Die Datei download.php ist dafuer zustaendig alle zur Verfuegung stehenden Downloads aufzulisten,
sie bietet die Moeglichkeit die angebotenen Downloads nach Kategorien zu sortieren, zaehlt die Klicks eines jeweiligen Downloads und ist dafuer zustendig, dass die

Angebotene DownloadDatei auch wirklich heruntergeladen werden kann und nicht nur wie es z.B. bei Bildern in der Regel ueblich ist einfach angezeigt werden...
datei; // download-datei

        	// Dateidownload erzwingen
			header("Pragma: public");
			header("Expires: 0");
			header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
			header("Cache-Control: private",false);
			header("Content-Type: application/force-download");
			header("Content-Disposition: attachment; filename=\"".$id.$rows->datei."\";" );
			header("Content-Transfer-Encoding: binary");
			header("Content-Length: ".filesize($filename));
			readfile($filename);            
			header("Location: $url");
			exit();        
        }else{
  			 echo get_error('Es ist ein Fehler aufgetreten!');
        }    
        
} // close ID uebergeben 

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

?>




	Grafixx DownloadScript
	
	 
	
	
	

	



	
Downloads\n"; if(isset($_GET['cat'])){ // nur bestimmte Kategorie ausgeben $cat = clean_it($_GET['cat']); // Variable definieren $where = "WHERE cat = '".rawurldecode($cat)."'"; $pfad = $dpfad."?cat=".urlencode($cat)."&go="; // Pfad ermitteln }else{ // alle ausgeben $where = ""; $pfad = $dpfad."?go="; // Pfad ermitteln } $abfrage = mysql_query("SELECT id FROM ".$tabelle." ".$where." "); // DB Abfragen $total = mysql_num_rows($abfrage); // Anzahl der Zeilen in DB // ---------------------- Seitennavigationsdaten -------------------------------------------------- isset($_GET['go'])?$go = clean_it($_GET['go']):$go = ''; $per_page = 2; // 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($go, $total, $pfad, false, $per_page, $p); // ---------------------- ENDE Seitennavigationsdaten---------------------------------------------- $abfrage = mysql_query("SELECT id, titel, beschreibung, icon, cat, datei, downloads, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM ".$tabelle." ".$where." ORDER BY id DESC LIMIT $start,$ende"); if($total < 1){ // Pruefen ob Layouts vorhanden echo "

Zur Zeit existieren keine Downloads ...

"; }else{ echo "

Insgesamt sind derzeit ".$total." Downloads vorhanden ...

"; // wenn vorhandene - Kategorien auslesen $query = mysql_query("SELECT DISTINCT cat FROM ".$tabelle." "); if(mysql_num_rows($query) != '0'){ echo "
\n"; echo "\n \n

\n"; } // Layouts ausgeben ausgeben while($row = mysql_fetch_object($abfrage)){ echo "
\n"; echo "".$row->titel."\n"; echo "

".$row->titel."


\n"; echo "Kategorie: ".$row->cat."
\n"; echo "Datum: ".$row->datum."
\n"; if(empty($row->beschreibung)){ echo "

Keine Beschreibung vorhanden...

\n"; }else{ echo "

".$row->beschreibung."

\n"; } echo "
\n"; echo "Download (".$row->downloads.") \n"; echo "
\n"; } // close while echo "

"; // Blaetterfunktion aufrufen = > Ausgeben get_navi($go, $total, $pfad, true, $per_page, $p); } // close Eintrage vorhanden ?>


Step 5 - Verzeichnis files


Als finalen Schritt legen wir nun noch einen Ordner mit der Bezeichnung files an, dieser Ordner MUSS einen Ordner mit der Bezeichnung thumbs beinhalten, in welchen dann die vorschaubilder eines Downloads gesteckt werden koennen.

Wir haben also nun folgende Dateien:

- config.inc.php || Baut die Verbindung zur DB auf und enthaelt die genutzten Funktionen

- admin.php || enthaelt den Login/Logout, Uebersicht der Dateien, Dateiupload und das Loeschen der Dateien

- downloads.php || listet alle verfuegbaren Downloads uebersichtlich auch und bietet die Moeglichkeit diese herunterzuladen

Wichtig!

Alle hier verwendeten Dateien config.inc.php, admin.php und downloads.php, sowie der Ordner files, muessen sich im selben Verzeichnis befinden, sonst muessen die Pfadangaben angepasst werden!
Der Ordner files wieso sein Unterordner thumbs muessen ueber die entsprechenden Rechte ( CHMOD 755 ) verfuegen, sonst ist ein Upload von Dateien nicht moeglich!


Viel Spass damit,
sollten Fragen zum DownloadScript 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 ...


Neuste Tutorials

Neuste Forenthemen

Neuste Kommentare

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