Sebastian Becker: send mail - please only once!

Hallo,

ich möchte die PHP-mail-Funktion für ein Eingabeformular verwenden. Dabei arbeite ich mit nur einer PHP-Datei, mit der wahlweise das ursprüngliche Eingabeformular oder eine Bestätigungsmeldung ausgegeben werden.

Ein kleines Problem liegt nun darin, daß nach dem Erscheinen der Bestätigungsmeldung durch ein Neuladen der Seite nicht etwa das ursprüngliche Formular wieder aufgerufen wird, sondern stattdessen die gleiche mail noch einmal versandt wird.

Wie kann ich bewirken, daß das Formular ein zweites mal aufgerufen werden kann und daß ein doppeltes versenden der mail vermieden wird?

Vielen Dank für alle Tipps,

Grüße,

Sebastian Becker

Das Zurücksetzen der Variable $send aus dem hidden field hat übrigens nicht geholfen.

gekürzter Code:
----------------------------------------------------------------

mail.php:

<?php include ("header.php"); ?>

<?php
// if message was submitted
if ($send == "ok")
{

// mail body
$mb = "$mailtext;\n";

// mail head
$mh  = "From: $sender <$from>";

// send mail
mail("$email","$subject","$mb","$mh");

// show confirm message
echo "Danke für Ihre Nachricht.";
}

// show form
else {include ("form.inc");
}
?>

<?php include ("footer.php"); ?>

-----------------------------------------------------------------
form.inc:

<form method="POST" action="<?php echo $PHP_SELF ?>">
<textarea rows="10" name="mailtext" cols="40"><?php echo $mailtext ?></textarea>
<input type="hidden" name="send" value="ok">
<input type="submit" value="send">
</form>

  1. Hallo,

    ich möchte die PHP-mail-Funktion für ein Eingabeformular verwenden. Dabei arbeite ich mit nur einer PHP-Datei, mit der wahlweise das ursprüngliche Eingabeformular oder eine Bestätigungsmeldung ausgegeben werden.

    Ein kleines Problem liegt nun darin, daß nach dem Erscheinen der Bestätigungsmeldung durch ein Neuladen der Seite nicht etwa das ursprüngliche Formular wieder aufgerufen wird, sondern stattdessen die gleiche mail noch einmal versandt wird.

    Wie kann ich bewirken, daß das Formular ein zweites mal aufgerufen werden kann und daß ein doppeltes versenden der mail vermieden wird?

    Vielen Dank für alle Tipps,

    Grüße,

    Sebastian Becker

    Das Zurücksetzen der Variable $send aus dem hidden field hat übrigens nicht geholfen.

    gekürzter Code:

    mail.php:

    <?php include ("header.php"); ?>

    <?php
    // if message was submitted
    if ($send == "ok")
    {

    // mail body
    $mb = "$mailtext;\n";

    // mail head
    $mh  = "From: $sender <$from>";

    // send mail
    mail("$email","$subject","$mb","$mh");

    // show confirm message
    echo "Danke für Ihre Nachricht.";

    wie gestaltest du das neuladen an dieser stelle? link oder meta oder was ?? oder das kann ich dir nett weiterhelfen

    }

    // show form
    else {include ("form.inc");
    }
    ?>

    <?php include ("footer.php"); ?>


    form.inc:

    <form method="POST" action="<?php echo $PHP_SELF ?>">
    <textarea rows="10" name="mailtext" cols="40"><?php echo $mailtext ?></textarea>
    <input type="hidden" name="send" value="ok">
    <input type="submit" value="send">
    </form>

    1. Hallo,

      wie gestaltest du das neuladen an dieser stelle? link oder meta oder was ?? oder das kann ich dir nett weiterhelfen

      Die Seite wird normalerweise nicht neu geladen. Aber es könnte sein, daß der Nutzer bei seinem Browser auf Reload drückt, weil er z.B nochmal zum Eingabeformular zurück will.

      Außerdem will ich dasselbe Formular durch Übergabe einer Variablen in verschiedenen Versionen aufrufen, zum Beispiel für Kontakt, Support, Presse, etc.. Ich bin nicht sicher, ob dann das Formular wieder gezeigt wird.

      Interessanterweise wird das Formular wieder angezeigt, sobald ich es in einer neuen Instanz des Browsers aufrufe.

      Any ideas???

      Grüße,

      Sebastian Becker

  2. Hallo,

    ich möchte die PHP-mail-Funktion für ein Eingabeformular verwenden. Dabei arbeite ich mit nur einer PHP-Datei, mit der wahlweise das ursprüngliche Eingabeformular oder eine Bestätigungsmeldung ausgegeben werden.

    Ein kleines Problem liegt nun darin, daß nach dem Erscheinen der Bestätigungsmeldung durch ein Neuladen der Seite nicht etwa das ursprüngliche Formular wieder aufgerufen wird, sondern stattdessen die gleiche mail noch einmal versandt wird.

    Wie kann ich bewirken, daß das Formular ein zweites mal aufgerufen werden kann und daß ein doppeltes versenden der mail vermieden wird?

    Vielen Dank für alle Tipps,

    Grüße,

    Sebastian Becker

    Das Zurücksetzen der Variable $send aus dem hidden field hat übrigens nicht geholfen.

    gekürzter Code:

    mail.php:

    <?php include ("header.php"); ?>

    <?php
    // if message was submitted
    if ($send == "ok")
    {

    // mail body
    $mb = "$mailtext;\n";

    // mail head
    $mh  = "From: $sender <$from>";

    // send mail
    mail("$email","$subject","$mb","$mh");

    // show confirm message
    echo "Danke für Ihre Nachricht.";

    //Hier schon mal mit
    unset($send);
    //probiert????

    }

    // show form
    else {include ("form.inc");
    }
    ?>

    <?php include ("footer.php"); ?>


    form.inc:

    <form method="POST" action="<?php echo $PHP_SELF ?>">
    <textarea rows="10" name="mailtext" cols="40"><?php echo $mailtext ?></textarea>
    <input type="hidden" name="send" value="ok">
    <input type="submit" value="send">
    </form>

    1. Hallo,

      //Hier schon mal mit
      unset($send);
      //probiert????

      nein, aber mit

      $send = "";

      was eigentlich dasselbe bewirken sollte, oder? Hat aber nicht geklappt. :-(

      Grüße,

      Sebastian Becker

      1. probiers aus

        Hallo,

        //Hier schon mal mit
        unset($send);
        //probiert????

        nein, aber mit

        $send = "";

        was eigentlich dasselbe bewirken sollte, oder? Hat aber nicht geklappt. :-(

        Grüße,

        Sebastian Becker

  3. Hallo Sebastian!

    Ein kleines Problem liegt nun darin, daß nach dem Erscheinen der Bestätigungsmeldung durch ein Neuladen der Seite nicht etwa das ursprüngliche Formular wieder aufgerufen wird, sondern stattdessen die gleiche mail noch einmal versandt wird.

    Frage ab ob zweimal genau das gleiche geschickt wird, wenn ja ignorieren.

    Vergebe id's (Übergabe per hidden Feld) . jede id darf nur eine Mail schicken.

    Eine weitere Lösung, wenn auch nicht so richtig einfach zu verstehen, ist es die 'danke/verarbeiten' seite einen redirekt machen zu lassen.

    http://www.teamone.de/selfhtml/sfarchiv/2000_3/t20226.htm#a102580

    Eigentlich die beste Lösung, oftmals die einzige - nur macht sie (wie alle redirects) den Zurück-Button im Browser kaputt.

    Gruss,
     Carsten