Wo steckt der Fehler? – Bestellformular mit Upload, bin verzweifelt.

  • Hallo liebe Community,

    ich sitze jetzt schon ne weile an einem Upload Problem,
    nur weiß nicht wo das Problem stecken könnte.
    Für dieses Bestellformular, soll das Bild an mich gesendet werden
    und ein Upload Limit von 4 MB sollte bestehen.

    Könnte mir da vielleicht ein Profi helfen?

    Vielen Dank und viele Grüße
    Max


    <?php
    $geschmacksrichtung = $_POST['geschmacksrichtung'];
    $Filialen = $_POST['Filialen'];
    $Name = $_POST['Name']; // Name wird hier definiert
    $Vorname = $_POST['Vorname']; // Vorname wird hier definiert
    $Telefon = $_POST['Telefon']; // Anstellung wird hier definiert
    $Datumabholen = $_POST['Datumabholen']; // Stellenantritt wird hier definiert
    $Absender = $_POST['Absender']; // Absender wird hier definiert
    $Nachricht = $_POST['Nachricht']; // Nachricht wird hier definiert
    $Senden = $_POST['Senden']; // Button 'Senden' wird hier definiert
    $Löschen = $_POST['Löschen']; // Button 'Löschen' wird hier definiert
    function checkEmail( $Absender ) // E-Mail Überprufung
    {
    $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$/", $Absender ))
    {
    return FALSE;
    }
    else
    {
    return TRUE;
    }
    }
    if(isset($Senden)){ // Überprüfung der MUSS - Felder

    if ($Name == "") {
    echo"<script type=\"text/javascript\"> alert(\"Sie haben ihren Namen nicht angegeben!\");</script>";
    } elseif ($Absender == "") {
    echo"<script type=\"text/javascript\"> alert(\"Sie haben ihre Email nicht angegeben!\");</script>";
    } elseif ($Telefon == "") {
    echo"<script type=\"text/javascript\"> alert(\"Sie haben keine Telefon Nr. angegeben!\");</script>";
    } elseif (!checkEmail( $_REQUEST['Absender'] )) {
    echo"<script type=\"text/javascript\"> alert(\"Die Email Adresse ist nicht gueltig!\");</script>";
    } else {

    while(list($Formularfeld, $Wert) = each($_REQUEST))
    {
    if($Formularfeld != "Send" && $Formularfeld != "Anhang")
    {
    $Header .= $Formularfeld.": ".$Wert."\n";
    }
    }

    $Header .= "\nDatum/Zeit: ";
    $Header .= date("d.m.Y H:i:s");
    $Header .= "\n";
    $Header .= "--$Trenner";
    $Header .= "\n";
    $Header .= "Content-Type: ";
    $Header .= $_FILES['Anhang']['type'];
    $Header .= "; name=";
    $Header .= $_FILES['Anhang']['name'];
    $Header .= "\n";
    $Header .= "Content-Transfer-Encoding: base64";
    $Header .= "\n";
    $Header .= "Content-Disposition: attachment; filename=";
    $Header .= $_FILES['Anhang']['name'];
    $Header .= "\n\n";
    $Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
    $Header .= chunk_split(base64_encode($Dateiinhalt));
    $Header .= "\n";
    $Header .= "--$Trenner--";

    $datum = date("d.m.Y"); // Aktuelles Datum und Zeit für E-Mail
    $uhrzeit = date("H:i");
    $datum=$datum ."-". $uhrzeit ."Uhr";


    $ich = "email@email.xx"; // E-Mail Adresse
    $betreffemail = "Bestellung"; // Betreff von E-Mail
    $Nachricht = " Bestellung \n\n
    Geschmacksrichtung: ".$geschmacksrichtung."
    Filialen: ".$Filialen."
    Vorname: ".$Vorname."
    Name: ".$Name."
    Telefon: ".$Telefon."
    Datum, Abholen am: ".$Datumabholen."
    E-Mail: ".$Absender."
    Nachricht: ".$Nachricht."
    gesendet am: ".$datum."

    ";
    mail($ich, $betreffemail, $Nachricht,
    "From: $Name $Vorname <$Absender>");
    echo "Besten Dank für Ihre Bestellung,"; // Text, der erscheint nach erfolgreichem Senden
    echo " ";
    print_r ($_POST['Vorname']);
    echo " ";
    print_r ($_POST['Name']);
    echo ".";
    echo "<br><br>Wir haben Ihre Bestellung erhalten.<br>";

    echo"<script type=\"text/javascript\"> alert(\"Vielen Dank!\");</script>";

    }
    }
    ?>
    <form action="<?php echo$_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post">
    <table width="567">
    <tr>
    <td align=right width="161">Vorname</td>
    <td width="394"><font color="#fff"><input type=text name="Vorname" size=50></font></td></tr>
    <tr>
    <td align=right width="161">Name</td>
    <td width="394"><font color="#fff"><input type=text name="Name" size=50></font></td></tr>
    <tr>
    <td align=right width="161"><font color="#fff">Telefon</font></td>
    <td width="394"><font color="#fff"><input type=text name=Telefon size=50 id="Telefon"></font></td></tr>
    <tr>
    <td align=right width="161">Geben Sie bitte ein Datum ein, an dem Sie Ihre Fototorte abholen möchten:</td>
    <td width="394"><font color="#fff"><input type=text name=Datumabholen size=50 id="Datumabholen"></font></td></tr>
    <tr>
    <td align=right width="161"><font color="#fff">E-Mail:</font></td>
    <td width="394"><font color="#fff"><input type=text name=Absender size=50></font></td></tr>
    <tr>
    <td align=right width="161">Geschmacksrichtung</td>
    <td width="394">
    <font color="#fff"><select name=geschmacksrichtung size=1 id="geschmacksrichtung">
    <option value="Vanillecreme">Vanillecreme</option><option value="Schokocreme">Schokocreme</option><option value="Erdbeercreme">Erdbeercreme</option></select></font>
    </td>
    </tr>
    <tr>
    <td align=right width="161">Filialen</td>
    <td width="394">
    <font color="#fff"><select name="Filialen" size="1" id="Filialen">
    <option value="Filiale1"> Filiale1 </option>
    <option value="Filiale2">Filiale2</option>
    <option value="Filiale3">Filiale3</option>
    <option value="Filiale4">Filiale4</option>
    </select></font>
    </td>
    </tr>
    <tr>
    <td align=right width="161">Nun hängen Sie Ihr Bild an (max. 4MB):*</td>
    <td width="394"><font color="#fff"><input name="Anhang" size="20" type="file"></font></td></tr>
    <tr>
    <td align=right width="161"><font color="#fff">Schreiben:</font></td>
    <td width="394"><font color="#fff"><textarea name=Nachricht cols=40 rows=6></textarea>
    <br>
    <input type="submit" value="Absenden" name="Senden">
    <input type="reset" value="Zurücksetzen" name="Löschen"></font>
    </td></tr></table></form>
    <?php
    }

    ?>

    • Rücke den Quellcode ordentlich ein
    • Benutze die Formatierungsmöglichkeiten (PHP-Button), um den Quellcode lesbar zu posten
    • Liefere ein Beschreibung deines Problems. Was geht nicht?
    • Überprüfe, ob der Upload überhaupt funktioniert hat.
    • Benutze nicht die mail-Funktion, sondern besser eine fertige Klasse w.z.B. den phpMailer
    • Füttere google mal mit: php_self xss
    • eMail-Adressen mit Umlauten werden nicht akzeptiert.

    Und zu guter Letzt:

    Richtig debuggen


    • Man bemerkt, dass ein Skript nicht das tut, was es soll.
    • Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL);
    • Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    • Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    • An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysql_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    • Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    • Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    • Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    • Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    Einmal editiert, zuletzt von Bandit (21. April 2012 um 13:35)