ChaosRacer
Grünschnabel
Hallo zusammen,
muß als allererstes dazu sagen, daß ich im Bereich PHP absoluter Neulinh bin. Kenne mich zwar einigermaßen mit HTML aus aber PHP da bin ich noch nicht ganz soweit. Habe ein Problem mit nem Upload-Formular, welches ich im Netz gefunden und etwas auf meine Bedürfnisse angepasst habe. Leider läuft es nicht ganz so wie ich es mir vorstelle und ich komme leider auch nicht ganz dahinter wo die Fehler liegen könnten.
Folgendes Problem: Ich möchte gerne eine Grafik während des Uploads einblenden lassen. In der gleichen Zeit soll auch das Feld "Upload" nicht mehr sichtbar und anklickbar sein. Wenn der Upload beendet ist, soll das Formular wieder ganz normal angezeigt werden ohne diese Grafik.
Hier der Quelltext:
Normalerweise sollte man nur einen Teil posten denke ich, aber da ich nicht weiss wo ich suchen muß, hoffe ich das mir hier jemand helfen kann. Sollte ich das alles in eine Datei schreiben oder vieleicht in mehrere php-Dateien aufteilen? Wie würde das dann gehen und wer kann mir sagen wie ich das oben genannte Problem in den Griff bekomme?
Sollte im IE und im Firefox funktionieren. Das wäre schon sehr wichtig. Danke im voraus.
Gruß
ChaosRacer
muß als allererstes dazu sagen, daß ich im Bereich PHP absoluter Neulinh bin. Kenne mich zwar einigermaßen mit HTML aus aber PHP da bin ich noch nicht ganz soweit. Habe ein Problem mit nem Upload-Formular, welches ich im Netz gefunden und etwas auf meine Bedürfnisse angepasst habe. Leider läuft es nicht ganz so wie ich es mir vorstelle und ich komme leider auch nicht ganz dahinter wo die Fehler liegen könnten.
Folgendes Problem: Ich möchte gerne eine Grafik während des Uploads einblenden lassen. In der gleichen Zeit soll auch das Feld "Upload" nicht mehr sichtbar und anklickbar sein. Wenn der Upload beendet ist, soll das Formular wieder ganz normal angezeigt werden ohne diese Grafik.
Hier der Quelltext:
PHP:
<?php
/*
+--------------------------------------------------------+
| Applikation : phpBuddy.eu FileSend |
| Version : 1.0 |
| Release Datum: 02. September 2007 |
+--------------------------------------------------------+
| Copyright (C) 2007 by Andreas Skodzek |
| Email: webmaster@phpbuddy.eu |
| Web : http://www.phpbuddy.eu |
| |
| Dieses Programm ist freie Software. Sie können es |
| unter den Bedingungen der GNU General Public License, |
| wie von der Free Software Foundation veröffentlicht, |
| weitergeben und/oder modifizieren, entweder gemäß |
| Version 3 der Lizenz oder (nach Ihrer Option) jeder |
| späteren Version. |
| |
| Die Veröffentlichung dieses Programms erfolgt in der |
| Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE |
| IRGENDEINE GARANTIE, sogar ohne die implizite Garantie |
| der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN |
| BESTIMMTEN ZWECK. |
| Details finden Sie in der GNU General Public License. |
| Sie sollten ein Exemplar der GNU General Public License|
| zusammen mit diesem Programm erhalten haben. Falls |
| nicht, siehe <http://www.gnu.org/licenses/>. |
| ------------------------------------------------------ |
| Haftungsausschluss: |
| Die Benutzung dieses Programms geschieht auf eigene |
| Gefahr. Weder der Author, noch phpBuddy.eu, sind für |
| eventuell auftretende Schäden und/oder Datenverluste |
| verantwortlich noch haftbar zu machen. |
| ------------------------------------------------------ |
| Rechtlicher Hinweis: |
| Es ist nicht gestattet die Copyright-Hinweise des |
| Authors oder phpBuddy.eu ohne vorherige schriftliche |
| Erlaubnis zu entfernen. Dies betrifft alle sichtbaren |
| (im HTML Teil) wie auch unsichtbaren (Kopfteil Scripts)|
| Copyright Hinweise. |
+--------------------------------------------------------+
*/
// Einstellungen für das Script
$AdminPasswort = "passwort"; // Upload Passwort
$AdminEmail = "emailadresse@mailprovider.de"; // 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
<br><hr><br>
Der nachfolgende Abschnitt wurde automatisch generiert.<br>
Die für Sie hinterlegte Datei kann unter der folgenden Adresse heruntergeladen werden:<br>
<a href="{$PfadZumScript}index.php?aktion=download&datei={$DownloadHash}">{$_FILES['datei']['name']}</a><br>
Sollten Sie keine HTML-eMails empfangen können, rufen Sie bitte folgende Adresse in Ihrem Browser auf:<br>
{$PfadZumScript}index.php?aktion=download&datei={$DownloadHash}<br><br>
Nach erfolgreichem Download können Sie die Datei mit dem folgenden Link löschen:<br>
<a href="{$PfadZumScript}index.php?aktion=loeschen&datei={$DownloadHash}">{$_FILES['datei']['name']} löschen</a><br>
Falls Sie keine HTML-eMail empfangen können, hier die Adresse für den manuellen Aufruf:<br>
{$PfadZumScript}index.php?aktion=loeschen&datei={$DownloadHash}<br>
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)</span>";
}
}
// --------------------------------------------------------------
// ------ 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 &&
checkEmail( $_POST['mail_empfaenger'] ) !== 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( htmlspecialchars( $_POST['mail_empfaenger'] ), $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;
}
elseif (checkEmail( $_POST['mail_empfaenger'] ) === false)
{
$EmailERROR = 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 <strong>{$DateiDownload}</strong> heruntergeladen.<br>";
$AdminMailBody .= "Die Datei kann über folgenden Link gelöscht werden:<br>";
$AdminMailBody .= "<a href=\"{$PfadZumScript}index.php?aktion=loeschen&datei={$_GET['datei']}\">{$DateiDownload} löschen</a>";
@mail( $AdminEmail, "FileSend Datei wurde heruntergeladen", $AdminMailBody, $MailHeader );
}
}
else
{
$DownloadERROR = true;
}
}
break;
// -------------------------------
// --- Datei vom FTP loeschen ---
// -------------------------------
case 'loeschen':
if (isset( $_GET['datei'] )&&
strlen( $_GET['datei'] ) == 32)
{
// Falls ein Trottel die Index-Datei loeschen will
if ($_GET['datei'] == md5( "index.php" ))
{
die( "Nice try ;-)" );
}
// Zu loeschende Datei ermitteln
foreach (glob( "*.*" ) as $Dateiname)
{
$DateiIndex[] = md5( $Dateiname );
if ($_GET['datei'] == md5( $Dateiname ))
{
if (@unlink( $Dateiname ))
{
$LoeschenOK = true;
}
}
}
if (is_array( $DateiIndex ))
{
if (!in_array( $_GET['datei'], $DateiIndex))
{
$LoeschenERROR = true;
}
}
}
break;
}
}
?>
<!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" lang="de">
<head>
<BODY bgcolor="#000000">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Upload-Bereich von User</title>
<style type="text/css">
<!--
* { margin: 0; padding: 0; }
body { text-align: center; font: normal 62.5% Verdana, Arial, Helvetica, sans-serif;}
#rahmen { width: 500px; margin: 1.5em auto; text-align: left; }
fieldset { padding: 0px 15px; border: solid 1px #FF0000; }
legend { font: bold 1.8em "Courier New", Courier, monospace; color: #FF0000; }
label { display: block; font-size: 1.2em; font-weight: bold; margin-top: 1.0em; color: #FF0000; }
input { width: 250px; }
textarea { width: 400px; height: 160px; }
input.file { width: 400px; }
input.button { width: 150px; margin: 25px 0px 20px 128px; }
h1 { font: bold 2.2em Arial, Helvetica, sans-serif; margin-bottom: 1.2em; text-align: center; }
h3 { font: bold 1.2em Verdana, Arial, Helvetica, sans-serif; }
p { font-size: 1.2em; text-align: justify; }
.hinweis { color: #FF0000; }
-->
</style>
<script type="text/javascript">
<!--
function checkForm()
{
var Fehlermeldung = "";
if (document.FileSend.admin_passwort.value == "")
{
Fehlermeldung += "Bitte das Passwort für den Upload eingeben!\n";
}
if (document.FileSend.datei.value == "")
{
Fehlermeldung += "Bitte eine Datei für den Upload auswählen!\n";
}
if (Fehlermeldung)
{
alert(Fehlermeldung);
return false;
}
else
{
return true;
}
}
// -->
</script>
</head>
<body>
<div id="rahmen">
<h1><font color="#FFFFFF">Herzlich Willkommen User</font></h1>
<?php
// Upload-Meldungen
if ($_GET['status'] == 'UploadOK') echo '<h3><span class="hinweis">Hinweis:</span> <font color="#FFFFFF">Die Datei wurde erfolgreich übertragen!</font></h3><br>';
if ($_GET['status'] == 'UploadERROR') echo '<h3><span class="hinweis">F E H L E R:</span> <font color="#FFFFFF">Die Datei konnte nicht übertragen werden!<br>Bitte stellen Sie sicher daß das Verzeichnis die benötigten CHMOD 777 Rechte hat und das Uploadlimit nicht überschritten wurde!</font></h3><br>';
if ($EmailERROR) echo '<h3><span class="hinweis">Hinweis:</span> <font color="#FFFFFF">Die angegebene eMail-Adresse hat kein gültiges Format!</font></h3><br>';
if ($PasswortERROR) echo '<h3><span class="hinweis">Hinweis:</span> <font color="#FFFFFF">Das angegebene Passwort ist nicht korrekt!</font></h3><br>';
if ($MailSendFehler) echo '<h3><span class="hinweis">Hinweis:</span> <font color="#FFFFFF">Beim senden der eMail trat ein Fehler auf!</font></h3><br>';
// Loesch-Meldungen
if ($LoeschenOK) echo '<h3><span class="hinweis">Hinweis:</span> <font color="#FFFFFF">Vielen Dank, die Datei wurde erfolgreich gelöscht!</font></h3><br>';
if ($LoeschenERROR) echo '<h3><span class="hinweis">Hinweis:</span> <font color="#FFFFFF">Die Datei konnte nicht gelöscht werden, da sie vermutlich bereits vom FTP-Server entfernt wurde!</font></h3><br>';
// Download-Meldung
if ($DownloadERROR) echo '<h3><span class="hinweis">Hinweis:</span> <font color="#FFFFFF">Die angeforderte Datei konnte nicht gefunden werden!</font></h3><br>';
?>
<form name="FileSend" id="FileSend" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?aktion=senden" enctype="multipart/form-data">
<fieldset>
<legend>Datei Upload</legend>
<p style="margin: 20px 0px; color: #FFFFFF;">Die mit * (Stern) gekennzeichneten Felder sind "Pflichtfelder" und sind für einen fehlerfreien Datei-Upload zwingend erforderlich.<br></p>
<label for="admin_passwort">Passwort*:</label><input type="password" name="admin_passwort" id="admin_passwort" />
<label for="mail_empfaenger">e-Mail Empfänger*:</label><input type="text" name="mail_empfaenger" id="mail_empfaenger" value="<?php echo $_POST['mail_empfaenger']; ?>" />
<label for="mail_betreff">eMail Betreff:</label><input type="text" name="mail_betreff" id="mail_betreff" value="<?php echo $_POST['mail_betreff']; ?>" />
<label for="mail_text">Nachricht:</label><textarea name="mail_text" id="mail_text"><?php echo $_POST['mail_text']; ?></textarea>
<label for="datei">Datei für den Upload: <?php UploadLimit(); ?></label><input type="file" name="datei" id="datei" size="50" class="file" /><br /><font color="#FFFFFF">Erlaubte Dateitypen: <br>zip, rar, 7z, pdf, jpg, jpeg, mp3, wav, doc, xls, html, htm, ufo</font>
<input type="submit" name="send_file" id="send_file" value="Upload & eMail senden" class="button" onClick="return checkForm();" />
<p><font color="#FFFFFF">Bitte nicht mehrfach auf "Upload & eMail senden" klicken. 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 des Upload-Formular's erscheint.<br><br></font></p></fieldset>
</form>
</div>
</body>
</html>
Normalerweise sollte man nur einen Teil posten denke ich, aber da ich nicht weiss wo ich suchen muß, hoffe ich das mir hier jemand helfen kann. Sollte ich das alles in eine Datei schreiben oder vieleicht in mehrere php-Dateien aufteilen? Wie würde das dann gehen und wer kann mir sagen wie ich das oben genannte Problem in den Griff bekomme?
Sollte im IE und im Firefox funktionieren. Das wäre schon sehr wichtig. Danke im voraus.
Gruß
ChaosRacer