• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Kleines Kontaktformular

Werbung:
Bitte mal mitdenken! Du hast ein Formularfeld section und in dem Script greife ich auf den Wert mit $_POST['section'] zu. Jetzt rate mal, wie du auf den Wert von firstname, etc. zugreifen solltest.
 
Hallo,

ich verstehe ja was du meinst und habe es mit dem Ansatz versucht.

Habe es wie folgt abgeändert:

PHP:
<?php

require_once('class.phpmailer.php');

$mail             = new PHPMailer(); // defaults to using php "mail()"

switch ($_POST['section'])
{
   case 1:  $section = "[email protected]"; break;
   case 2:  $section = "[email protected]"; break;
   case 3:  $section = "[email protected]"; break;
   case 4:  $section = "[email protected]"; break;
   case 5:  $section = "[email protected]"; break;
   case 6:  $section = "[email protected]"; break;
   default: $section = "[email protected]"; break;
}

$mail->SetFrom($_POST['email'], "$_POST['firstname'] $_POST['lastname']");

$mail->AddReplyTo($_POST['email'], "$_POST['firstname'] $_POST['lastname']");

$address = ($_POST['email']);
$mail->AddAddress($section, "Genius GmbH");

$mail->Subject    = "$_POST['title']";

$body             = ("$_POST['firstname'] $_POST['lastname'] $_POST['email'] $_POST['telephone'] $_POST['message']");

$mail->AltBody    = "$_POST['firstname'] $_POST['lastname'] $_POST['email'] $_POST['telephone'] $_POST['message']"; // optional, comment out and test

$mail->MsgHTML($body);

if(!$mail->Send()) {
  echo include ("error.html");
} else {
  echo include ("success.html");
}

?>

Und bekomme dann folgende Fehlermeldung:

Code:
[B]Parse error[/B]:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in "PFAD AUSGEBLENDET" on line [B]18[/B]

Da habe ich nach gegoogelt und bekomme gesagt das es was mit den Anführungszeichen zu tun hat. Dort sehe ich im Notepad jedoch keinen Fehler?

Grüße
 
Werbung:
Entweder so
PHP:
$mail->SetFrom($_POST['email'], $_POST['firstname'] . " " . $_POST['lastname']);
oder
PHP:
$mail->SetFrom($_POST['email'], "$_POST[firstname] $_POST[lastname]");
Und das bei allen zusammengesetzen Strings
 
Entweder so
PHP:
$mail->SetFrom($_POST['email'], $_POST['firstname'] . " " . $_POST['lastname']);
oder
PHP:
$mail->SetFrom($_POST['email'], "$_POST[firstname] $_POST[lastname]");
Und das bei allen zusammengesetzen Strings

Danke, das funktioniert.

Also bei der Übersendung mehrerer Variablen in einem "String" benötigen diese nur eine globale Fassung durch die ". Wenn ich jedoch nur eine Variable übergebe muss diese in ' oder " gepackt sein?

Grüße
 
Ich würde es wohl so schreiben:
PHP:
 <?php

  if (isset($_POST['firstname']))
  {
    require_once('class.phpmailer.php');

    $mail = new PHPMailer(); // defaults to using php "mail()"

    switch ($_POST['section'])
    {
      case 1:  $section = "[email protected]"; break;
      case 2:  $section = "[email protected]"; break;
      case 3:  $section = "[email protected]"; break;
      case 4:  $section = "[email protected]"; break;
      case 5:  $section = "[email protected]"; break;
      case 6:  $section = "[email protected]"; break;
      default: $section = "[email protected]"; break;
   }

   $mail->SetFrom($_POST['email'], $_POST['firstname'] . " " . $_POST['lastname']);

   $mail->AddReplyTo($_POST['email'], $_POST['firstname'] . " " . $_POST['lastname']);

   $mail->AddAddress($section, "Genius GmbH");

   $mail->Subject = $_POST['title'];

   $body = $_POST['firstname'] . " " .
           $_POST['lastname'] . " " .
           $_POST['email'] . " " .
           $_POST['telephone'] . " " .
           $_POST['message'];

   $mail->AltBody = $body;

   $mail->MsgHTML($body);

   if(!$mail->Send())
     echo include ("error.html");
   else 
     echo include ("success.html");
 }
 else
   echo "Parameter fehlen";

