PHP-Formular erstellen

WiSy

New Member
Hi,
ich arbeite mich gerade ein bisschen in PHP ein und nun möchte ich ein Formular erstellen, welches die eigegeben Daten per eMail an mich verschickt.

Ich habe dazu zwei Tutorials ausprobiert, aber leider funktioniert es nicht. Es wird keine eMail versendet :( .

Dieser Befehl ist doch dafür zuständig, oder ?

mail($POST_['an'],$betreff,$inhalt,"From: ".$_POST['von']);

Hat von euch jemand vllt. nen kleinen Tipp für mich :o ?

LG WiSy :)
 
Moin
PHP:
mail($POST_['an'],$betreff,$inhalt,"From: ".$_POST['von']);
Das ist schon richtig.
Jetzt musst du nur noch sagen, was in

$POST_['an'] (vielleicht faellt dir hier schon was auf)
$betreff
$inhalt
$_POST['von']

steht.
 
Das willst Du so ganz bestimmt nicht machen!

Erstmal willst Du die übergebenen Variablen auf Herz und Nieren prüfen, dass da ja kein Escape-String oder Linefeed drin ist. Dann möchtest Du sicherstellen, dass die Variablen richtig sind $_POST nicht $POST_.
 
Also das hatte ich aus einem der beiden Tutorial rauskopiert ;) .

Am besten ich zeige euch den ganzen (Tutorial-) Code :eek: :

Code:
<html>
<?php
    error_reporting(E_All);

  if($action==$_POST['senden']) {

    // Prüfung der Angaben nach dem Senden

    if(!$_POST['name']) $fehler[] = "Ihr Name fehlt.";
    if(!$_POST['betreff']) $fehler[] = "Der Betreff fehlt.";
    if(!$_POST['inhalt']) $fehler[] = "Sie haben keine Nachricht geschrieben.";
    if(!$_POST['von']) $fehler[] = "Ihre Emailadresse fehlt";

    if(!count($fehler)) { // Sendet Email, wenn Prüfung "ok"

      $betreff = trim(stripslashes($_POST['betreff']));
      $inhalt  = trim(stripslashes($_POST['inhalt']));

      @mail($_POST['an'],$betreff,$inhalt,"From: ".$_POST['von']);
      echo("<p>Ihre Nachricht wie folgt wurde gesendet.<p>\n\n");
      echo "Name: <b>".$_POST['name']."</b><br>\n";
      echo "Betreff: <b>".$betreff."</b><br>\n";
      echo "Inhalt: <b>".nl2br($inhalt)."</b><br>\n";

    } else { // Fehlerausgabe, wenn Felder leer waren


      echo "Beim Senden traten folgender Fehler auf:";
      echo "<ul><li>".implode("<li>",$fehler)."</ul>";

    }

  }

?>
<form action="<?php echo $PHP_SELF; ?>" method="post">
<input type="hidden" name="action" value="senden">
<input type="hidden" name="an" value="meineemail@mich.de"> <!-- Bitte Ihre Email Adresse hier eintragen -->
  <table><tr>
    <td>Name</td>
    <td><input name="name" value="<?php echo $name; ?>"></td>
  </tr><tr>
    <td>Email</td>
    <td><input name="von" value="<?php echo $von; ?>"></td>
  </tr><tr>
    <td>Betreff</td>
    <td><input name="betreff" value="<?php echo $betreff; ?>"></td>
  </tr><tr>
    <td>Inhalt</td>
    <td><textarea name="inhalt"><?php echo $inhalt; ?></textarea></td>
  </tr><tr>
    <td> </td>
    <td><input type="submit"></td>
  </tr></table></form>
</html>

Ich wollte nur erst mal schauen, ob das überhaupt funktioniert und dann mich darin reindenken und selbst probieren usw.

Aber auch mit dem $_POST... anstatt dem $POST... an geht es nicht.

WiSy :)
 
Es ist schon mal schlecht (zumindest zum Lernen), dass ein "@" vor dem mail steht. Entferne das waerend du uebst.

Schaue dir dann an, was in den Variablen drin steht, die bei mail Verwendung finden (sollte nach "mail" laut Skript ausgegeben werden).

Welche Turorial sind das eigentlich? Fuer den allerersten Anfang ist das ok, aber wie marneus zu recht schrieb, darf man das so nicht oeffentlich zugänglich machen.

Zur Gänze funktioniert das Skript auch nur, wenn "register_globals on". (hat aber nichts mit mail zu tun, sondern mit dem Anzeigen im Formular selber)
 
Ich bin mir da jetzt nicht ganz sicher, aber braucht man nicht nen lokalen MTA, dass die Mails auch ausgeliefert werden können?
 
Wenn ich mich recht entsinne kann in der php.ini ein Mailserver angegeben werden über den dann die Mails versendet werden.

Edit:
Code:
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

Mailserver direkt scheint nur bei Windows zu gehen, auf Linux hätte man die Möglichkeit ein eigenes Script im Sendmail Pfad anzugeben welches die Mails dann entsprechend ausliefert.
 
Wenn wir schon beim "lernen" sind, dann auch richtig:
mail($_POST['an'],$betreff,$inhalt,"From: ".$_POST['von']);
Jetzt stellen wir uns einen bösen bösen Buben vor, der Dein Script zum Spamversand nutzen will.
Grundsätzlich gehen wir davon aus, daß er nicht das Formular nimmt, sondern seine Request direkt per entsprechender Software (z.B. PHP, Perl, usw.) abschickt.
Zum anderen gehen wir davon aus, daß er sich mit Emails recht gut auskennt.
Ergo tester er Dein Script wie folgt:
Er schreibt in den Request mehrere Empfänger rein:
Code:
ich_selbst@yahoo.de, kommt-es-an@yahoo.com, vielleicht-auch-hier@yahoo.it
Dein Script würde in diesem Fall tatsächlich diese Email an alle 3 Teilnehmer schicken.
Und danach testet er das Feld "von" mit einer mehrzeiligen Eingabe:
Code:
ich_selbst@yahoo.de
BCC: kommt-es-an@yahoo.com, vielleicht-auch-hier@yahoo.it

Fazit:
Du mußt die Eingaben noch strikter prüfen.

huschi.
 
Aha ... ich brauche also einen Mailserver, der die eMails verschickt :confused: . PHP kann das nicht alleine :( ?

Ich verstehe das noch nicht ganz mit dem "bösen Buben" :confused: , was hat denn davon wenn er das Script benutzt um seine Spammails zu versenden :eek: ?

Könnte mir jemand ein kleines eMail-Script erstellen mit den passenden Erklärungen dazu, damit ich eines als Vorlage habe :o ?
Oder liegt es nur daran, dass das Script nicht funktioniert hat, weil kein Mail-Server in der php.ini angegeben war :eek: ?
 
PHP kann das nicht alleine
Doch, wenn Du ihm in der php.ini die SMTP-Daten einträgst. Aber das ist etwas unsicherer, da PHP nur einmal eine Email-Zustellung versucht. Geht die schief, gehen die eingegebenen Daten verloren.

was hat denn davon wenn er das Script benutzt um seine Spammails zu versenden
Kurz: Output!
Lang: Spammer verdienen über den Output. Denn Spam-Mails haben inzwischen ein Klickrate von weit unter 1%. D.h. das Geschäft steigt mit dem Output. Und wenn er über einen regulären Email-Server versendet, steigt die Chance, daß die Emails überhaupt ankommen.

Könnte mir jemand ein kleines eMail-Script erstellen
Davon gibt es nun wirklich genügend im Netz.

weil kein Mail-Server in der php.ini angegeben war
Dafür wissen wir zuwenig über Dein System.

huschi.
 
Davon gibt es nun wirklich genügend im Netz.
Weblinks:
- Mail Injections und Gefahren beim Benutzen von "mail()". PHP-Skripte, die "immun" sind.
- Swift is a free feature-rich PHP Mailer (wird weiterentwickelt)
- PHPMailer (wird viel empfohlen, wurde aber lange nicht weiterentwickelt)

Die 1.73 des PHPMailer war lange Zeit (seit 2005) die einzige Download Version. Hier gab es unter bestimmten Umständen Probleme mit CC. Seit einer Woche ist aber die "v2.0.0 rc1" released.

Swiftmailer existiert in zwei Versionen: "Swift-3.3.2-php5.zip" und "Swift-3.3.2-php4.zip". Die Version für PHP5 benutzt zum Beispiel "__construct" und erklärt bestimmte Eigenschaften (Variablen einer Klasse) als "protected" usw. Es nutzt also viele der OOP-Features, die von PHP5 bereitgestellt werden. Für mich eher ein Grund, diese Klasse zu verwenden.

Chris Corbyn said:
I started developing Swift because I moderate a popular PHP forum and it's clear from some of the posts we see that PHP's native mail() function just doesn't cut the mustard among developers unless you know a lot about how to build emails and you only need to send one message. The only other popular alternative was PHPMailer which is no longer in active development, limited in support, lacking in modern features such as TLS and difficult to interface with. So I wrote Swift initially for the communtity at the PHP Developer's Network Forums and subsequently released it under the LGPL. Enjoy!

Gruß
Claus
 
Ok, danke für die Infos :) .
Ich schaue mir die Scripte dann mal an, aber ich bin so einer, der das lieber selber schreiben will, also nicht reinkopieren und fertig, sondern "learning by doing" :D.
 
Back
Top