Frage zu einem Kontaktformular

  • Hallo ihr,

    ich bin gerade bisschen verzweifelt und dachte, dass ihr mir vielleicht helfen könnt. Das Kontaktformular, das ich gebaut habe funktioniert gut, abgesehen davon, dass die Telefonnummer nicht angezeigt wird. Da ich mich mit php kaum auskenne, weiß ich leider nicht, was ich eingeben muss, dass am Anfang oder am Ende der Email dann noch die Telefonnummer angezeigt wird. Hab es in ein paar Varianten versucht, aber komm leider nicht drauf.
    Danke schonmal !

    hier der Code:

    Liebe Grüße

    Sundream

  • Hey,

    du kannst variablen welche du außerhalb der mail deklariert hast in der email nutzen. Da rate ich dir mit htmlspecialchars dann die ausgabe in der email zu machen.

    Z.b. so :

    PHP
    $telefonnummer = $_POST['phone'] ; 
    
    
    $message = 'Sehr geehrte Damen und Herren, <br> <br>  Sie haben gerade unser Formular ausgefüllt. Anbei möchte ich ihnen noch die Telefonnummer geben.<br> Unsere Telefonnummer lautet '. htmlspecialchars($telefonnummer) .' <br><br> MfG, <br> Test Team';

    Du musst um Variablen darin zu verwenden den html teil kurz unterbrechen und mit den . Operator (welcher auch verkettungsoperator genannt wird) welche dann den php teil mit dem html teil wieder verkettet verwenden.
    Ebenso rate ich dir dringend bevor du die eingegebenen Daten weiterverarbeitest erstmal diese zu filtern. Zur Sicherheit. Dies kannst du mit der funktion filter_var machen, siehe -> http://php.net/manual/de/function.filter-var.php , dann brauchst du auch bei der ausgabe nicht bei jeder value sowie ausgabe strip_tags() zu verwenden.

    Wenn du die funktionen isset()/empty() und andere verwendest brauchst du diese nicht, wie du es gemacht hast, mit true oder false vergleichen zu lassen. Denn wenn du isset($deinevar) verwendest ist dies automatisch true die false variant von isset ist so : !isset($deineVar) . Und bei empty das selbe. empty() heißt leer und der gegenspieler ist !empty() dies heist dann nicht leer.

    Ich rate dir als erstes zu überprüfen ob das Formular abgesendet wurde, z.b. so:

    Dein HTML:

    HTML
    <form method = POST>
     <input></input> <!-- Die ganzen input und label tags -->
     
    <input type="submit" value="Formular absenden!" name="submitted"> <!-- Hier der submit button -->
    </form>

    Dein PHP:

    PHP
    if(isset($_POST['submitted'])) // damit überprüfst du ob das formular abgesendet wurde, denn  $_POST ist bei dem erstaufruf der kontaktseite leer und bekommt erst die infos nach dem absende dieses formulares
    {
        // führe was aus
    }

    Ebenso rate ich dir die mails mit dem PHP-Mailer zu machen. Siehe http://www.php-rocks.de/thema/51-html-…-phpmailer.html



    http://www.php-rocks.de/thema/51-html-…-phpmailer.html

    Gruß,
    Stef

    7 Mal editiert, zuletzt von Stef (12. Januar 2017 um 16:04)

  • Hey,
    vielen Dank für die Antwort, total lieb, werde mir auch den php-mailer mal anschauen :)
    Leider wollte ich eigentlich wissen, wie ich das machen kann, dass wenn in meinem Kontaktformular in dem Feld von der Telefonnummer etwas eingegeben wird, dass das dann auch in der Email auftaucht? :) Bis jetzt wird nur $message angezeigt, $phone fehlt und das hätte ich gerne entweder ganz oben in der Nachricht oder am Ende der Nachricht :)

    Liebe Grüße

    Sundream

    Einmal editiert, zuletzt von Arne Drews (12. Januar 2017 um 15:54) aus folgendem Grund: MOD: Duplikat entfernt

  • Du musst die Variable $phone in/an deine $message ranhängen. Wie, das hat dir Stef mit dem . Operator gesagt.

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

  • Sundream : Du musst den Verkettungsoperate ( den Punkt : . ) benutzen.

    Du hast eine Variable, die heißt : $phone. In dieser hast du den Wert aus dem Feld wo der User seine Telefonnummer angeben muss/soll.
    Nun nimmst du diese variable und packst sie in deine mailmessage rein.

    Achso du willst das diese abgesendeten Kontaktformulare zu dir geschickt werden als mail?
    Das habe ich nochnie gemacht aber man kann auch php-variablen mit dem verkettungsoperator verketten.

    Also wenn du die phonenumber mit der message magst würde ich jetzt mal eine neue variable erstellen und dann die var $message und $phone darin verketten und dann diese var in die mail funktion eintragen.

    Beispiel:

    So würde ich es machen. Probier es mal und gebe mal Rückmeldung bitte.

    Stef

  • Hey Stef,

    vielen vielen Dank ! Hat funktioniert ! :D Könnte die Telefonnummer aber irgendwie noch mit nem Absatz von der Message getrennt sein?
    Ich arbeite normalerweise nur mit html und css und ganz ganz selten mit sowas und bin grade etwas verloren...

    Hab auch gemerkt, dass meine Fehlermeldungen nicht funktionieren und versteh nicht warum :/

    Danke schonmal und nochmal !!

    Sundream

    Einmal editiert, zuletzt von Sundream (12. Januar 2017 um 17:20)

  • Bau einfach ein, zwei oder drei <br> für Zeilenumbrüche mit ein.

    Also z.B. so:

    PHP
    $usermessage = $message . '<br><br>' . $phone;

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

  • Hey,

    wie Gastl gesagt hat. Man kann <br>-tags (zeilenumbrüche) mit einfügen.

    Zu deinem Problem mit Ausgabe der Errors:

    Es lag an diesem if block :

    Falsch

    Dort hast du bei der ausgabe mit der foreach schleiche die variable $error in html geschrieben. So erkennt der PHP-Interpreter auf dem Server nicht das $error eine php-variable ist.
    Du erreichst es das dieser dies erkennt in dem du die php variable wieder mit dem verkettungsoperator mit den html tags verkettest. Siehe Beispiel:

    Richtig

    Ich würde dir raten für jedes input feld eine eigene Fehlermeldung zu machen.Dann erkennt auch der jenige der das Formular ausfüllt genau wo seine Fehler waren. 
    Ebenso rate ich dir immer bei dem hinzufügen der werte zu den variablen zuerst zu überprüfen ob diese werte vorhanden sind und wenn ja speichere die werte in die variablen wenn nicht setze die variable auf null.

    Siehe Beispiele:
    Fehlermeldungen:

    Überprüfung der Eingabe des Users:

    PHP
    // Hier sofort prüfen ob die User eingabe exsestiert und wenn ja diese der variable hinzufügen wenn nicht ist die variable null
        // Kurschreibweise :  wenn ? dann : sonst;
    
    
        $name        = isset($_POST['name'])  ?  $_POST['name'] : null;
        $email       = isset($_POST['email']) ? $_POST['email'] : null;
        $phone       = isset($_POST['phone'])  ? $_POST['phone'] : null;
        $betreff     = isset($_POST['betreff']) ? $_POST['betreff'] : null;
        $message     = isset($_POST['message']) ? $_POST['message'] : null;



    Natürlich kann man die Fehlermeldungen noch besser machen aber vorerst nur als Veranschaulichung gedacht.

    Gruß,
    Stef

    2 Mal editiert, zuletzt von Stef (12. Januar 2017 um 18:59)

  • Hallo Stef,

    vielen vielen Dank, dass du dir so eine Arbeit machst !

    Das mit dem <br> funktioniert nur leider nicht.. in der Email direkt steht dann <br>

    Mein Code sieht jetzt so aus:

    Liebe Grüße

    Sundream

    3 Mal editiert, zuletzt von Sundream (12. Januar 2017 um 20:13)

  • Hey,

    du kannst das was zu html gehört in einem ' ' lassen. Du brauchst nicht für ein <br> tag ein neues ' ' zu erstellen. Der Sinn dieser Operatoren ist etwas zu verketten/verbinden. Auch um PHP-Code mit HTML-Code zu verketten.

    PHP
    $usermessage = $message . ' <br> Telefonnummer: ' . $phone;

    Du hast den <br>-tag zu spät rein gemacht. Versuche es nochmal so bitte. Bei mir funktioniert es wenn ich es teste.

    Dies was ich auf dem Bild sehe kommt dadurch, dass du die datei einfach so im normalen Browser geöffnet hast. Jedoch brauchst du dafür einen Server der PHP auch unterstützt und auch umwandelt. Ich schlage dir for Xampp , https://www.apachefriends.org/de/index.html. Es ist ein lokaler Server. Mit dem du auf deinem PC, lokal, deine .php - codes testen kannst. Und online Server tuhen ja eigentlich alle PHP unterstützen die dafür ausgelegt sind.
    Ich benutze Xampp auch. Ist sehr gut.

    Gruß,
    Stef

  • Hallo Stef,

    bei mir kommen die Emails leider immer noch mit <br> Tag an... Gibt es noch Alternativen?

    Das auf dem Bild war schon auf nem richtigen Server, teste das immer bei bplaced.net, aber es hatte sich komplett zerschossen, habs dann aber irgendwie hinbekommen.
    Aber danke für den Tipp :)

    Liebe Grüße

    Sun

  • <br> ist in dem Falle Quatsch, da du keine HTML-Mail sendest, statt dessen muss du ein \n einbauen.

    PHP
    $usermessage = "$message \nTelefonnummer: $phone";


    Wenn du den phpMailer nutzen würdest, wäre das eindeutig besser, denn damit kannst du sehr leicht Mails im HTML-Format versenden.

  • Hey,

    ups sorry. Ich ging immer von ner html-mail aus. Mein Fehler.

    Btw. zu deinem Code nochmals :

    Bei der ausgabe der eingegeben daten vom user. Dort hast du immer isset(varname) geprüft ob dieser true ist:

    PHP
    <?php if(isset($_POST['varname']) === true)

    Du kannst das prüfen obs true ist weglassen, den isset prüft ja selbst ob die variable besteht und nicht null ist. Daraus kann eigentlich nur true führen. Und du kannst die variablennamen anstatt $_POST['varname'] verwenden. Ist denke ich viel besser so.

    Und bei value wenn du den wert der var wenn diese exsestiert und nicht null ist kannst du diese dann einfach so ausgeben, so wie du es gemacht hast ist es etwas aufwendiger:

    PHP
    <input type="text" name="betreff" id="betreff" value="<?php if(isset($varname)) print strip_tags($varname); ?>">

    Gruß
    Stef

  • Stef
    Deine Hilfsbereitschaft in allen Ehren, aber bitte gebe dir etwas mehr Mühe bei deinen Postings. Satzzeichen, Groß/Kleinschreibung helfen ungemein, denn bei manchen Sätzen von dir muss man min. 2x lesen, um zuverstehen, was du da geschrieben hast.

    Z.B. hier:


    Du kannst das prüfen obs true ist weglassen, den isset prüft ja selbst ob die variable besteht und nicht null ist. Daraus kann eigentlich nur true führen. Und du kannst die variablennamen anstatt $_POST['varname'] verwenden. Ist denke ich viel besser so.

    Dazu fällt mir nur ein "Hääää????" ein

    Einmal editiert, zuletzt von Bandit (13. Januar 2017 um 13:32)

  • @Bandit : Ich habe mir jetzt nochmals paar abschnitte durchgelesen und da stimm ich dir schon zu, besser nochmal bevor man was abschickt nochmals durchlesen. Muss besser darauf achten und dies verständlicher/einfacher erklären.

    Zitat

    Du kannst das prüfen obs true ist weglassen, den isset prüft ja selbst ob die variable besteht und nicht null ist. Daraus kann eigentlich nur true führen. Und du kannst die variablennamen anstatt $_POST['varname'] verwenden. Ist denke ich viel besser so.

    Mit dem meinte ich :
    Man kann die Überprüfung ob isset(varname) === true weglassen , denn isset() prüft ob die variable exsestiert/besteht und nicht null ist. Dadurch ist diese funktion, wenn die variable besteht und nicht null ist, schon true. Ebenso habe ich gesehen das du bei der ausgabe der value in den einzelnen input feldern $_POST['inputname'] verwendest. Ich empfehle dir, dass du diese $_POST-Daten in Variablen ablegst/steckst und zur Ausgabe sowie Weiterverarbeitung, die Variablen verwendest.

  • Hallo,

    vielen Dank, das mit dem Absatz hat funktioniert, den Rest muss ich mir noch genauer anschauen..
    Mein Problem jetzt ist, dass plötzlich ä,ö und ü nicht mehr funktionieren...
    Wisst ihr da vielleicht eine Lösung?

    Danke danke !

    Sun

  • Ich hab in php den Code eingefügt:

    PHP
    header('Content-Type: text/html; charset=ISO-8859-1');


    In html im <head> ist

    HTML
    <meta charset="UTF-8">

    deklariert. Jetzt funktionierts im Formular, aber auf der Website selbst nicht mehr....:confused: