Hallo,
ich habe vor ein kleines Upload-Formular zu basteln. Habe auch schon einiges zusammenbekommen indem ich gegoogelt habe bis zum abwinken. Nun habe ich aber noch ein Problem, bei welchem ich einfach nicht weiter komme. Sitze jetzt schon ne ganze Woche dran aber ich kann den Fehler nicht finden. Da ich nicht genau weiß welche Codestückchen ich posten muß zeige ich euch mal den kompletten. Das was ich bisher habe sieht folgendermaßen aus: [code]<?php
/*
// Einstellungen für das Script
$AdminPasswort = “passwort”; // Upload Passwort
$AdminEmail = “email”; // Admin Email
$AdminNotify = 1; // Admin per Email informieren wenn eine Datei heruntergeladen wurde (1 = Ja | 0 = Nein)
$PfadZumScript = “scriptpfad”; // Komplette Webadresse zum Script
$Dateiendungen = array( “zip”, “rar”, “7z”, “pdf”, “jpg”, “jpeg”, “mp3”, “wav”, “mid”, “doc”, “xls”, “html”, “htm”, “ufo”); // erlaubte Dateiendungen
$StandardBetreff = “Eine neue Datei von User”; // Standardbetreff falls kein Betreff im Formular angegeben wurde
/* ******************************************************** /
/ ******* Ab hier nichts mehr ändern ******* /
/ ******************************************************** */
// Email auf Format pruefen
function checkEmail( $email )
{
$nonascii = “\x80-\xff”;
$nqtext = “[^\\$nonascii\015\012”]";
$qchar = “\\[^$nonascii]”;
$normuser = ‘[a-zA-Z0-9][a-zA-Z0-9_.-]’;
$quotedstring = “”(?:$nqtext|$qchar)+"";
$user_part = “(?:$normuser|$quotedstring)”;
$dom_mainpart = '[a-zA-Z0-9][a-zA-Z0-9._-]\.’;
$dom_subpart = ‘(?:[a-zA-Z0-9][a-zA-Z0-9._-]\.)’;
$dom_tldpart = ‘[a-zA-Z]{2,5}’;
$domain_part = “$dom_subpart$dom_mainpart$dom_tldpart”;
$pattern = “$user_part@$domain_part”;
if (!preg_match( "/^$pattern$/", $email ))
{
return FALSE;
}
else
{
return TRUE;
}
}
// DownloadLink fuer den Mailbody
function getDownloadLink( $DownloadHash )
{
global $PfadZumScript;
return <<<DOWNLOADLINK
Der nachfolgende Abschnitt wurde automatisch generiert.
{$_FILES[‘datei’][‘name’]} wurde von User auf Ihren Server geladen. Sie können diese Datei unter dem folgenden Link herunterladen:
{$PfadZumScript}index.php?aktion=download&datei={$DownloadHash}
Sollten Sie keine HTML-eMails empfangen können, kopieren Sie bitte den oben genannten Link in Ihren Internet-Browser.
DOWNLOADLINK;
}
/* ---------------------------------------- /
/ — Maximale Uploadgroesse ermitteln — /
/ ---------------------------------------- */
// Die Funktionen dieses Abschnitts stammen
// von http://www.webmaster-resource.de
function PHPINIWertUmwandeln( $Groesse )
{
$Werte[‘MB’] = 1048576;
$Werte[‘Mb’] = 1048576;
$Werte[‘M’] = 1048576;
$Werte[‘m’] = 1048576;
$Werte[‘KB’] = 1024;
$Werte[‘Kb’] = 1024;
$Werte[‘K’] = 1024;
$Werte[‘k’] = 1024;
while (list( $Schluessel ) = each( $Werte ))
{
if ((strlen( $Groesse ) > strlen( $Schluessel )) && (substr( $Groesse, strlen( $Groesse ) - strlen( $Schluessel )) == $Schluessel ))
{
$Groesse = substr( $Groesse, 0, strlen( $Groesse ) - strlen( $Schluessel ) ) * $Werte[$Schluessel];
break;
}
}
return $Groesse;
}
function UploadmoeglichkeitPruefen()
{
$Uploadmoeglichkeit = TRUE;
if (strtolower( @ini_get( ‘file_uploads’ ) ) == ‘off’ || @ini_get( ‘file_uploads’ ) ==0)
{
$Uploadmoeglichkeit = FALSE;
}
return $Uploadmoeglichkeit;
}
function MaximaleDateiuploadGroesseErmitteln()
{
$MaximaleDateiuploadGroesse = 0;
if ($Dateigroesse = ini_get( ‘upload_max_filesize’ ))
{
$MaximaleDateiuploadGroesse = PHPINIWertUmwandeln( $Dateigroesse );
}
if ($Postgroesse = ini_get( ‘post_max_size’ ))
{
$Postgroesse = PHPINIWertUmwandeln( $Postgroesse );
if ($Postgroesse < $MaximaleDateiuploadGroesse)
{
$MaximaleDateiuploadGroesse = $Postgroesse;
}
}
return $MaximaleDateiuploadGroesse;
}
function UploadLimit()
{
if (UploadmoeglichkeitPruefen())
{
$MaximaleDateiuploadGroesse = MaximaleDateiuploadGroesseErmitteln();
echo “<span style=“color: #FFFFFF; font-size: 0.8em; font-weight: normal;”>(max. Dateigröße: " .number_format( $MaximaleDateiuploadGroesse / 1024, 0, “,”, “.” ). " KB)”;
}
}
// --------------------------------------------------------------
// ------ HAUPTSCRIPT BEGINNT HIER ------
// --------------------------------------------------------------
if (isset( $_GET[‘aktion’] ) )
{
switch ($_GET[‘aktion’])
{
// ------------------------------
// — Neue Datei hochladen —
// ------------------------------
case ‘senden’:
if (isset( $_POST[‘send_file’] ) &&
$_POST[‘admin_passwort’] == $AdminPasswort &&
$_FILES[‘datei’][‘size’] > 0 !== false)
{
// Maskierung entfernen
if (get_magic_quotes_gpc())
{
$_POST = array_map( ‘stripslashes’, $_POST );
}
// Pruefen ob die Dateiendung erlaubt ist
$UploadDateiEndung = array_pop( explode( “.”, strtolower( $FILES[‘datei’][‘name’] ) ) );
if (!in_array( $UploadDateiEndung, $Dateiendungen ))
{
die( “Die angehängte Datei hat eine nicht erlaubte Dateiendung!” );
}
// Dateiendung ok
$ersetzen = array( ‘ä’ => ‘ae’, ‘ö’ => ‘oe’, ‘ü’ => ‘ue’, ‘ß’ => ‘ss’, ’ ’ => '’ );
$DateiNameNeu = strtr( strtolower( $_FILES[‘datei’][‘name’] ), $ersetzen );
$DownloadHash = md5( $DateiNameNeu );
$umask_alt = umask( 0 );
if (@move_uploaded_file( $_FILES[‘datei’][‘tmp_name’], $DateiNameNeu ))
{
// Mail Header
$MailHeader = “From:{$AdminEmail}<{$AdminEmail}>\n”;
$MailHeader .= “MIME-Version: 1.0\r\n”;
$MailHeader .= “Content-Type: text/html\n”;
$MailHeader .= “Content-Transfer-Encoding: 8bit\n”;
$MailHeader .= “Message-ID: <” .time(). " noreply@" .$_SERVER[‘SERVER_NAME’]. “>\r\n”;
$MailHeader .= “X-Mailer: PHP v” .phpversion(). “\r\n”;
// Mail Betreff
$MailBetreff = strlen( $_POST[‘mail_betreff’] ) > 3 ? htmlspecialchars( $_POST[‘mail_betreff’] ) : $StandardBetreff;
// Mail Body
$MailBody = nl2br( htmlspecialchars( $_POST[‘mail_text’] ) );
$MailBody .= getDownloadLink( $DownloadHash );
if (!@mail ( $AdminEmail, $MailBetreff, $MailBody, $MailHeader ))
{
$MailSendFehler = true;
}
// CHMOD setzen
@chmod( $DateiNameNeu, 0755 );
umask( $umask_alt );
header( 'location: ’ .$_SERVER[‘PHP_SELF’]. ‘?status=UploadOK’ );
}
else // Upload-Fehler
{
umask( $umask_alt );
header( 'location: ’ .$_SERVER[‘PHP_SELF’]. ‘?status=UploadERROR’ );
}
}
elseif ($_POST[‘admin_passwort’] != $AdminPasswort)
{
$PasswortERROR = true;
}
break;
// -----------------------------
// --- Datei herunterladen ---
// -----------------------------
case 'download':
if (isset( $_GET['datei'] )&&
strlen( $_GET['datei'] ) == 32)
{
// Falls ein Trottel die Index-Datei runterladen will
if ($_GET['datei'] == md5( "index.php" ))
{
die( "Nice try ;-)" );
}
// angeforderte Datei ermitteln
foreach (glob( "*.*" ) as $Dateiname)
{
if ($_GET['datei'] == md5( $Dateiname ))
{
$DateiDownload = $Dateiname;
}
}
if ($DateiDownload)
{
// Datei senden und ggfs Admin benachrichtigen
header( "Content-Type: application/octet-stream" );
header( "Content-Disposition: attachment; filename=\"" .$DateiDownload. "\"" );
header( "Content-Length: " .filesize( $DateiDownload ) );
header( "Pragma: no-cache" );
header( "Expires: 0" );
readfile( $DateiDownload );
// Benachrichtigung an Admin senden
if ($AdminNotify)
{
// Mail Header
$MailHeader = "From:{$AdminEmail}<{$AdminEmail}>\n";
$MailHeader .= "MIME-Version: 1.0\r\n";
$MailHeader .= "Content-Type: text/html\n";
$MailHeader .= "Content-Transfer-Encoding: 8bit\n";
$MailHeader .= "Message-ID: <" .time(). " noreply@" .$_SERVER['SERVER_NAME']. ">\r\n";
$MailHeader .= "X-Mailer: PHP v" .phpversion(). "\r\n";
// Mail Body
$AdminMailBody = "Soeben wurde die Datei {$DateiDownload} heruntergeladen.<br>";
@mail( $AdminEmail, "FileSend Datei wurde heruntergeladen", $AdminMailBody, $MailHeader );
}
}
else
{
$DownloadERROR = true;
}
}
break;
}
}
?>
User
<?php // Upload-Meldungen if ($_GET['status'] == 'UploadOK') echo '
Hinweis: Die Datei wurde erfolgreich übertragen!
'; if ($_GET['status'] == 'UploadERROR') echo '
F E H L E R: Die Datei konnte nicht übertragen werden!
Bitte stellen Sie sicher daß das Uploadlimit nicht überschritten wurde!
'; if ($PasswortERROR) echo '
Hinweis: Das angegebene Passwort ist nicht korrekt!
'; if ($MailSendFehler) echo '
Hinweis: Beim senden der eMail trat ein Fehler auf!
'; // Download-Meldung if ($DownloadERROR) echo '
Hinweis: Die angeforderte Datei konnte nicht gefunden werden!
'; ?>
Alle fertigen Uploads bleiben max. 30 Tage auf dem Server erhalten. Danach werden diese in der Regel automatisch gelöscht. Bei weiteren Fragen wenden Sie sich an den Administrator!
<?php
// tabelle
echo "
Dateiname | \n"; echo "Größe in KB | \n"; echo "Upload am | \n"; echo "
" . $datei . " | \n"; echo "".round($groesse, 2)." | \n"; echo "" . $aenderung . " | \n"; echo "
</fieldset>
</form>
Hier findet ihr einen kleinen "Up- & Downloadrechner". Mit diesem Rechner könnt ihr vor dem Upload die ungefähre Ladezeit einer Datei ermitteln.
Die mit * (Stern) gekennzeichneten Felder sind "Pflichtfelder" und sind für einen fehlerfreien Datei-Upload zwingend erforderlich. Der Upload kann je nach Verbindungsgeschwindigkeit mehrere Minuten in Anspruch nehmen. Bitte das Fenster in dieser Zeit NICHT schließen, da sonst der Upload unterbrochen wird!
Erlaubte Dateitypen:
zip, rar, 7z, pdf, jpg, jpeg, mp3, wav, doc, xls, html, htm, ufo
Die Upload-Geschwindigkeit ist abhängig von der Internetverbindung. Dateien mit mehreren MB (50, 100 oder mehr) dauern selbst mit DSL seine Zeit!
Auch wenn es den Anschein macht, das sich nichts mehr tut, bitte abwarten bis eine Rückmeldung im oberen Bereich unter "Upload Meldungen" erscheint.
</fieldset>
</form>
Die Upload-Geschwindigkeit ist abhängig von der Internetverbindung. Dateien mit mehreren MB (50, 100 oder mehr) dauern selbst mit DSL seine Zeit! Bitte abwarten bis eine Rückmeldung unter "Upload Meldungen" erscheint.
Zur Kontrolle findet ihr hier einen kleinen "Up- & Downloadrechner". Der Rechner wird in einem Pop-Up geöffnet. Bitte den Pop-Up Blocker für diese Funktion kurzzeitig deaktivieren.
[/code]
Das Formular funktioniert soweit und lädt auch die Dateien hoch, aber ich möchte gerne, das während des Ladens das Formular komplett ausgeblendet wird und gleichzeitig eine animierte Grafik mir einem Hinweistext eingeblendet wird. Das ausblenden klappt wunderbar, nur es wird weder im IE, noch im Firefox das DIV mit der Grafik und dem Text angezeigt.
Wo liegt der Fehler??? Ich finde ihn einfach nicht.
Habe folgendes Javascript genommen:
Head-Bereich: [code][/code]
Das einzublendende DIV sieht so aus:
[code]
Die Upload-Geschwindigkeit ist abhängig von der Internetverbindung. Dateien mit mehreren MB (50, 100 oder mehr) dauern selbst mit DSL seine Zeit! Bitte abwarten bis eine Rückmeldung unter "Upload Meldungen" erscheint.
Zur Kontrolle findet ihr hier einen kleinen "Up- & Downloadrechner". Der Rechner wird in einem Pop-Up geöffnet. Bitte den Pop-Up Blocker für diese Funktion kurzzeitig deaktivieren.
[/code]
Was mache ich falsch bzw. wo liegt der Fehler???
Habe da noch ein paar Wünsche wobei ich nicht weiß ob das in dieses Unterforum gehört. Und zwar hätte ich in meinem Formular noch gerne eine Angabe eingebaut, welche angibt in welches Verzeichnis die Dateien upgeloadet werden sollen. Also ein fest eingestelltes Verzeichnis. Im Moment lädt er die Dateien dort hin wo sich das Script befindet, möchte aber einen Extra-Ordner für die Uploads anlegen.
Außerdem hätte ich gerne noch einen Dateinamenvergleich. Zur Zeit ist es so, daß das Formular eine Namensgleiche Datei einfach überschreibt ohne zu fragen. Wäre schön wenn die Datei entweder automatisch umbenannt wird oder wenn ein Hinweis erscheint das diese Datei nicht hochgeladen werden kann, da der Dateiname schon existiert.
Was noch interessant wäre eine Funktion, welche nach einer bestimmten Zeit die entsprechenden Uploads automatisch löscht.
Und zu guterletzt bräuchte ich noch eine Funktion, welche mir die Uploads nach Upload-Datum sortiert. Angezeigt wird der Inhalt ja schon allerdings nicht nach Upload-Datum. Schön wäre auch eine Unterteilung in kb - MB - GB. Bisher wird nur kb angezeigt.
Kann mir da jemand helfend unter die Arme greifen? Bin noch Newbie in Sachen Javascript und PHP und tue mich da noch ein klein wenig schwer mich da rein zu denken. Komme zur Zeit nicht weiter.
Bitte um Hilfe…