Kontaktformular leitet nicht weiter- dringend

  • Hallo ihr,

    ich habe folgendes Problem:
    Auf der Seite http://www.zimmerei-kohlhepp.de/Kontakt.php leitet die php Datei nicht automatisch auf Kontakt.php?sent weiter. Gebe ich die Seite oben ein ist aber alles wie gewollt.. kann mir jemand sagen warum? Bei den Tests auf einem anderen Browser hats funktioniert. Für schnelle Antworten bin ich sehr sehr dankbar !

    Hier der php Code:

    - - - Aktualisiert - - -

    Gesendet werden die Emails aber, man bekommt nur keine Bestätigung..

  • Hallo,
    Ich kann anhand der Fehlerbeschreibung nicht zweifelsfrei erkennen, was das Problem ist!
    Erstens... die Seite leitet nicht automatisch weiter, sondern erst dann, wenn man auf 'Senden' klickt - oder?
    Wenn man das tut, wird die Seite aufgerufen, die als 'action' im Formular-tag steht.. da steht bei dir nix!!! ..<form action="" method="post">...
    Du gibst an, dass du eine Weiterleitung auf 'Kontakt.php?sent' erwartest! Das '?' signalisiert allerdings, dass ein GET-Parameter übergeben wird - in der Form-Anweisung spezifizierst du allerdings 'POST' als Methode!
    Bitte mal genau sagen, wo denn dein Problem nun tatsächlich ist?

    if(!sleep)

    {$sheep++;}

  • Hallo,

    mein Problem ist, dass ich wenn ich auf senden klicke nicht die Meldung unter dem Formular, dass es gesendet wurde angezeigt bekomme.
    Bei dem Formular hier funktioniert es einwandfrei: http://wolfstatze.de/Testordner/index.php
    Bei dem Formular hier bleibt der text nachdem ich auf senden geschickt habe stehen, die nachricht wird aber trotzdem gesendet. Was fehlt ist das leeren der Zeilen und die Meldung, dass es versendet wurde : Hier : http://zimmerei-kohlhepp.de/Kontakt.php
    Ich habe denselben Code verwendet und verstehe deshalb nicht, weshalb es bei dem einen funktioniert und bei dem anderen nicht...

  • Da ich bei dem zweiten Beispiel nicht den PHP Code sehen kann, kann ich keinen Unterschied erkennen!
    Aber überprüfe doch mal bitte die folgende Zeile in deinem Code:

    HTML
    $usermessage = "$message \n\nTelefonnummer: $phone";


    sollte das nicht

    HTML
    $usermessage = $message."\n\nTelefonnummer:".$phone;


    heißen?

    if(!sleep)

    {$sheep++;}

  • Der Code ist exakt derselbe, nur, dass ich diese Stelle ausgetauscht habe:

    PHP
    if (empty($errors))  {
            mail('Stefanie.Wolf96@gmx.de', $betreff,  $usermessage, 'From: ' . $email);
            header('Location: Kontakt.php?sent');
            exit();
        }
    PHP
    if (empty($errors))  {
            mail('Stefanie.Wolf96@gmx.de', $betreff,  $usermessage, 'From: ' . $email);
            header('Location: index.php?sent');
            exit();
        }

    Weil die eine Datei index.php heißt und die andere Kontakt.php

    Ansonsten sind sie exakt gleich..

  • Mir fällt da noch etwas auf.
    An welcher Stelle sendest du den GET Parameter 'Sent'?
    Direkt in deinem 'if(...' mit dem mail-Versand hast du ein exit() stehen. Wenn ich mich nicht täusche, dann wird die Verarbeitung weiteren Codes damit unterbunden... hmmm... wo soll dann eine Versandmeldung herkommen?

    if(!sleep)

    {$sheep++;}

  • Wie müsste es dann richtig sein? :)

    - - - Aktualisiert - - -

    Es funktioniert hald wirklich mit exakt demselben Code bei dem einen schon und bei dem anderen nicht... Abgesehen von der oben geposteten Änderung..
    Ich hab nicht so viel Ahnung von php, aber es müsste doch eigentlich funktionieren, wenn es bei dem anderen auch funktioniert?

  • Was müsste ich dann ändern, damit es funktioniert?:)

    - - - Aktualisiert - - -

    Wenn ich das header element einmal entferne, bleibt der Fehler gleich...
    der Code sieht dann so aus:

    - - - Aktualisiert - - -

    Einmal editiert, zuletzt von Sundream (10. Juni 2017 um 17:15)

  • Versuche mal diesen Code:


    Ich kann den bei mir leider nicht testen... abe da sind die Änderungen drin, die ich versuchen würde.

    - - - Aktualisiert - - -

    Ich seh gerade ... in meinem Code müsste man noch die Error-Behandlung bei

    HTML
    if (isset($_GET['sent']) === true)
    
    
    erweitern in
     if (isset($_GET['sent']) === true and empty($errors))

    Sonst kommt die Danke-Meldung auch, wenn ein Fehler aufgetreten ist!

    if(!sleep)

    {$sheep++;}

  • Hey,

    vielen Dank für deine Mühe :) Leider funktioniert es so auch nicht... Es werden (auch mit deiner Ergänzung) alle Fehlermeldungen für die leeren Felder schon von Anfang an angezeigt... Wenn ich das Formular sende kommt immer noch keine Meldung dass das Formular gesendet wurde...
    Hast du eine Idee woran das liegen könnte?

    Danke schonmal aufjedenfall !!

  • Habe deinen Code bei mir an Laufen bekommen... also noch ein Versuch!
    Hier ist eine eine Fehlerabfrage zum erfolgreichen Mailversand ( if(mail...) eingebaut - und der Fehler mit den von Anfang an erscheinenden Fehlermeldungen sollte auch weg sein.

    .. in dem <form> Tag nuss ggf noch die richtige URL angegeben werden

    if(!sleep)

    {$sheep++;}

  • .. den Kommentar im Code weiter unten mit der Meldung 'Mail konnte nicht gesendet werden' kannst du löschen! Funktioniert so nicht, aber vielleicht bekommst du das ja noch hin!
    War so gedacht...
    Kein Fehler in $POST Daten und kein Fehler beim Mailversand -> Danke Meldung
    Kein Fehler in $POST Daten und Fehler beim Mailversand -> Meldung Mail konnte nicht gesendet werden
    Fehler in $POST Daten -> Einzelfehlermeldung

    Ansonsten werden leere Eingabefelder schon von HTML aufgefangen - solltest deine Prüfroutine trotzdem drin lassen, weil es auch Browser gibt, die noch kein HTML5 können - und deine EMail-Adressenprüfung funktioniert besser als die von HTML%.

    if(!sleep)

    {$sheep++;}

  • Eine Frage noch, der Name wird nirgends ausgegeben, kann man das so wie mit der Telefonnummer noch irgendwie ausgeben? :)

    - - - Aktualisiert - - -

    Okay, danke :)

  • Bestens... braucht aber alles seine Zeit! Mal eben schnell einen 'fremden' Code debuggen geht meistens schief!
    Noch ein Vorschlag zur Verbesserung... kannst du was einbauen, dass die Seite nach dem Senden nicht gleich wieder in der Top-Position bleibt, sondern beim Mailformular bleibt, so dass man das Ergebnis auch gleich sieht - ohne Runterscrollen?

    - - - Aktualisiert - - -

    Name?... welcher Name?... wo soll der ausgegeben werden?

    if(!sleep)

    {$sheep++;}

  • Weiß nicht, ob ich sowas einbauen kann.. würde das mit html gehen? Ich hab wie gesagt wenig Ahnung...

    PHP
    <p>
                    <label for="name">Name:</label>
                     <input type="text" name="name" id="name" <?php  if(isset($_POST['name']) === true){ echo 'value="',  strip_tags($_POST['name']) ,'"';} ?> required>
                </p>

    hier wird der Name als Eingabefeld festgelegt, taucht aber in der gesendeten Email nirgends auf...

  • Oder meinst du das hier...

    PHP
    $usermessage = $message."\n\nTelefonnummer:".$phone."\n\nName:".$name;

    - - - Aktualisiert - - -

    In der EMail...

    PHP
    (mail('Stefanie.Wolf96@gmx.de', $betreff,  $usermessage, 'From: ' . $email))


    sendest du ja auch den Text '$usermessage' mit dem $betreff vin 'Stafanie' an $email.
    Aber mit der Ergänzung, die ich dir weiter oben geschickt habe, ist der Name jetzt in $usermessage drin.

    if(!sleep)

    {$sheep++;}

  • Okay, danke, als Betreff ist ja das was man bei Betreff eingegeben hat, da is das so schon besser :)
    Echt vielen vielen Dank für die ganze Mühe, die du dir gemacht hast :)

  • Bitte - gern geschehen! Dafür ist so ein Hilfeforum ja da.
    Aber wo ich schon mal beim Helfen bin... das korrekte Format für eine Mailfunktion ist..


    So ganz stimmt da deine Mailroutine noch nicht - und testen musst es sowieso, wenn diene Mails nicht ankommen, dann hast du wenigstens eine Ahnung woran es liege könnte.

    if(!sleep)

    {$sheep++;}