Sicherheitsabfrage

Das ist aber ungünstig. Mit dem "Affenformular" geht das doch einfacher. Wenn die Prüfung ok ist, dann leitest du an formmailer.php weiter. Wie willst du sonst die Info ausgeben, dass das Ergebnis falsch ist? In formailer.php wäre das der falsche Ort, denn da ist das Formular ja nicht mehr sichtbar.
 
Das heist, dass ich für die Überprüfung eine weitere Seite erstellen muss, wo der Kunde nochmals überprüfen kann, ob seine Eingaben richtig sind, und dann durch klick auf OK erst zum Formmailer geleitet wird ?
 
Weiterleitung in meinem Beispiel:
PHP:
<?php
   session_start();
 
   if (isset($_POST['result']) && isset($_SESSION['result']))
   {
      if ($_POST['result'] == $_SESSION['result'])
      {
          // Hier weiterleiten
          header("Location: https://www.google.de");
          exit();
      }
      else
          $info = "Ergebnis ist nicht korrekt";   
   }

   $z1 = mt_rand(1,20);
   $z2 = mt_rand(1,20);
    
   $_SESSION['result'] = $z1 + $z2;

?>
<!DOCTYPE html>
<html lang="de">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Abfrage</title>
  </head>
  <body>
   <form action="" method="post">
    Geben Sie bitte das Ergebnis von <?php echo "$z1 + $z2"; ?> ein:
    <input type="text" name="result">
    <input type="submit" name="submit" value="Senden">
   </form>
   <br>
<?php
   if (isset($info))
       echo $info;
?> 
  </body>
</html>
 
Aber durch die
PHP:
header("Location:test3.php");

werden ja die anderen Inhalte der Inputfelder, wie name, adresse usw. nicht mitgeliefert.
 
Leider habe ich doch noch ein Problem!

Ich habe Daten vom SESSION zwar in meine formmeiler_kontakt.php übertragen, wo diese auch als echo ausgegeben werden, aber das Formmeiler-Script übernimmt nicht diese Daten.

PHP:
<?php
session_start();
error_reporting(0); // E_ALL / 0
ini_set("display_errors", false); // true / false

$mail = $_SESSION['formdata']['email'];
$anrede = $_SESSION['formdata']['anrede'];
$vorname = $_SESSION['formdata']['vorname'];
$nachname = $_SESSION['formdata']['nachname'];
$thema = $_SESSION['formdata']['thema'];

echo $mail .'<br />';
echo $anrede .'<br />';
echo $vorname .'<br />';
echo $nachname .'<br />';
echo $thema .'<br />';   

class language {
   public $data;
   function __construct($language) {
      $data = file_get_contents($language . ".json");
      $this->data = json_decode($data);
   }
   function translate() {
        return $this->data;
   }
}
$sprache = $lang;
$language = new language($sprache);
$lang = $language->translate();

$anrede_frau = $lang->Form_Danke->Satz1;
$anrede_herr = $lang->Form_Danke->Satz2;

$anrede2 = $anrede;
switch ($anrede2)
{
    case "Frau":
        $anrede2 = "$anrede_frau $vorname $nachname";
        break;
    case "Herr":
        $anrede2 = "$anrede_herr $vorname $nachname";
        break;
    default:
        $anrede2 = "";
}

$zeile16 = $lang->Kontakt_email->zeile16;
$zeile17 = $lang->Kontakt_email->zeile17;

// phpMailer-Klassen in den globalen Namespace importieren
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// phpMailer einbinden
require __DIR__ . "/PHPMailer/src/Exception.php";
require __DIR__ . "/PHPMailer/src/PHPMailer.php";
require __DIR__ . "/PHPMailer/src/SMTP.php";