?>
Allerdings verschickst du alles andere als eine HTML-Mail ;)
 
Werbung:
Hallo, Danke.

Ich denke die erste Zeile

PHP:
  if (isset($_POST['firstname']))

Bezieht sich mit dem

PHP:
 else
   echo "Parameter fehlen";

auf die Feldüberprüfung das Vorname nicht leer sein darf, oder?

Wie kann ich diese Abfrage auf die anderen Felder erweitern?

Zum Thema HTML - Ja, ich hätte zumindest gerne Umbrüche im Body der Nachricht, damit diese etwas "ordentlicher" übergeben wird.

Danke mal wieder!
 
Nein, damit prüfe ich nicht, ob das Feld leer ist, sondern ob das Script überhaupt vom Formular oder eventuell direkt aufgerufen wurde. Leere Felder kannst du z.B. mit empty prüfen. Allerdings sollte man ein trim vorher auch noch benutzen, denn nur ein z.B. Leerzeichen will man ja auch nicht.

Eine HTML-Mail muss genau wie jede andere HTML-Seite auch einen Doc-Type, Header und Body haben.
 
Nein, damit prüfe ich nicht, ob das Feld leer ist, sondern ob das Script überhaupt vom Formular oder eventuell direkt aufgerufen wurde. Leere Felder kannst du z.B. mit empty prüfen. Allerdings sollte man ein trim vorher auch noch benutzen, denn nur ein z.B. Leerzeichen will man ja auch nicht.

Eine HTML-Mail muss genau wie jede andere HTML-Seite auch einen Doc-Type, Header und Body haben.

Okay,

wie könnte ich dann in unserem Fall a) das mit den leeren Feldern umsetzen und b) die Mail mit den Umbrüchen gestalten?

Grüße
 
Werbung:
Zu a) Du solltest dich mit dem EVA-Prinzip vertraut machen, denn es hat niemand Lust, bei einer fehlerhaften Eingabe nochmals alles neu eingeben zu müssen
zu b) Deine HTML-Message musst du, wie schon gesagt, wie eine HTML-Seite aufbauen. Ich mache das mittlerweile so, dass ich mir eine eigene Datei anlege, die z.B. in gekürzter Form so aussieht:
PHP:
<?php

   $htmlBody = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                "http://www.w3.org/TR/html4/strict.dtd">
                <html>
                <head>
                <title>Nachricht aus Kontakformular</title>
                </head>
                <body>
                 <table>
                  <tr>
                   <td>Vorname: </td>
                   <td>' . $firstname . '</td>
                  </tr>
                  <tr>
                   <td>Nachname: </td>
                   <td>' . $lastname . '</td>
                  </tr>
                 </table>
                </body>
                </html>';
?>
Im Script sorge ich zuerst dafür, dass alle Werte vom Formular überprüft werden und wenn die Werte OK sind, belege ich die Variablen, die in dieser Datei benutzt werden, hier $firstname und $lastname. Dann binde ich diese Datei per Include ein und habe dann die Variable $htmlBody, die ich dem phpMailer als HTML-Body zuweise. Das hat den Vorteil, dass man sich erst einmal das HTML-Layout im Browser ansehen kann und wenn das dann OK ist, setzte ich das in die Variable $htmlBody
 
zu 1: ich habe nun nach der Vorlage von self html eine java überprüfung ob die felder leer sind eingebaut.
Du meinst JavaScript, Java ist was anderes. Du kommst aber trotzdem nicht um eine Prüfung mit PHP herum, denn was machst du, wenn ich JavaScript deaktiviere?
zu 2: Ich muss doch dann aber in der mail.php wieder irgendwie sagen das die Felder Name usw. in die HTML Datei geschrieben werden, oder? Das hört sich für mich dann wieder sehr aufwendig an?
Das ist nicht wirklich aufwändig
Beispiel:
PHP:
<?php
   $errorText = $firstname = $lastname = $email  = "";
   
   if (isset($_POST['firstname']))
   {
      $firstname = trim($_POST['firstname']);
      $lastname = trim($_POST['lastname']);
      $email = trim($_POST['email']);
      
      if (!empty($firstname) && !empty($lastname) && !empty($email))
      {
          if (filter_var($email, FILTER_VALIDATE_EMAIL) !== false)
          {
             // An dieser Stelle wird jetzt die Mail zusammengebaut und verschickt
          }
          else
            $errorText = "Ungültige eMail-Adress";
      }
      else
         $errorText = "Nicht alle Felder ausgefüllt";
   }
?>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Formular</title>
</head>
<body>
<?php
   if ($errorText != "")
     echo "<p>$errorText</p>";
?>   
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
  <p>Vorname: <input type="text" name="firstname" value="<?php echo $firstname; ?>"></p>
  <p>Nachname: <input type="text" name="lastname" value="<?php echo $lastname; ?>"></p>
  <p>eMail: <input type="text" name="email" value="<?php echo $email; ?>"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>
</body>
</html>
 
Werbung:
Du meinst JavaScript, Java ist was anderes. Du kommst aber trotzdem nicht um eine Prüfung mit PHP herum, denn was machst du, wenn ich JavaScript deaktiviere?
Das ist nicht wirklich aufwändig
Beispiel:
PHP:
<?php
   $errorText = $firstname = $lastname = $email  = "";
   
   if (isset($_POST['firstname']))
   {
      $firstname = trim($_POST['firstname']);
      $lastname = trim($_POST['lastname']);
      $email = trim($_POST['email']);
      
      if (!empty($firstname) && !empty($lastname) && !empty($email))
      {
          if (filter_var($email, FILTER_VALIDATE_EMAIL) !== false)
          {
             // An dieser Stelle wird jetzt die Mail zusammengebaut und verschickt
          }
          else
            $errorText = "Ungültige eMail-Adress";
      }
      else
         $errorText = "Nicht alle Felder ausgefüllt";
   }
?>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Formular</title>
</head>
<body>
<?php
   if ($errorText != "")
     echo "<p>$errorText</p>";
?>   
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
  <p>Vorname: <input type="text" name="firstname" value="<?php echo $firstname; ?>"></p>
  <p>Nachname: <input type="text" name="lastname" value="<?php echo $lastname; ?>"></p>
  <p>eMail: <input type="text" name="email" value="<?php echo $email; ?>"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>
</body>
</html>

Hi,

danke für deine Antwort, aber dieses Formular von dir ersetzt dann mein Komplettes Kontaktformular, oder?

Grüße
 
Hm,

ich habe versucht das ganze für mich anzupassen.

Aber er zeigt jetzt beim Aufrufen des Kontaktformulares als html file in den Textfeldern immer den PHP Code aus Value und beim Abesnden sagt er folgendes:

HTML:
Not Found The requested URL /< was not found on this server.

Was ist den da der Fehler nun wieder... :-(

Ich muss unbedingt mehr PHP lernen...

Leider kann ich meine Datei nicht hier einfügen weil Sie zu lang ist... :-(

Grüße
 
Werbung:
Hallo,

ich habe leider nichts dazu gefunden, aber gibt es auch eine Möglichkeit das Google Recaptcha hier an dieser Stelle mit einzubauen?
 
Werbung:
Warum sollte das nicht gehen? Und wieso hast du nichts gefunden? Auf der google-Seite wird's doch bestimmt eine Anleitung zum Einbau geben.
 
Zurück
Oben