Pfid: Bestellformmailer mit Produktauswahl

Hallo zusammen,

ich beschäftige mich jetzt ca. 2 wochen mit PHP und versuche einen Bestellformmailer zu erstellen.

Das hat bis jetzt auch gut funktioniert, allerdings habe ich jetzt ein Problem.

Und zwar möchte ich, dass die Produkte einzeln wählbar sind. Dann soll die Außwahl an die nächste PHP-Seite geposted werden. Dort sollen sie angezeigt werden. (Das funktioniert auch schon - wenn warscheinlich auch nicht ganz so elegeant).

Mein Problem ist nun, dass die Produktauswahl auch in der "mail()"-Funktion ausgegeben werden soll. Davon habe ich zwei. Einmal die Bestellung an mich. Die zweite als Bestätigung an den Kunden.

Hat jemand vieleicht eine Vorlage die ich mir mal ankücken kann um es zu verstehen?

Danke schonmal für Eure mühe.

Online zu betrachten unter: http://pfid.bplaced.net/dshop/form.php

Das Formular: form.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
          "http://www.w3.org/TR/html4/loose.dtd">  
  
<head>  
<title>Formular</title>  
<meta http-equiv="content-type" content="text/html; charset=utf-8">  
</head>  
<body>  
  
<div style="right:0px; position:fixed;"><img src="logo_shop.jpg"></div>  
  
  
  
<form method="post" action="order.php">  
  
Ist das eine...?<br>  
<input type="radio" name="was" value="Anfrage">Anfrage&nbsp;&nbsp;&nbsp;<input type="radio" name="was" value="Bestellung"> Bestellung<br><br><br>  
<hr>  
  
  
  
  
<!-- T-Shirt -->  
<table border="0" cellpadding="0" cellspacing="0" width="460">  
<tr>  
<td valign=bottom width="80">  
<img src="bilder/mail_sh_kap_schw.jpg" alt=" " width="80" height="80">  
</td>  
<td width="15">&nbsp;  
</td>  
<td valign=bottom width="395">  
  
<b>Tshirt</b>  
<p>Super dolles Drehwerk T-Shirt in schön!</p>  
<br><br>  
<input type="checkbox" name="p1" value="T-Shirt"> 19,99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Größe: <select name="gr_p1"><option>XL<option>L</select> &nbsp;&nbsp;&nbsp; Menge: <input type="text" name="anz_p1" size=2 maxlength=2>  
  
</td>  
</tr>  
  
</table>  
<br>  
  
  
  
<!-- Aufkleber  -->  
<table border="0" cellpadding="0" cellspacing="0" width="460">  
<tr>  
<td valign=bottom width="80">  
<img src="bilder/mail_sh_kap_rot.jpg" alt=" " width="80" height="80">  
</td>  
<td width="15">&nbsp;  
</td>  
<td valign=bottom width="395">  
<b>Auflkeber</b>  
  
<p>Drehwerk Aufkleber - auch schön!</p>  
<br><br>  
<input type="checkbox" name="p2" value="Aufkleber"> 8,49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menge: <input type="text" name="anz_p2" size=2 maxlength=2>  
</td>  
</tr>  
</table>  
  
<br>  
<!-- Flaschenöffner -->  
<table border="0" cellpadding="0" cellspacing="0" width="460">  
<tr>  
<td valign=bottom width="80">  
<img src="bilder/mail_sh_kap_rot.jpg" alt=" " width="80" height="80">  
</td>  
<td width="15">&nbsp;  
</td>  
<td valign=bottom width="395">  
<b>Flaschenöffner</b>  
  
<p>... mit Drehwerk-Logo</p>  
<br><br>  
<input type="checkbox" name="p3" value="Flaschenöffner"> 8,49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menge: <input type="text" name="anz_p3" size=2 maxlength=2>  
</td>  
</tr>  
</table>  
<br>  
<br>  
<br>  
  
<input type="checkbox" name="agb" value="agb">Ich akzeptiere die Allgemeinen Geschäftsbedingungen.  
  
  
<br>  
<br>  
<br>  
<br>  
  
  
<table>  
  
