Whitesnake: Probleme mit E-Mail Formular, das sich selbst aufruft.

Hallo!

Habe mir ein kleines E-Mail Formular gebastelt, dass sich selbst aufruft um nur eine einzige Seite dafür zu "verschwenden". Doch irgendwas hab ich falsch gemacht. Erstens included er falsch, zweitens schickt er das Mail nicht ab (gibt aber alles richtig aus).

Ich schick mal den Quelltext, vielleicht kann damit jemand was anfangen:

<?php

$name = $_GET['name']; $email = $_GET['email']; $homepage = $_GET['homepage']; $text = $_GET['text']; $fehler = $_GET['fehler']; $titel = 'E-Mail';

if ($name == "" || $email == "" || $text == "") { echo <<< EOF3 include('header.php');

<link href="../styles/stylesheet.css" rel="stylesheet" type="text/css"> <script src="../styles/javascript.js" type="text/javascript"></script> </head> <body> EOF3;

echo <<< EOF4 <form action="testmail.php" method="get"> <table width="752" cellspacing="1" cellpadding="0" bgcolor="#000000" border="0" align="center"> include('navigation.php');   <!-- Hauptseite - Inhalt -->   <tr>     <td> <table width="750" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF" border="0">         <tr>           <td height="17"></td>         </tr>         <tr>           <td width="17"></td>           <td width="147" valign="top"><table cellpadding="0" cellspacing="1" width="100%" bgcolor="000000">     include('kontaktnavigation.php');             </table></td>           <td width="14"></td>           <td width="555" valign="top"><table cellpadding="0" cellspacing="1" width="100%" bgcolor="000000">               <tr>             <td class="textleiste" width="100%">Schreib mir eine E-Mail</td>           </tr>           <tr>             <td width="100%" class="schriftfliess"> <table bgcolor="000000" width="500" border="0" cellpadding="0" cellspacing="0" >                 <tr>                   <td bgcolor="#FFFFFF"><table width="498" cellpadding="5" cellspacing="0">                       <tr>                         <td class="schriftfliess" colspan=2 >Hier kannst du deiner                           Phantasie freien Lauf lassen und mir ein langes oder                           kurzes Mail verschicken. Ich freue mich über jedes                           Mail und schreibe natürlich 100%ig zurück                           so schnell es geht. So und jetzt lasst eurer Schreibkreativität                           freien Lauf.</td>                       </tr>                       <tr>                         <td valign="top" class="schriftfliess">Dein Name</td>                         <td width="367"><input name="name" class="eingabefeld" style="width:100%;"></td>                       </tr>                       <tr>                         <td valign="top" class="schriftfliess">Deine E-Mail</td>                         <td width="367"><input name="email" class="eingabefeld" style="width:100%;"></td>                       </tr>                       <tr>                         <td valign="top" class="schriftfliess">Deine Homepage</td>                         <td width="367"><input name="homepage" class="eingabefeld" style="width:100%;"></td>                       </tr>                       <tr>                         <td width="109" valign="top" class="schriftfliess">Deine Eingabe </td>                         <td width="367"><textarea name="text" cols="60" rows="13" class="textfeld" style="width:100%;"></textarea></td>                       </tr>                       <tr>                         <td class="schriftfliess"> </td>                         <td><input type="reset" class="Button" value="Zurücksetzen">                           <input type="submit"  class="Button" value="Abschicken"></td>                       </tr>                     </table></tr>               </table></td>           </tr>             </table></td>           <td width="16"></td>         </tr>         <tr>           <td height="17"></td>         </tr>       </table></td>   </tr>   <!-- Hauptseite - Inhalt-Ende --> </table> </form> include('bottom.php'); EOF4; }

else { echo <<< EOF $mailtext = "Name: $name\nE-Mail: $email\nHomepage: $homepage\n\n$text"; mail("vor@name.com", "Mail von Homepage", $mailtext, "From:$email"); $titel = 'E-Mail gesendet'; include('header.php'); <link href="../styles/stylesheet.css" rel="stylesheet" type="text/css"> <script src="../styles/javascript.js" type="text/javascript"></script> </head> <body> <table width="752" cellspacing="1" cellpadding="0" bgcolor="#000000" border="0" align="center"> include('navigation.php');   <!-- Hauptseite - Inhalt -->   <tr>     <td> <table width="750" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF" border="0">         <tr>           <td height="17"></td>         </tr>         <tr>           <td width="17"></td>           <td width="147" valign="top"><table cellpadding="0" cellspacing="1" width="100%" bgcolor="000000">     include('kontaktnavigation.php');             </table></td>           <td width="14"></td>           <td width="555" valign="top"><table cellpadding="0" cellspacing="1" width="100%" bgcolor="000000">               <tr>             <td class="textleiste" width="100%">Vielen Dank - das Senden war erfolgreich</td>           </tr>           <tr>                 <td class="schriftfliess"><p>Name: $name<br>                   E-Mailadresse: <a href="mailto:$email">$email</a><br>                   Homepage: <a href="$homepage" target="_blank">$homepage</a></p>                   <p>Nachricht: $text</p></td>           </tr>             </table></td>           <td width="16"></td>         </tr>         <tr>           <td height="17"></td>         </tr>       </table></td>   </tr>   <!-- Hauptseite - Inhalt-Ende --> </table> include('bottom.php'); EOF; } ?>

  1. Hello,

    echo <<< EOF3
    include('header.php');

    <link href="../styles/stylesheet.css" rel="stylesheet" type="text/css">
    <script src="../styles/javascript.js" type="text/javascript"></script>
    </head>
    <body>
    EOF3;

    Ich schu mir nur mal diesen Abschnitt an. Die Heredoc-Syntax ist problematisch, da sie immer die richtigen Zeilenendezeichen benötigt. Und wenn ich das richtig interpretiere, schaltest Du eine Ausgabestream ein, um dann gleich in der nächsten Zeile eine Funktion (bzw. eine Parseranwesiung) aufzurufen. Das machst Du in Deinem Script einige Male.

    Ist das richtig?

    Und dann noch eine Bitte an Dich. Wenn Du möchstest, dass man Dir hier auch in Zukunft hilft, poste bitte nicht ganze Scripte mit Formatierung und HTML, wenn es um PHP geht. Mach einen Auszug daraus mit den wichtigen Stellen.

    Noch etwas zu Deinem Müller, äh, Mailer. Das Ding ist gemeingefährlich. Man kann über GET-Parameter Header-Daten übergeben. Dadurch ist es möglich, die Header zu manipulieren und den From-Header als BCC: umzuwidmen. Wenn man einen From-Header benutzt, muss man auf jeden fall kontrollieren, was im Paramter drinsteht, also genau EINE eMailadresse.

    Die Übergabe der Paramerer über GET ist auch unpraktisch, da viele Browser nur eine gesamtlänge der URi von ca. 1000 oder noch weniger Zeichen zulassen.

    Bau das Formular auf POST um und setze von Seiten des Servers eine Formular-ID ein, die in einer "nicht-verbraucht-Datei" zusammen mit einem Timestamp gespeichert wird. Wenn nun jemand ohne eine ID postet, hat er das Formular nicht frisch vom Server geholt. Das gleiche gilt für eine nicht enthaltene ID. Nach dem Post kannst Du die ID entweder löschen, oder ein Flag setzen, dass sie schon verbraucht ist. Dann hat man eine Zusatzinformation für den Poster (Doppelpost).

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
      Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
      Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen