|
|
User gesamt
|
:
|
2452962
|
User online
|
:
|
3
|
|
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
|
|
|
|
MyWebsolution.de Foren » Anfängerfragen PHP und MYSQL » Up- und Download von Dateien..
Seite:
|
1
2
3
>
|
Posts pro Seite: 5
10
20
|
Autor
|
Thread
|
26.01.2007 18:07 Uhr
|
Up- und Download von Dateien..
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Für viele die Schlagzeug spielen, ist es sehr mühsam Noten von verschiedenen Songs zu finden. Und für die wie mich, die nicht ganz der Profi sind, ist es auch zu schwierig sie selbst herauszuhören und sie zu schreiben. Also hab ich mir gedacht, mach ich ne Page, bei denen alle die Noten downloaden, jedoch nur registrierte user die Noten uploaden können, um so ein grosses Notenarchiv zu erschaffen. Sie ist eigentlich schon fast fertig, doch das wichtigste fehlt noch: Die Up- und Download seiten selbst.
Da ich noch keine Ahnung habe wie Uploadskripts gehen, brauche ich tutorials. Hat jemand schon solche gesehen oder kann mir einer gute empfehlen?
Wie ich das ganze umsetzen soll, muss ich mir auch noch genauer überlegen, vielleicht könnt ihr mir da auch weiterhelfen.
Ich mir das ganze irgendwie so vorgestellt:
Der User kann in einem fomular interpret, album, songname eingeben und schliesslich die dazugehörige datei auswählen. Wenn der das hochgeladen hat, muss ich es in meinem admin menü noch bestätigen und dann erscheint es auf der download seite in man zuerst der name anklickt, dann erscheint das album und schliesslich die songs wo er es downloaden kann.
Ich weiss noch nicht wie ich das anpacken soll, hoffe ihr helft mir... 
gruss mdean
|
|
|
26.01.2007 20:24 Uhr
|
|
Negura
|
Forenposter
|
|
registriert
|
06.12.2006
|
wohnt in
|
|
Beiträge
|
57
|
|
Hey,
ein Schlagzeuger, ist ja cool, ich bekomme meins nächste woche. *freu*
Naja, zu deinem Problem. Du hättest sicherlich was über google gefunden.
Zum hochladen allgemein:
http://www.php-einfach.de/tuts_php_datei_upload.php
http://www.it-academy.cc/article/1359/PHP:+Upload+per+HTTP.html
http://www.informationsarchiv.net/foren/beitrag-9942.html
Wie du das Problem löst:
Natürlich bekommen nur registrierte Benutzer die möglichkeit dateien hochzuladen, wurde die datei erfolgreich hochgeladen und die daten in der datenbank festgehalten, schickst du dir über dein system eine mail, die bei bestätigung, die hochgeladenen informationen freischaltet.
Hier findest du sicherlich scripte für alle deine benötigten Funktionen.
http://www.phpclasses.org/
also, nichts neues!
Viel Glück
Negura
|
|
|
28.01.2007 17:18 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Hmm ich hab jetzt ne andere Idee. Ich benütze fogendes Formular:
Interpret:
Album:
Songname:
Datei:
Wenn die Überprüfung fertig ist, und alles ok ist, erstellt es z.b. in einem ordner names upload, ordner. Und zwar zuerst den Interpretname, dann in diesem den albumnamen, und schliesslich in diesem alle songs.
Wenn das gemacht ist schreibt es auch noch interpret, album, songname und der user der es heraufgeladen hat, in meine DB. Anschliessend werde ich dann, die songs manuell in die downloadpage einfügen. Die DB brauche ich um zu sehen, welcher user, welche dateien heraufgeladen hat, um z.b. wenn er irgendwelche dummen sachen heraufgeladen hat, sein account dann zu löschen.
Bis jetzt hab ich aber nur die Idee... wie ich das verwirklichen soll weiss ich nicht.
|
|
|
28.01.2007 23:42 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Zitat: Anschliessend werde ich dann, die songs manuell in die downloadpage einfügen.
Schlechte Idee. Manuell geht dir irgendwann auf die nerven, erfahrungsgemäß 
Ich würde es folgendermaßen machen:
Formular anzeigen mit
- Interpret
- Album
- Songname
- Datei
Prüfungen beim Abschicken
- Ist der User eingeloggt
- Ist "Interpret" angegeben
- Ist "Songname" angegeben
(Album ist, denke ich, optional?)
- Hat die Datei
> die richtige Größe
> die richtige Endung
(evtl. den richtigen Mime-Typ)
Bei erfolgreicher Prüfung
- Datei umbenennen (time() und random())
- Datei in den Ordner ähm.. "noten" verschieben
- Daten in Datenbank speichern
> ID
> User ID
> neuer Dateiname
> Interpret
> Album
> Songname
> Freigabe (nicht im Query angeben, damit NULL eingefügt wird)
(evtl. den Timestamp, wegen Aktualitätsanzeige)
Downloadseite
- Datenbank auslesen, (WHERE Freigabe IS NOT NULL)
- Link erzeugen <a href="noten/$row['Dateiname']">$row['Interpret'] - $row['Songname'] ( $row['Album'] )</a>
So halt als grobe Übersicht, wie ich an die Sache rangehen würde. Musst dir halt die einzelnen Teilaufgaben vornehmen und ausprobieren.
|
|
|
31.01.2007 15:11 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Hm ok danke ich werds mal versuchen. Was genau meinst du mit Datei umbenennen? Was bezweckt das?
mdean
|
|
|
31.01.2007 21:16 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
mit umbenennen meine ich, nen zufallsnamen erzeugen.
Ansonsten müsstest du jedesmal prüfen, ob bereits eine Datei mit dem Namen existiert.
Beispiel:
Die Datei eines Users heißt Interpret1 - Song1
eine andere Datei heißt Interpret1 - Song2
-> kein Problem
aber, die nächste Datei ist meinetwegen von nem anderen Album und heißt auch wieder
Interpret1 - Song1, dann wird die erste Datei überschrieben, weil nicht 2 Dateien mit dem gleichen Namen im gleichen Ordner existieren dürfen.
|
|
|
01.02.2007 18:37 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
aha ok danke..
Bräuchte noch Hilfe bei einzelnen Codeschnipsel:
1. Wie Prüfe ich ob überhaupt eine Datei ausgewählt wurde?
2.Wie übergebe ich am Schluss den Namen des Users, der die Datei geladen hat in die DB?
'".mysql_real_escape_string(trim(???))."' ;
3. Den Mime-Typ von Bildern ist ja z.B. image/pjpeg. Weisst du wie derjenige von pdf ist?
Hoffe ich nerve nicht zu fest mit meinen Fragen
mdean
|
|
|
01.02.2007 20:25 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Zitat: 1. Wie Prüfe ich ob überhaupt eine Datei ausgewählt wurde?
Wenn keine Datei ausgewählt wurde, wird eine Fehlermeldung erzeugt (glaube Fehlernummer 4).
Zitat:2.Wie übergebe ich am Schluss den Namen des Users, der die Datei geladen hat in die DB?
'".mysql_real_escape_string(trim(???))."' ; ;
Naja, also ich gehe mal davon aus, dass ein User eingeloggt sein muss, also kennst du ja seine ID ($_SESSION['UserID'] oder so). Mit der ID kannst du den Namen doch aus der Datenbank auslesen.
Zitat:3. Den Mime-Typ von Bildern ist ja z.B. image/pjpeg. Weisst du wie derjenige von pdf ist?
http://de.selfhtml.org/diverses/mimetypen.htm#uebersicht
Allgemein verwende ich zur Formularprüfung folgende Funktion:
PHP:
<?php
function checkUpload($_FILES, $maxsize)
{
$key = key($_FILES);
$errors = array();
// Uploadfehler prüfen
switch ($_FILES[$key]['error']){
case 1: $errors[] = "Bitte wählen Sie eine Datei aus, die <b>kleiner als ".$maxsize/(1024*1024)." MB</b> ist.";
break;
case 2: $errors[] = "Bitte wählen Sie eine Datei aus, die <b>kleiner als ".$maxsize/(1024*1024)." MB</b> ist.";
break;
case 3: $errors[] = "Die Datei wurde nur teilweise hochgeladen.";
break;
case 4: $errors[] = "Es wurde keine Datei ausgewählt.";
break;
default : break;
}
// Dateigröße prüfen
if($_FILES[$key]['size'] > $maxsize)
$errors[] = "Bitte wählen Sie eine Datei aus, die <b>kleiner als ".$maxsize/(1024*1024)." MB</b> ist.";
return $errors;
}
?>
$_FILES ist das Array aus dem Upload und $maxsize die maximale Dateigröße in Byte
|
|
|
02.02.2007 13:18 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Hab mal versucht etwas zu schreiben, aber es funktioniert noch nicht. Hab ich was falsch gemacht?
Hier der code:
PHP:
<?
error_reporting(E_ALL);
include '../conect.php';
$connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
if(isset($_POST['Send_x']) AND $_POST['Send_x'] == "Upload") {
$errors = array();
// Prüft, ob ein Interpret eingegeben wurde
if(trim($_POST['Interpret'])=='')
$errors[]= "Bitte geben Sie den Namen des Interpreten an.";
// Prüft, ob der Interpret mindestens 2 Zeichen enthält
elseif(strlen(trim($_POST['Interpret'])) < 2)
$errors[]= "Der Name des Interpreten muss mindestens 2 Zeichen lang sein";
// Prüft ob ein Album angegeben wurde
if(trim($_POST['Album'])=='')
$errors[]= "Bitte geben Sie den Namen des Albums an.";
// Prüft ob ein Songname eingegeben wurde
if(trim($_POST['Songname'])=='')
$errors[]= "Bitte geben Sie den Titel für den Song an.";
// Prüft ob der richtige Mime Typ vorliegt
$erlaubte_typen = array('image/pjpeg',
'image/jpeg',
'application/pdf'
);
if(!in_array($_FILES['datei']['type'], $erlaubte_typen))
$errors[] = "Der Mime-Typ ihrer Datei ist verboten.";
// Prüft ob die Datei die richtige Endung hat
$erlaubte_endungen = array('jpeg',
'jpg',
'pdf'
);
$endung = strtolower(substr($_FILES['datei']['name'], strrpos($_FILES['datei']['name'], '.')+1));
if(!in_array($endung, $erlaubte_endungen))
$errors[] = "Die Dateiendung muss .jpeg .jpg oder .pdf lauten. ";
// Prüft ob die Datei die richtige grösse hat
if($_FILES['datei']['size'] > 5*1024*1024)
$errors[] = "Bitte wählen Sie eine Datei aus, die kleiner als 5 MB ist.";
if(count($errors)){
echo "Ihre Datei konnte nicht gespeichert werden.<br>\n".
"<br>\n";
foreach($errors as $error)
echo $error."<br>\n";
}
else {
//Datei speichern
$uploaddir = 'noten/';
//Neuen Dateinamen erstellen
$Name = "DRUM_".substr(microtime(),-8).".".$endung;
//Upload
if (move_uploaded_file($_FILES['datei']['tmp_name'], $uploaddir.$Name)) {
$sql = "INSERT INTO
notes
(UserID,
Newname,
Interpret,
Album,
Songname,
Date
)
VALUES
('".mysql_real_escape_string(trim($_SESSION['UserID']))."',
'".mysql_real_escape_string(trim($Name))."',
'".mysql_real_escape_string(trim($_POST['Interpret']))."',
'".mysql_real_escape_string(trim($_POST['Album']))."',
'".mysql_real_escape_string(trim($_POST['Songname']))."',
CURDATE()
)
";
}
?>
|
|
|
02.02.2007 16:46 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Zitat: Hab mal versucht etwas zu schreiben, aber es funktioniert noch nicht. Hab ich was falsch gemacht?
Schwer zu sagen, was genau soll denn passieren und was passiert nicht?
Gibts ne Fehlermeldung?
Steht error_reporting(E_ALL); am Anfang?
Allgemein fällt auf, dass du den Query nicht ausführst, also es fehlt sowas wie mysql_query($sql);
Wie sieht dein Formular denn aus, hast du in der Definition auch enctype="multipart/form-data" stehen und die Uploadfelder richtig benannt/definiert?
|
|
|
02.02.2007 16:59 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
folgende Fehlermeldung kommt:
Parse error: parse error, unexpected $end
|
|
|
02.02.2007 17:20 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
dann haste irgendwo ne Klammer nicht zu gemacht
|
|
|
02.02.2007 17:42 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Jetzt kommen folgende Fehlermeldungen:
Notice: Undefined variable: errors in C:\Testserver\test\usercenter\up_skript.php on line 48
Notice: Undefined variable: endung in C:\Testserver\test\usercenter\up_skript.php on line 61
Notice: Undefined index: datei in C:\Testserver\test\usercenter\up_skript.php on line 64
Aber die variablen hab ich doch definiert...
Hier nochmals der code:
PHP:
<?
error_reporting(E_ALL);
include '../conect.php';
$connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
if(isset($_POST['Send_x']) AND $_POST['Send_x'] == "Upload") {
$errors = array();
// Prüft, ob ein Interpret eingegeben wurde
if(trim($_POST['Interpret'])=='')
$errors[]= "Bitte geben Sie den Namen des Interpreten an.";
// Prüft, ob der Interpret mindestens 2 Zeichen enthält
elseif(strlen(trim($_POST['Interpret'])) < 2)
$errors[]= "Der Name des Interpreten muss mindestens 2 Zeichen lang sein";
// Prüft ob ein Album angegeben wurde
if(trim($_POST['Album'])=='')
$errors[]= "Bitte geben Sie den Namen des Albums an.";
// Prüft ob ein Songname eingegeben wurde
if(trim($_POST['Songname'])=='')
$errors[]= "Bitte geben Sie den Titel für den Song an.";
// Prüft ob der richtige Mime Typ vorliegt
$erlaubte_typen = array('image/pjpeg',
'image/jpeg',
'application/pdf'
);
if(!in_array($_FILES['datei']['type'], $erlaubte_typen))
$errors[] = "Der Mime-Typ ihrer Datei ist verboten.";
// Prüft ob die Datei die richtige Endung hat
$erlaubte_endungen = array('jpeg',
'jpg',
'pdf'
);
$endung = strtolower(substr($_FILES['datei']['name'], strrpos($_FILES['datei']['name'], '.')+1));
if(!in_array($endung, $erlaubte_endungen))
$errors[] = "Die Dateiendung muss .jpeg .jpg oder .pdf lauten. ";
// Prüft ob die Datei die richtige grösse hat
if($_FILES['datei']['size'] > 10*1024*1024)
$errors[] = "Bitte wählen Sie eine Datei aus, die kleiner als 10 MB ist.";
}
if(count($errors)){
echo "Ihre Datei konnte nicht gespeichert werden.<br>\n".
"<br>\n";
foreach($errors as $error)
echo $error."<br>\n";
}
else {
//Datei speichern
$uploaddir = 'noten/';
//Neuen Dateinamen erstellen
$Name = "DRUM_".substr(microtime(),-8).".".$endung;
//Upload
if (move_uploaded_file($_FILES['datei']['tmp_name'], $uploaddir.$Name)) {
$sql = "INSERT INTO
notes
(UserID,
Newname,
Interpret,
Album,
Songname,
Date
)
VALUES
('".mysql_real_escape_string(trim($_SESSION['UserID']))."',
'".mysql_real_escape_string(trim($Name))."',
'".mysql_real_escape_string(trim($_POST['Interpret']))."',
'".mysql_real_escape_string(trim($_POST['Album']))."',
'".mysql_real_escape_string(trim($_POST['Songname']))."',
CURDATE()
)
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
echo "Vielen Dank!<br>\n".
"Ihre Daten wurden erfolgreich kopiert.\n<br>".
"Nach erfolgreicher Überprüfung, wird die Datei in der Downloadpage erscheinen.\n<br>";
}
}
?>
|
|
|
02.02.2007 17:53 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
PHP:
<?php
// Prüft ob die Datei die richtige grösse hat
if($_FILES['datei']['size'] > 10*1024*1024)
$errors[] = "Bitte wählen Sie eine Datei aus, die kleiner als 10 MB ist.";
}
?>
An dieser Stelle machst du ne Klammer zu, die nicht geöffnet wird. Diese Klammer schließt dann dieses if:
PHP:
<?php
if(isset($_POST['Send_x']) AND $_POST['Send_x'] == "Upload") {
?>
Darin werden aber die Variable $error und $endung definiert.
Naja wie dem auch sei, es liegt jedenfalls an der falschen Klammer, wäre jetzt etwas aufwendig dir zu erläutern, was dadurch alles falsch läuft
|
|
|
02.02.2007 18:33 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Danke! Klappt jetzt!
|
|
|
10.02.2007 14:43 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
So hab wieder eine Frage. Den Vorschlag den du mit der Downloadpage gebracht hast ist zwar gut, aber ich such was anderes. Ich hab mir das so vorgestellt:
Ich mach eine Buchstabennavi bei der die Leute den Anfangsbuchstaben jedes Interpreten auswählen können. Es werden dann alle Interpreten mit diesem Buchstaben angezeigt. Dann kann man einen Interpreten anklicken und schliesslich werden alle Noten von diesem aufgelistet.
Weisst du wie ich sowas machen könnte?
mdean
|
|
|
10.02.2007 15:01 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Den Buchstaben kannst du als $_GET-Parameter übergeben
download.php?interpret=e
Im Script prüfst du dann, ob 'interpret' übergeben wurde und führst dann, falls ja, einen MySQL-Query mit der LIKE Expression durch.
PHP:
<?php
// Navi-Links erzeugen
$alphabeth = array('a','b','c', ...);
foreach($alphabeth as $letter)
echo "<a href=\"".$_SERVER['PHP_SELF']."?interpret=".$letter."\"></a> | \n";
if(isset($_GET['interpret'])){
// auf ein Zeichen kürzen
$_GET['interpret'] = substr($_GET['interpret'],0,1);
$sql = "SELECT
Datei,
Interpret,
Titel
FROM
Interpret
WHERE
Name LIKE '".mysql_real_escape_string($_GET['interpret'])."%'
";
$result = mysql_query($sql);
// Ausgabe
}
else
echo "Wählen Sie bitte den Anfangsbuchstaben des gewünschten Interpreten aus.\n";
?>
Nicht getestet!
|
|
|
11.02.2007 10:34 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Die Abfrage funktioniert, sodass nur die noten angezeigt werden die eine Freigabe erhalten haben. Aber das mit der Navigation funktioniert nicht. Es wird einfach folgendes angezeigt:
| | | | | | | Wählen Sie bitte den Anfangsbuchstaben des gewünschten Interpreten aus.
Wie könnte man es noch so einstellen, dass am anfang einfach die Interpreten angezeigt werden mit dem Buchstaben a.
Danke für deine Hilfe
|
|
|
11.02.2007 14:37 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Zitat: Wie könnte man es noch so einstellen, dass am anfang einfach die Interpreten angezeigt werden mit dem Buchstaben a.
PHP:
<?php
$_GET['interpret'] = isset($_GET['interpret'])?$_GET['interpret']:'a';
?>
^-- an den Anfang schreiben.
Poste mal deinen bisherigen Code.
|
|
|
11.02.2007 14:54 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Also hier mal der von mir der abgeänderte code. Muss ich dann noch jeden Buchstaben einzeln reinschreiben (dass mit den "..." hat nicht funkioniert)? Ich habs jetzt einfach mal bis g gemacht.
PHP:
<?php
$_GET['Interpret'] = isset($_GET['Interpret'])?$_GET['Interpret']:'A';
// Navi-Links erzeugen
$alphabeth = array('A','B','C', 'D', 'E', 'F', 'G');
foreach($alphabeth as $letter)
echo "<a href=\"".$_SERVER['PHP_SELF']."?Interpret=".$letter."\"></a> | \n";
if(isset($_GET['Interpret'])){
// auf ein Zeichen kürzen
$_GET['Interpret'] = substr($_GET['Interpret'],0,1);
$sql = "SELECT
NewName,
Interpret,
Songname
FROM
notes
WHERE
Interpret LIKE '".mysql_real_escape_string($_GET['Interpret'])."%'
";
$result = mysql_query($sql);
// Ausgabe
}
else
echo "Wählen Sie bitte den Anfangsbuchstaben des gewünschten Interpreten aus.\n";
?>
|
|
|
Seite:
|
1
2
3
>
|
|
|
Powered by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
Designed by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
|
|
|
|
|