<tr><td>Name:</td><td><input type="text" name="name"></td></tr>  
<tr><td><b><u>Anschrift</u></b></td></tr>  
<tr><td>Straße/Nr.:</td><td><input type="text" name="strasse"></td></tr>  
<tr><td>PLZ:</td><td><input type="text" name="plz"></td></tr>  
<tr><td>Ort:</td><td><input type="text" name="ort"></td></tr>  
<tr><td></td></tr>  
<tr><td>eMail:</td><td><input type="text" name="mail"></td></tr>  
<tr><td>Ihre Nachricht:</td><td><textarea name="text"></textarea><br></td></tr>  
<tr><td></td><td><input type="submit" name="Button" value="Abschicken"></td></tr>  
  
<tr><td></td><td></td></tr>  
</table>  
</form>  
  
</body>

=============================================
Die Bestätigungsseite: order.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
          "http://www.w3.org/TR/html4/loose.dtd">  
  
<head>  
<title>Formular</title>  
<meta http-equiv="content-type" content="text/html; charset=utf-8">  
</head>  
<body>  
<div style="right:0px; position:fixed;"><img src="logo_shop.jpg"></div>  
<hr>  
<?php  
if($_POST['was'] == "Anfrage") {  
		echo "<h2>Anfrage</h2>";  
     }  
     if($_POST['was'] == "Bestellung") {  
         echo "<h2>Bestellung</h2>";  
     }  
  
