Bestellformular fehler
TeufeL
- php
Hallo, ich nutze phpkit 1.6.1 und wollte diesen php script in meiner Seite einbauen
Ich weiß das Thema phpkit 1.6.1 gehört hier nicht her, aber ich weiß nicht wirklich, wie ich sonst erklären soll was mein problem ist! Sorry
www.xxx-xxx.de/include.php?path=xxx.php
Wird zwar angezeigt, aber man kann es nicht versenden, sondern es öffnet sich die startseite und man bekommt auch weder eine meldung das es versendet wurde, noch kommt eine e-mail bei mir an?
www.xxx-xxx.de/xxx.php
So funkzioniert es ohne probleme, aber sieht eben nicht gut aus. ;-(
Kann mir vieleicht jemand sagen, was man an dem code ändern müsste, dass es richtig geht?
Danke im vorraus!
Das Beispiel:
<?php error_reporting(E_ALL); /**************************************************
Formulargenerator v1.0 by 4Webmaster.net
Programmed by Borlabs Website: www.borlabs.de
visit www.4webmaster.net
**************************************************/ $error = false; $errors = array(); $receiver = 'xxx@xxx.xxx';
function check_email ($string) { // RegEx created by Myle Ott, found at regexlib.com return preg_match('/^([a-zA-Z0-9_-])+(.([a-zA-Z0-9_-])+)@(([(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))]))|((([a-zA-Z0-9])+(([-])+([a-zA-Z0-9])+).)+([a-zA-Z])+(([-])+([a-zA-Z0-9])+)*))$/i', $string); }
function check_onlynumbers ($string) { return preg_match('/[1]{1,}$/', $string); }
function check_onlyletters ($string) { return preg_match('/[2]{1,}$/', $string); }
function send_email ($subject, $body, $receiver, $html = 1) { if ($html != 1) { $body = str_replace('<br />', "\n", $body); $body = str_replace('<br>', "\n", $body); $body = strip_tags($body); }
$subject = str_replace('\n', '', $subject); $subject = str_replace('\r', '', $subject);
if ($html) { $header = 'MIME-Version: 1.0' . "\n"; $header .= 'Content-type: text/html; charset=iso-8859-15'."\n"; $header .= 'From: '.$receiver.' <'.$receiver.'>'."\n"; } else { $header = 'MIME-Version: 1.0' . "\n"; $header .= 'From: '.$receiver.' <'.$receiver.'>'."\n"; }
if (mail($receiver, $subject, $body, $header)) { return true; } else { return false; } }
function array_stripslashes(&$var) { if(is_string($var)) { $var = stripslashes($var); } else { if(is_array($var)) foreach($var as $key => $value) array_stripslashes($var[$key]); } }
if(get_magic_quotes_gpc()){ array_stripslashes($_GET); array_stripslashes($_POST); array_stripslashes($_REQUEST); array_stripslashes($_COOKIE); }
if (!empty($_POST)) { // Prüfung für das Feld "E-Mail Adresse:" $errors['E_MailAdresse'] = null; if (empty($_POST['E_MailAdresse'])) { $error = true; $errors['E_MailAdresse'] = ' class="error"'; } if (!empty($_POST['E_MailAdresse']) && !check_email($_POST['E_MailAdresse'])) { $error = true; $errors['E_MailAdresse'] = ' class="error"'; }
// Prüfung für das Feld "Geburtsdatum 00.00.0000" $errors['Geburtsdatum00_00_0000'] = null; if (empty($_POST['Geburtsdatum00_00_0000'])) { $error = true; $errors['Geburtsdatum00_00_0000'] = ' class="error"'; }
// Prüfung für das Feld "bla" $errors['bla'] = null; if (empty($_POST['bla'])) { $error = true; $errors['bla'] = ' class="error"'; }
// Prüfung für das Feld "bla" $errors['bla'] = null; if (empty($_POST['bla'])) { $error = true; $errors['bla'] = ' class="error"'; }
} $_text_E_MailAdresse = (!empty($_POST['E_MailAdresse']) ? htmlspecialchars($_POST['E_MailAdresse'], ENT_QUOTES, 'iso-8859-15') : null);
$_text_Geburtsdatum00_00_0000 = (!empty($_POST['Geburtsdatum00_00_0000']) ? htmlspecialchars($_POST['Geburtsdatum00_00_0000'], ENT_QUOTES, 'iso-8859-15') : null);
$_select_bla_bla = (!empty($_POST['bla']) && in_array('bla', $_POST['bla']) ? ' selected="selected"' : null); $_select_bla_bla = (!empty($_POST['bla']) && in_array('bla', $_POST['bla']) ? ' selected="selected"' : null); $_select_bla_bla = (!empty($_POST['bla']) && in_array('bla', $_POST['bla']) ? ' selected="selected"' : null); $_select_bla_bla = (!empty($_POST['bla']) && in_array('bla', $_POST['bla']) ? ' selected="selected"' : null);
$_select_bla_bla = (!empty($_POST['bla']) && in_array('bla', $_POST['bla']) ? ' selected="selected"' : null); $_select_bla_bla = (!empty($_POST['bla']) && in_array('bla', $_POST['bla']) ? ' selected="selected"' : null); $_select_bla_bla = (!empty($_POST['bla']) && in_array('bla', $_POST['bla']) ? ' selected="selected"' : null); $_select_bla_bla = (!empty($_POST['bla']) && in_array('bla', $_POST['bla']) ? ' selected="selected"' : null);
?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> <!-- Formulargenerator v1.0 by 4Webmaster.net
Programmed by Borlabs Website: www.borlabs.de
visit www.4webmaster.net --> <title>xxxxxxxxxx</title> <style type="text/css"> body { font: 12px Verdana, Tahoma, Arial, Helvetica, sans-serif; color: #444; }
h1, p { margin: 10px; padding: 0px; }
textarea { width: 350px; padding: 2px; font: normal 12px Verdana, sans-serif; border: 1px solid #828790; height: 100px; color: #777; }
input.button { margin: 0; font: bolder 12px Arial, Sans-serif; border: 1px solid #828790; padding: 1px; background: #FFF; color: #CC0000; }
.error_msg { padding: 4px; background-color: #ffeeee; border: 1px dotted #cc0000; margin: 5px 10px 5px 10px; color: #cc0000; }
.error { color: #cc0000; }
fieldset { width: 570px; }
div.formulargenerator-4webmaster label, div.formulargenerator-4webmaster .controlset span { width: 150px; display: block; float: left; text-align: right; }
div.formulargenerator-4webmaster label { margin: 5px; } div.formulargenerator-4webmaster .controlset span { margin: 0px 0px 0px 5px; } div.formulargenerator-4webmaster .controlset label { display: inline; float: none; }
div.formulargenerator-4webmaster .controlset input { margin: 0px 0px 0px 10px; } div.formulargenerator-4webmaster input, div.formulargenerator-4webmaster select, div.formulargenerator-4webmaster textarea { margin: 2px 2px 2px 5px; }
div.formulargenerator-4webmaster div { clear: both; } </style> </head> <body> <?php if ($error || empty($_POST)) {?> <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'iso-8859-15'); ?>" method="post"> <fieldset> <legend>xxxxxxxxxx</legend> <div class="formulargenerator-4webmaster"> <?php if ($error) { ?> <div class="error_msg">Bitte alle mit * markierten Felder ausfüllen.</div> <?php } ?><div> <label for="E_MailAdresse"<?php echo !empty($errors['E_MailAdresse']) ? $errors['E_MailAdresse'] : null ; ?>>E-Mail Adresse: *</label> <input tabindex="1" type="text" id="E_MailAdresse" name="E_MailAdresse" value="<?php echo $_text_E_MailAdresse; ?>" /> </div> <div> <label for="Geburtsdatum00_00_0000"<?php echo !empty($errors['Geburtsdatum00_00_0000']) ? $errors['Geburtsdatum00_00_0000'] : null ; ?>>Geburtsdatum 00.00.0000 *</label> <input tabindex="2" type="text" id="Geburtsdatum00_00_0000" name="Geburtsdatum00_00_0000" value="<?php echo $_text_Geburtsdatum00_00_0000; ?>" /> </div> <label for="bla"<?php echo !empty($errors['bla']) ? $errors['bla'] : null ; ?>>bla *</label> <select tabindex="3" id="bla" name="bla[]" multiple="multiple"> <option value="bla"<?php echo $_select_bla_bla; ?>>bla</option> <option value="bla"<?php echo $_select_bla_bla; ?>>bla</option> <option value="bla"<?php echo $_select_bla_bla; ?>>bla</option> <option value="bla"<?php echo $_select_bla_bla; ?>>bla</option> </select> <br style="clear: both;" /> <label for="bla"<?php echo !empty($errors['bla']) ? $errors['bla'] : null ; ?>>bla *</label> <select tabindex="4" id="bla" name="bla[]" multiple="multiple"> <option value="bla"<?php echo $_select_bla_bla; ?>>bla</option> <option value="bla"<?php echo $_select_bla_bla; ?>>bla</option> <option value="bla"<?php echo $_select_bla_bla; ?>>bla</option> <option value="bla"<?php echo $_select_bla_bla; ?>>bla</option> </select> <br style="clear: both;" /> <div style="text-align: center; margin: 5px;"> <input type="submit" value="Absenden" /> </div> <p style="text-align: center; margin: 0px;"><a style="color: #aaa; font-size: 10px;" href="http://www.4webmaster.net/" title="Webmaster Tools, Scripte, Tutorials, Formulargenerator">Formulargenerator by 4Webmaster.net</a></p></div> </fieldset> </form> <?php } else { $body = ''; $body .= 'E_MailAdresse: '.htmlspecialchars(!empty($_POST['E_MailAdresse']) ? $_POST['E_MailAdresse'] : '', ENT_QUOTES, 'iso-8859-15').'<br>'; $body .= 'Geburtsdatum00_00_0000: '.htmlspecialchars(!empty($_POST['Geburtsdatum00_00_0000']) ? $_POST['Geburtsdatum00_00_0000'] : '', ENT_QUOTES, 'iso-8859-15').'<br>'; $body .= 'bla: '; if(!empty($_POST['bla'])) { foreach ($_POST['bla'] as $value) { $body .= htmlspecialchars($value, ENT_QUOTES, 'iso-8859-15').', '; } } $body .= '<br>'; $body .= 'bla: '; if(!empty($_POST['bla'])) { foreach ($_POST['bla'] as $value) { $body .= htmlspecialchars($value, ENT_QUOTES, 'iso-8859-15').', '; } } $body .= '<br>'; if(send_email('xxxxxxxxxx', $body, $receiver)) { ?> <h1>xxxxxxxxxx</h1> <p>Vielen Dank für Ihre Nachricht.</p> <? } else { ?> <h1>xxxxxxxxxx</h1> <p>Das Formular konnte leider nicht abgesendet werden. Bitte versuchen Sie es später noch einmal.</p> <? } } ?></body> </html>
Hallo Teufel,
Kann mir vieleicht jemand sagen, was man an dem code ändern müsste, dass es richtig geht?
da müsst so viel geändert werden, dass es mehr Sinn macht, Dir von phpkit abzuraten; aber wohl an:
<?php
error_reporting(E_ALL);
$error = false;
$errors = array();
$receiver = 'xxx@xxx.xxx';function check_email ($string) {
// RegEx created by Myle Ott, found at regexlib.com
return preg_match('/^([a-zA-Z0-9_-])+(.([a-zA-Z0-9_-])+)*@(([(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))]))|((([a-zA-Z0-9])+(([-])+([a-zA-Z0-9])+)*.)+([a-zA-Z])+(([-])+([a-zA-Z0-9])+)*))$/i', $string);
}
Die Gestalt einer Mail-Adresse wird durch die RFC 5322; 3.4 festgelegt. Demnach besteht eine Mail-Adresse aus einem Lokalen Teil, der sich von der Domain durch ein @-Zeichen trennt.
Der Lokale Teil kann seinerseits entweder aus einer Zeichenfolge von Buchstaben, Zahlen und einigen Sonderzeichen !#$%&'*+-/=?^_{|}~, oder aus einer Zeichenfolge bestehen, die in Doppelten Anführungszeichen quotiert ist. Diese besteht auch aus Buchstaben und Zahlen, kann aber mehr Sonderzeichen enthalten. Darunter können neben den Zeichen !#$%&'()\*+,-/:;<=>?@[]^\_
{|}~ auch Leer- sein. Beide Varianten des Lokalen Teils dürfen darüber hinaus auch Punkte enthalten, können jedoch weder mit einem Punkt beginnen noch enden. Insgesamt darf der Lokale Teil die Länge von 64 Zeichen nicht überschreiten. (RFC 5321; 4.5.3.1.1)
Der Reguläre Ausdruck '/([a-zA-Z0-9_\-])+(\.([a-zA-Z0-9_\-])+)*/i'
wird dem nicht gerecht.
Den syntaktischen Aufbau einer Domain definiert RFC 1035; 2.3.1. Sie besteht aus Namensbausteinen, die alle den gleichen Regeln folgen und voneinander jeweils mit einem einfachen Punkt abgetrennt werden. Im einfachsten Fall besteht Domain aus genau einem Baustein (z. B. localhost). Jeder Namensbaustein ist zwischen 1 und 63 Zeichen lang, muss mit einem Buchstaben beginnen und darf danach Buchstaben, Zahlen und Bindestriche enthalten. Faktisch kommen derzeit aber bei einer Top Level Domain (so z. B. com, de, net) keine Zahlen oder Bindestriche vor. Die Domain kann laut RFC 5321 Abs. 4.5.3.1.2 255 Zeichen Länge nicht überschreiten. Somit kann eine Mail-Adresse maximal 319 Zeichen lang sein.
Der Reguläre Ausdruck '/((\[(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))\]))|((([a-zA-Z0-9])+(([\-])+([a-zA-Z0-9])+)*\.)+([a-zA-Z])+(([\-])+([a-zA-Z0-9])+)*))$/i'
wird dem nicht gerecht.
function check_onlynumbers ($string) {
return preg_match('/[1]{1,}$/', $string);
}function check_onlyletters ($string) {
return preg_match('/[2]{1,}$/', $string);
}function send_email ($subject, $body, $receiver, $html = 1) {
if ($html != 1) {
$body = str_replace('<br />', "\n", $body);
$body = str_replace('<br>', "\n", $body);
Die Ersetzungen sind Fehleranfällt. So ist es standardkonform <br/>
oder auch <br id="bla">
zu notieren. Hier sollte also auch ein RegEx mit einer entsprechenden Funktion genutzt werden. Weiterhin sollte die Nachricht $body
mit wordwrap alle 78 Zeichen durch Zeilenumbrüche geteilt werden. Das folgt aus RFC 5322; 2.1.
$body = strip_tags($body);
}$subject = str_replace('\n', '', $subject);
$subject = str_replace('\r', '', $subject);
Diese Ersetzung ist nicht korrekt. Zum einen muss es "\n" und "\r" heißen (also Doppelte Anführungszeichen), damit PHP die Entsprechungen interpretiert. Zum anderen wäre hier eine Kodierung nach RFC 2231 ratsam. Auch wenn man nicht umkodieren will, fährt man immer noch besser mit str_replace(array("\r\n","\r","\n"),' ',$subject);
, weil mit Leerzeichen ersetzt wird.
if ($html) {
$header = 'MIME-Version: 1.0' . "\n";
$header .= 'Content-type: text/html; charset=iso-8859-15'."\n";
$header .= 'From: '.$receiver.' <'.$receiver.'>'."\n";
} else {
$header = 'MIME-Version: 1.0' . "\n";
MIME-Deklaration ist im Klartextformat nicht notwendig.
...
Alles weitere lässt sich ohne die include.php nicht sagen.
Jedenfalls muss ich einmal mehr meine Entrüstung zum Ausdruck bringen, welche katastrophalen Scripte im Internet angeboten werden.
Gruß aus Berlin!
eddi
Hi!
Jedenfalls muss ich einmal mehr meine Entrüstung zum Ausdruck bringen, welche katastrophalen Scripte im Internet angeboten werden.
Wo denn sonst?
off:PP
Hello Eddi,
Deine Gedanken zum Mailcheck finde ich gut dargestellt.
Die Gestalt einer Mail-Adresse wird durch die RFC 5322; 3.4 festgelegt. Demnach besteht eine Mail-Adresse aus einem Lokalen Teil, der sich von der Domain durch ein @-Zeichen trennt.
Der Lokale Teil kann seinerseits entweder aus einer Zeichenfolge von Buchstaben, Zahlen und einigen Sonderzeichen !#$%&'*+-/=?^_
{|}~, oder aus einer Zeichenfolge bestehen, die in Doppelten Anführungszeichen quotiert ist. Diese besteht auch aus Buchstaben und Zahlen, kann aber mehr Sonderzeichen enthalten. Darunter können neben den Zeichen !#$%&'()\*+,-/:;<=>?@[]^\_
{|}~ auch Leer- sein. Beide Varianten des Lokalen Teils dürfen darüber hinaus auch Punkte enthalten, können jedoch weder mit einem Punkt beginnen noch enden. Insgesamt darf der Lokale Teil die Länge von 64 Zeichen nicht überschreiten. (RFC 5321; 4.5.3.1.1)Den syntaktischen Aufbau einer Domain definiert RFC 1035; 2.3.1. Sie besteht aus Namensbausteinen, die alle den gleichen Regeln folgen und voneinander jeweils mit einem einfachen Punkt abgetrennt werden. Im einfachsten Fall besteht Domain aus genau einem Baustein (z. B. localhost). Jeder Namensbaustein ist zwischen 1 und 63 Zeichen lang, muss mit einem Buchstaben beginnen und darf danach Buchstaben, Zahlen und Bindestriche enthalten. Faktisch kommen derzeit aber bei einer Top Level Domain (so z. B. com, de, net) keine Zahlen oder Bindestriche vor. Die Domain kann laut RFC 5321 Abs. 4.5.3.1.2 255 Zeichen Länge nicht überschreiten. Somit kann eine Mail-Adresse maximal 319 Zeichen lang sein.
Wenn wir jetzt noch die Gedanken zu den Codierungen (Content-Encoding und Content-Transfer-Encoding) dazuschreiben würden und auch auf Attachments eingehen würden, dann wäre das schon fast ein Fachartikel...
Wenn man dem dann als Resümee (neudeutsche Rechtschreibung *puh*) noch ein vernünftiges (ausbaufähiges) Mailerscript (vielleicht sogar mit getrenntem Template) zustande bringen könnten, hätten wir eine echte Baustelle in SelfHTML abgebaut :-))
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo eddi danke erstmal für die bemühung!
Aber ich kann irgendwie nicht verstehen, dass der script so fehlerhaft ist da er ja so ohne probleme geht?
www.xxx-xxx.de/xxx.php
Ich dachte, es muss vieleicht nur eine kleinigkeit an den sende button oder so umgeschrieben werden, dass es richtig geht.
www.xxx-xxx.de/include.php?path=xxx.php
Von phpkit abraten? Ok aber dann müsste ich es ja so nutzen, wie es ja nicht gut aussieht? (www.xxx-xxx.de/xxx.php) Das war ja das was ich sehr gerne anders hätte. ;-(