1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[PHP] PHP Formmailer

Dieses Thema im Forum "PHP & Co." wurde erstellt von Mini-Leopard, 12.03.10.

  1. Mini-Leopard

    Mini-Leopard Rhode Island Greening

    Dabei seit:
    20.03.08
    Beiträge:
    476
    Hallo ihr lieben!

    Ich habe ein Problem mit meinem PHP Formmailer.
    Wahrscheinlich ist es wieder eine der typischen Nichtigkeiten, die man vermeiden kann,
    doch irgendwie stehe ich grad auf dem Schlauch und wäre glücklich, wenn mal einer von euch einen Blick drauf werfen würde:

    Code:
    <?php 
    
    $betreff = "Betreff";  
    
    $to = "[COLOR="red"]meine e-mail adresse[/COLOR]"; 
    
    $inhalt = "Name: $1name $2name\n $country\nBetrag min.: $ammin\nBetrag max.: $ammax\nNachricht: $message"; 
    
    mail ("$to", "$betreff", "$inhalt"); 
    header("location: [COLOR="red"]http://www.google.de[/COLOR]"); 
    ?>
    Jetzt frage ich mir nur, warum bei mir keine Mails ankommen, die den versprochenen Inhalt haben.
    Google.de wird irgendeine Adresse. Was da hinkommt weiß ich noch nicht.

    Die zweite Frage, die ich gleich anschließen könnte:
    Kann ich einen Text einrichten, der einfach 3 Sekunden lang angezeigt wird und erst DANN die Weiterleitung greift?



    Vielen Dank für jegliche Hilfe.
     
  2. lmb

    lmb Weisser Rosenapfel

    Dabei seit:
    12.01.09
    Beiträge:
    776
    PHP.net sagt:
    Das heisst, header() muss am Anfang stehen, der darauffolgende Code wird nicht ausgeführt.
    BTW sind auch einige Variablen nicht definiert.
    Anbieten würde sich eine Weiterleitung mit JS oder Meta-HTML ;)
     
  3. creative7even

    creative7even Jerseymac

    Dabei seit:
    23.02.05
    Beiträge:
    454
    Hallo.

    mit dem Header hat das nichts zu tun - die Funktion header():void darf nur dann aufgerufen werden wenn vorher kein Output produziert wurde (kein echo/print oder HTML-Code ausgegeben wurde).

    Auf welchem Server wird das Script ausgeführt? Was liefert ein einfaches Testmail? Kommt es an?
    Code:
    $ret = mail('your.email@foo.com', 'testmail', 'testmessage');
    var_dump($ret);
    
     
  4. Mini-Leopard

    Mini-Leopard Rhode Island Greening

    Dabei seit:
    20.03.08
    Beiträge:
    476
    Hey Leute!

    Ich habs jetzt!
    Mir ist grad einfach einwahnsinnig blöder Fehler aufgefallen.
    Ich hab lediglich eine Variable versehentlich überschrieben :|

    Habe aber jetzt ein neues Problem.
    Ich bekomme zwar eine e-mail vom Server. Allerdings ist diese leider leer.
    Sprich ich bekomme den Inhalt nicht definiert.

    Code:
    <?php 
    
    $betreff = "Anmeldung";
    
    $inhalt = ("Name: " & "$1name" & " " & "$2name" & "\n " & "$country" & "\nBetrag min.: " & "$ammin" & "\nBetrag max.: " & "$ammax" & "\nNachricht: " & "$message");
    
    mail ("[COLOR="red"][meine mail][/COLOR]", "$betreff", "$inhalt"); 
    
    echo "Vielen Dank für Deine Anmeldung!"
    
    ?>
    Wenn ich den Code umschreibe, also:

    Code:
    <?php 
    
    $betreff = "Anmeldung";
    
    $inhalt = ("Name: $1name $2name\n $country\n Betrag min.: $ammin\ nBetrag max.: $ammax\n Nachricht: $message");
    
    mail ("[COLOR="red"][meine mail][/COLOR]", "$betreff", "$inhalt"); 
    
    echo "Vielen Dank für Deine Anmeldung!"
    
    ?>
    dann bekomme ich zwar einen Inhalt in der Mail, allerdings nur die Namen der Variablen mit Dollar-Zeichen.
    Irgendwie eigenartig, oder?!

    Kann es sein, dass die Variablen nicht richtig vom Formular (HTML) befüllt werden?
    Wie rufe ich denn die Variablen im PHP auf? Ich sehe nicht im geringsten, dass da der Inhalt irgendwie übergeben wird :(

    Bei der zweiten Variante bekomme ich folgende Mail:


    Dankt für Hilfe.
     
    #4 Mini-Leopard, 13.03.10
    Zuletzt bearbeitet: 13.03.10
  5. creative7even

    creative7even Jerseymac

    Dabei seit:
    23.02.05
    Beiträge:
    454
    Strings werden mit einem Punkt verknüpft (nicht mit & -> das wäre ein Bitweises 'AND').
    Ausserdem ist es ein etwas eigenartiger Stil einzelne Variablen unter doppelte Hochkomma zu setzen. Der Inhalt wird zwar - anders als bei einfachen Hochkomma - übersetzt... naja...
    noch angemerkt zum Stil: verwende stets eine Sprache für Kommentare und Variablen (vorzugsweise EN). Variablen dürfen ruhig auch "sprechend" sein.

    der korrekte Code müsste ungefähr so aussehen:
    Code:
    $message = "Name: " . $firstname . " " . $lasntame . "\nBetrag: " . $maxAmount;
    
     
  6. Mini-Leopard

    Mini-Leopard Rhode Island Greening

    Dabei seit:
    20.03.08
    Beiträge:
    476
    Also die Schreibweise der Variablen ist ja mein Ding :)
    Ich komme so echt gut klar.

    Mit der zweiten Schreibweise geht das auch sehr gut:
    Mein einziges Problem ist, dass in den Variablen scheibar nichts drin steht.
    In meinem vorangegangenen Beitrag ist ja auch ein Zitat der e-mail, die ich vom Server bekomme.
    Sprich die Aufbereitung der e-mail funktioniert ohne Probeme.

    Kann ich irgendwie ein "Warnfenster" in Safari öffnen lassen, um den Inhalt der Variablen vor dem Absenden der Mail zu überprüfen? Ich glaube echt, dass die Variablen einfach leer sind bzw. das Formular (HTML) den Inhalt nicht übergibt!!!!

    Dazu eine Anregung / einen Tipp?


    Danke.
     
  7. Mini-Leopard

    Mini-Leopard Rhode Island Greening

    Dabei seit:
    20.03.08
    Beiträge:
    476
    Ich poste jetzt einfach mal die beiden Dateien (formular.html & send.php).

    formular.html:
    Code:
    <!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">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Anmeldung</title>
    </head>
    
    <body>
    
     <br><form action="senden.php" method="post"> 
    <table><tr> 
    <td>Vorname:</td> 
    <td><input type="text" name="1name"></td> 
    </tr> 
    <tr> 
    <td>Nachname:</td> 
    <td><input type="text" name="2name"></td> 
    </tr> 
    <tr> 
    <td>E-Mail:</td> 
    <td><input type="text" name="mail"></td> 
    </tr>  
    <tr> 
    <td>Land:</td> 
    <td><input type="text" name="country"></td> 
    </tr> 
    <td>Betrag min. (optional):</td> 
    <td><input type="text" name="ammin"></td> 
    </tr> 
    <td>Betrag max. (optional):</td> 
    <td><input type="text" name="ammax"></td> 
    </tr> 
    <td>Nachricht (optional):</td> 
    <td><input type="text" name="message"></td>
    </tr> 
    <td><input type="submit" name="senden" value="Apply!"></td> 
    </form> 
    <td></td> 
    <td> 
    </td> 
    </tr> 
    </table> 
    
    </body>
    </html>
    und send.php:
    Code:
    <?php 
    
    $betreff = "Anmeldung";
    
    $inhalt = ("Name: $1name $2name\n $country\n Betrag min.: $ammin\ nBetrag max.: $ammax\n Nachricht: $message");
    
    mail ("[meine mail]", "$betreff", "$inhalt"); 
    
    echo "Vielen Dank für Deine Anmeldung!"
    
    ?>

    Also wenn ich jetzt wirklich zu doof dafür bin, tu ich mir echt leid :D
    Aber ich finde meinen Fehler einfach nicht, egal, was ich probiere :mad:
     
  8. torben1

    torben1 Süsser Pfaffenapfel

    Dabei seit:
    05.08.08
    Beiträge:
    662
    Was passiert wenn Du die Variablen mit $_POST['name_im_formular'] ansprichst? Und Teste dann doch die Ausgabe mit echo.
    Dann sollte es funktionieren.

    Torben
     
  9. creative7even

    creative7even Jerseymac

    Dabei seit:
    23.02.05
    Beiträge:
    454
    Die Formulardaten werden je nach Methode (<form method="post|get">) in die globale PHP-Variable $_GET oder $_POST übertragen (für beide Methoden gibt es $_REQUEST). Mit var_dump($_POST) sollten alle Formulardaten (nachdem deine Form-Methode auf 'post' gestellt ist) angezeigt werden. Der Einzelzugriff erfolgt dann genau so wie torben1 es beschreibt.
     
  10. Mini-Leopard

    Mini-Leopard Rhode Island Greening

    Dabei seit:
    20.03.08
    Beiträge:
    476
    Also gehe ich davon aus, dass ich jede einzelne Variable aus dem $_POST ausklammern und die jeweilige Variable befüllen muss.
    Folgender Maßen:

    Code:
    <?php
    
    $1name = $_POST["1name"];
    
    $2name = $_POST["2name"];
    
    $mail = $_POST["mail"];
    und so weiter.

    Wenn ich das allerdings so mache, passiert gar nichts mehr.
    Das Script bleibt einfach stehen und gut ist.
     
  11. torben1

    torben1 Süsser Pfaffenapfel

    Dabei seit:
    05.08.08
    Beiträge:
    662
    Also wenn Du befolgt hättest was bisher geschrieben wurde sollte es auch klappen ;)

    z.B.
    Torben
     
  12. DubiDuh

    DubiDuh Zwiebelapfel

    Dabei seit:
    20.05.08
    Beiträge:
    1.288
    Und damit du bald nicht an das Problem stößt, dass deine Emails immer im Spam Ordner landen kannst du direkt den PHPMailer benutzen, welchen als Klasse bereits im netz gibt: http://phpmailer.worxware.com/index.php?pg=examples

    Dieses kleine Stück Code übernimmt alle deine Augaben, du brauchst nur die Parameter eigeben und den Rest macht der kleine Mailer für dich.
     
  13. Mini-Leopard

    Mini-Leopard Rhode Island Greening

    Dabei seit:
    20.03.08
    Beiträge:
    476
    Um Gottes Willen Freunde!

    Jetzt fühle ich mich zur Gänze verblödet!
    Danke Torben! Jetzt hab ich das mit dem $_POST[…].sowienoch verstanden!

    Hätte ich auch selber drauf kommen können.
    Aber manchmal steht man einfach auf dem Schlauch!

    Umso schöner, dass es solch eine tolle Community gibt, die so nett mit solchen auf-dem-Schlauch-Steher wie mir umgeht :)
    Danke noch mal.

    Das mit dem Spam-Filter hatte ich so um die 5-6 Mal. Aber jetzt hat sich mein Mail an meine Provider-Mail gewöhnt.
    Ich bekomme die Auto-Mails immer vom gleichen Absender. Und daher wird das ganze kein Problem darstellen.

    Aber trotzdem danke für den Link, DubiDuh. Fall ich auf die wahnsinnig tolle Idee kommen sollte, einen Autoresponder einzubauen, der eine Bestätigungsmail an den Absender des Formulares schickt, werde ich mich bestimmt damit beschäftigen.


    Vielen Dank an alle und mit diesen Worten schließe ich ab:
    ES GEHT!
     

Diese Seite empfehlen