if(isset($_POST[agb])) {echo "";} else {echo "<b>WIRD NICHT BEARBEITET - die AGB wurden nicht akzeptiert!</b> - <a href=\"javascript:window.back()\">Zurück</a>  
";}  
  
?>  
<hr>  
  
  
<?php  
  
echo "Sie haben folgende Angaben gemacht:<br>";  
echo "(Sie bekommen diese Angaben auch an Ihre angegebene eMail-Adresse geschickt.)<br>";  
echo "=============================================<br>";  
  
echo "<b>Ihr Name:</b> $_POST[name]<br><br>";  
  
echo "<b>Ihre eMail-Adresse:</b> $_POST[mail]<br>";  
  
echo "<b>Ihre Anschrift:</b> <br>$_POST[name]<br>$_POST[strasse]<br> $_POST[plz] $_POST[ort]<br><br>";  
  
echo "<b>Ihre Nachricht:</b><br>$_POST[text]<br><br>";  
  
// Bestellung  
echo "<h4><u>Produkte</u></h4>";  
  
if(isset($_POST[p1])) {echo "T-Shirt: Größe: $_POST[gr_p1], Anzahl: $_POST[anz_p1], <br/><br/>";} else {echo "<br/>";}  
  
if(isset($_POST[p2])) {echo "Aufkleber: Anzahl: $_POST[anz_p2], <br/><br/>";} else {echo "<br/>";}  
  
if(isset($_POST[p3])) {echo "Flaschenöffner: Anzahl: $_POST[anz_p3], <br/><br/>";} else {echo "<br/>";}  
?>  
  
  
  
  
<?php  
$from = 'From: Drehwerk.net <info@drehwerk.net>'."\n".  
		'MIME-Version: 1.0'."\n".  
		'Content-Type: text/plain; charset=UTF-8';  
  
  
  
//Mail-Bestellung  
mail(  
"*********@drehwerk.net",  
"$_POST[was] - von $_POST[name] aus $_POST[ort]",  
  
"  
===========================\n  
$_POST[was]\n  
===========================\n  
$_POST[name] sendet eine $_POST[was].\n\n  
Anschrift:\n $_POST[name]\n $_POST[strasse]\n $_POST[plz] $_POST[ort]\n  
eMail: $_POST[mail]\n\n  
Komentar:\n $_POST[text]\n\n  
---------------------------\n  
$_POST[p1], Größe: $_POST[gr_p1], Anzahl: $_POST[anz_p1]\n  
$_POST[p2], Anzahl: $_POST[anz_p2]\n  
$_POST[p3], Anzahl: $_POST[anz_p3]\n  
",  
"$from"  
);  
  
  
  
//Mail_Bestätigung Kunde  
mail(  
"$_POST[mail]",  
"Ihre $_POST[was] bei drehwerk.net",  
  
"  
$_POST[was]\n  
=======================\n  
Hallo $_POST[name],\n  
Sie haben uns folgende $_POST[was] gesendet:\n\n  
Anschrift:\n $_POST[name]\n $_POST[strasse]\n $_POST[plz] $_POST[ort]\n  
eMail: $_POST[mail]\n\n  
Komentar:\n $_POST[text]\n\n  
---------------\n  
$_POST[was]:\n  
$_POST[p1], Größe: $_POST[gr_p1], Anzahl: $_POST[anz_p1]\n  
$_POST[p2], Anzahl: $_POST[anz_p2]\n  
$_POST[p3], Anzahl: $_POST[anz_p3]\n  
  
Ihre $_POST[was] wird schnellstmöglich bearbeitet.\n  
Bei Rückfragen oder Änderungen kontaktieren Sie uns bitte unter:\n  
info@drehwerk.de  
",  
"$from"  
);  
?>  
  
</body>
  1. Lieber Pfid,

    Hat jemand vieleicht eine Vorlage die ich mir mal ankücken kann um es zu verstehen?

    ich hatte mir mal einen Mini-Webshop gebastelt. Wenn Du willst, dann lade ihn Dir herunter und studiere ihn. Könnte sein, dass Du etwas Brauchbares darin findest.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo Felix,

      danke für Deine Vorlage.
      So wie ich das jetzt soweit verstandenhabe sendet dieser Webshop die Daten an eine XML-Datei, die diese dann auswertet und ausgiebt (oder so ähnlich).

      Ich suche eigentlich er etwas das so funktioniert:

      • Der Kunde wählt ein Produkt über die Checkbox
      • Dadurch sollen auch die Optionen (Größe/Menge) irgendwie intigriert werden.
      • Das ganze dann per POST an order.php geschickt werden
      • Dort soll das dann als bestätigung angezeigt werden wenn es gewählt ist.
        Soweit funktioniert es ja (wenn warscheinlich nicht gerade elegant)

      in form.php

        
      <input type="checkbox" name="p1" value="T-Shirt"> 19,99 €  
      Größe: <select name="gr_p1"><option>XL<option>L</select>  
      Menge: <input type="text" name="anz_p1" size=2 maxlength=2>  
      
      

      ... das gleiche bei den anderen Produkten.
      ------------------------------------------
      in order.php

        
      if(isset($_POST[p1])) {echo "T-Shirt: Größe: $_POST[gr_p1], Anzahl: $_POST[anz_p1], <br/><br/>";} else {echo "<br/>";}  
        
      if(isset($_POST[p2])) {echo "Aufkleber: Anzahl: $_POST[anz_p2], <br/><br/>";} else {echo "<br/>";}  
        
      if(isset($_POST[p3])) {echo "Flaschenöffner: Anzahl: $_POST[anz_p3], <br/><br/>";} else {echo "<br/>";}  
      
      

      ------------------------------------------

      Mein Problem ist: Wie bekomme ich diese Funktion in "mail()",
      dass das auch in der Bestell- und der Bestätigungsmail drinn steht.

      momentan ist es so:

        
      mail(  
      "****@****.net",  
      "$_POST[was] - von $_POST[name] aus $_POST[ort]",  
        
      "  
      ===========================\n  
      $_POST[was]\n  
      ===========================\n  
      $_POST[name] sendet eine $_POST[was].\n\n  
      Anschrift:\n $_POST[name]\n $_POST[strasse]\n $_POST[plz] $_POST[ort]\n  
      eMail: $_POST[mail]\n\n  
      Komentar:\n $_POST[text]\n\n  
      ---------------------------\n  
      $_POST[p1], Größe: $_POST[gr_p1], Anzahl: $_POST[anz_p1]\n  
      $_POST[p2], Anzahl: $_POST[anz_p2]\n  
      $_POST[p3], Anzahl: $_POST[anz_p3]\n  
      ",  
      "$from"  
      );  
      
      

      so werden mir aber logischerweise die Textstücke zwischen den Funktionen von
      nicht gewählten Produkten angezeigt.

      Danke
      Gruß Pfid

      1. Lieber Pfid,

        So wie ich das jetzt soweit verstandenhabe sendet dieser Webshop die Daten an eine XML-Datei, die diese dann auswertet und ausgiebt (oder so ähnlich).

        nö. Das PHP-Script speichert diverse Daten in einer XML-Datei (noch weigere ich mich wegen solcher Kleinigkeiten einen DB-Server wie MySQL zu nutzen), nachdem es sie ausgewertet hat.

        Mein Problem ist: Wie bekomme ich diese Funktion in "mail()",
        dass das auch in der Bestell- und der Bestätigungsmail drinn steht.

        Du generierst den Mailtext in einer Variablen. Für jede Mail generierst Du einen eigenen Mailtext (eventuell mit Platzhaltern).

        Beispiel (ungetestet!):

        function bestellung_mailen($bestelldaten) {  
            $meldungen = array(); // für Fehlermeldungen oder andere Rückgabewerte  
          
            // so könnten die Daten der Bestellung aussehen  
            $bestelldaten = array(  
                'Kundennummer' => '0123456',  
                'Artikel' => array(), // Hier stehen die Artikel drin  
                'Versandart' => 'Nachnahme'  
                // etc.  
            );  
          
            // Bestelldaten in einen String umwandeln  
            $bestelltext = "";  
            foreach ($bestelldaten as $key => $value) {  
                $bestelltext .= "$key: ".print_r($value,true)."\r\n";  
            }  
          
            // Mailtexte erzeugen (könnte auch in irgendwelchen Einstellungen stehen)  
            $mails = array(  
                'an_kunde' => array(  
                    'text' => "Geehrter Kunde, geehrte Kundin,\r\n\r\n"  
                        ."vielen Dank für Ihre Bestellung."  
                        ." Wir werden sie innerhalb der nächsten zwei Werktage bearbeiten."  
                        ." Hier Ihre abgesandten Daten:\r\n\r\n{bestellung}",  
                    'adresse' => 'kunde@example.org'  
                ),  
                'an_betreiber' => array(  
                    'text' => "Folgende Bestellung ist im Webshop eingegangen:"  
                        ."\r\n\r\n{bestellung}",  
                    'adresse' => 'ich@example.org'  
                )  
            );  
          
            // Mailtexte ergänzen  
            foreach ($mails as $typ => $mail) {  
                $mails[$type]['text'] = str_replace('{bestellung}', $bestelltext, $mail['text']);  
            }  
          
            // Mails versenden  
            foreach ($mails as $index => $mail) {  
                // Mailheader zusammenbauen  
                $headers = array(  
                    'To'          => $mail['adresse'],  
                    'Subject'     => 'Bestellung in meinem Webshop',  
                    'From'        => 'webshop@example.org',  
                    'Reply-To'    => 'ich@example.org',  
                    '...'         => '' // alle gewünschten Mailheader eintragen!  
                );  
          
                // Header für die mail()-Funktion in String wandeln  
                $mail['header'] = '';  
                foreach ($headers as $key => $value) {  
                    $mail['headers'] .= "$key: $value\r\n";  
                }  
          
                // Weg mit der Mail!  
                if (mail(  
                    // Hier schön die Parameter aus den obigen Arrays einbauen  
                    $headers['To'],  
                    $headers['Subject'],  
                    $mail['text'], // <-- Hier steht jetzt der individuelle Mailtext!  
                    $mail['headers'] // manches ist jetzt zwar "doppelt gemoppelt", aber egal  
                )) {  
                    $meldungen[] = 'OK: Mail an "'.$mail['adresse'].'" erfolgreich versandt!';  
                } else {  
                    $meldungen[] = 'Fehler: Mail an "'.$mail['adresse'].'" konnte nicht versandt werden!';  
                }  
          
            return $meldungen;  
        }
        

        Im Grunde musst Du nur von der Idee Abschied nehmen, dass Du es Dir einfach machen könntest. Dann siehst Du gleich ein, warum Du Deine HTML-Dokumente eben _nicht_ mit PHP-Code verunreinigst, und Deine PHP-Scripte nicht mit (zuviel) HTML-Code. Außerdem ist es sinnvoll, manche Dinge in eine Funktion auszulagern, da man dann in der Trennung zwischen Ausgabe und Programmlogik flexibler ist.

        Aber alles das hättest Du in meinem Webshop-Script finden und sehen können...

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Hallo Felix,

          Danke für deine Antwort.

          Ich hab mich jetzt mal intensiever mit Schleifen und Array beschäftigt
          und glaube jetzt verstehe ich das langsam.

          Aber alles das hättest Du in meinem Webshop-Script finden und sehen können...

          ..., wenn ich es verstanden hätte *g*

          Gruß Pfid