if ($_SERVER["REQUEST_METHOD"] == "POST") {
  
$mail = $_SESSION['formdata']['email'];
$anrede = $_SESSION['formdata']['anrede'];
$vorname = $_SESSION['formdata']['vorname'];
$nachname = $_SESSION['formdata']['nachname'];
$thema = $_SESSION['formdata']['thema'];
  
  
    $dankeSeite = "danke.php"; // Danke - Seite, die Mail wurde erfolgreich Versandt.
    $fehlerSeite = "fehler.php"; // Fehler - Seite, falls die Mail nicht Versandt werden konnte.

    // Instanz und Zeichenkodierung setzen
    $mail = new PHPMailer(true);
    $mail->CharSet = "UTF-8";
    $mail->IsHTML(true);

    // SMTP - Servereinstellungen
    $mail->isSMTP(); // Senden mit SMTP
    // $mail->SMTPDebug = true; // Ausführliche Debugausgabe aktivieren
    $mail->Host = "xxxx"; // Postausgangsserver (SMTP)
    $mail->SMTPAuth = true; // SMTP-Authentifizierung aktivieren
    $mail->Username = "xxxx"; // SMTP Benutzername
    $mail->Password = "xxxx"; // SMTP Passwort
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // Implizite TLS-Verschlüsselung aktivieren
    $mail->Port = 465; // Port - Postausgangsserver (SMTP)

    // Absender
    // Hier muss beim Provider eine bekannte E-Mail-Adresse eingetragen sein, weil "externe"
    // E-Mail-Adressen vom Provider gesperrt werden (SPF) und dies zu einer Ablehnung führt.
    $mail->setFrom("xx@xxxxxx.com", "xxxx");
  
     // Empfänger
    $mail->addAddress($mail, $nachname);

     // Antwort an
    $mail->addReplyTo($mail,  $nachname);
    $mail->AddBCC("xx@xxxxxx.com", "xxxx");

    // Betreff
    $mail->Subject =  $thema;

    // Zeitzone und das aktuelle Datum setzen
    $jetzt = date_create("now", timezone_open("Europe/Berlin"));
    $datum = date_format($jetzt, "d.m.Y \u\m H:i");


    // Inhalt der E-Mail
    $Inhalt = '
    <img src="https://xxxx/images/logo/Logo_gross_text_tranparent.png" width="300" alt="CreativPur"/>
<hr />
<br /><br />
'.$anrede2.',
<br /><br />
sie haben uns am '.$datum.' Uhr zum Thema <strong>'. $thema.'</strong> folgende Anfrage zukommen lassen.
<br /><br />
'.$thema.'
 <br /><br />
 Wir werden uns Zeitnahe bei Ihnen wieder melden.
 <br /><br />
 Mit freundlichem Gruß
 <br />
 <i>Hansjörg Silberschlag</i>
 <br /><br />
 <br /><hr /><br />
        <img src="https://xxxx/images/logo/Logo_gross_text_tranparent.png" width="150" alt="CreativPur"/>';

    // Inhalt der E-Mail setzen
    $mail->Body = $Inhalt;

    // Senden
    if ($mail->send()) {

        // Weiterleitung an die Seite: danke.php
        header("Location: " . $dankeSeite);
        exit;
    } else {

        // Wenn die E-Mail nicht versendet werden konnte.
        // Weiterleitung an die Seite: fehler.php
        header("Location: " . $fehlerSeite);
        exit;
    }
}
?>

Somit wird nicht auf die danke.php weitergeleitet, geschweige eine Email geht raus!
 
Zuletzt bearbeitet:
Alleine dafür
PHP:
error_reporting(0); // E_ALL / 0
ini_set("display_errors", false); // true / false
habe ich schon keinen Nerv dir zu helfen. Wieso schaltest du das Error-Reporting ab? Wie oft muss man dir sagen, dass das Error-Reporting auf das Maximum eingestellt gehört, solange das Script nicht getestet und fertig ist?

Außerdem funktioniert header nicht, wenn vorher schon etwas ausgeben wurde, was du aber mit echo machst.

Ganz ehrlich: du lässt dir hier Scripte kostenlos korrigieren, die du dann für deine kommerzielle Seite nutzt. Du machst nicht das, was man dir schon endlos oft geschrieben hat. Nenne mir einen guten Grund, warum man dir noch helfen sollte?!
 
Zurück