Liebes Forum
zuerst mal ein freundliches Hallo und schon mal recht herzlichen Dank im Vorraus! Ich möchte in meinem Wordpress 2.7.1 DE-Edition in einer Seite (nicht in einem Artikel) ein Formular einbauen das schon mit reichlich PHP drumherum ist. Das Ganze funktioniert eigentlich schon so wie ich es haben will, aber mit dem Einbau in WP habe ich mein liebe Not!
Ich habe bei allen Formmailer-Plugins die ich getestet habe (es waren viele :mrgreen: ) leider eine ganz bestimmte Funktion vermisst, die ich mir selber machen musste, da ich aber nicht einfach in fremden Plugins herumcoden darf/will und das auch sicher nicht so gut kann, dass es funktioniert hab ich mir forgenden Code mit etwas fremder Hilfe zusammengebastelt:
Wie gesagt, in einer Statischen *.php klappts wunderbar und auch wenn ich es per iframe (pfui!) in WP einbaue läuft alles glatt
Hier erst mal das Script:
<?php
session_start();
?>
<?php
# Adresse, an die die Formulardaten gesendet werden sollen:
$mailto = "office@beispiel.com";
# Maximale Größe des Attachments in Bytes:
$max_attach_size = 1500000;
if (isset($_POST["form_submitted"]))
{
//hier wird geprüft ob die emailadresse schon in der datenbank ist
$db = mysql_connect ("localhost", "user", "passwort", "datenbankname")
or die ("keine Verbindung zur Datenbank: " .mysql_error());
mysql_select_db("datenbankname");
$email = mysql_real_escape_string($_POST['email']);
$name = $_POST['name'];
$query = "
SELECT *
FROM mail_tab
WHERE mail='".$email."'
";
$res = mysql_query($query);
// ist die emailadresse noch nicht vorhanden geht es weiter
if(mysql_num_rows($res) == 0)
{
// übergebene Variablen ermitteln:
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$subject2 = $_POST['subject2'];
$frage = $_POST['frage'];
$alter = $_POST['alter'];
$geschlecht = $_POST['geschlecht'];
// Überprüfungen der Daten:
# Hier werden die zu erfüllenden Bedingungen überprüft. Nur wernn das Array $errors keinen Eintrag hat, wird die Mail versendet
unset($errors);
if(!isset($_SESSION['captcha'])) $errors[] = 'Session error';
if ($email != "" and !preg_match("/^[^@]+@.+\.\D{2,5}$/", $email)) $errors[] = "die E-Mail-Adresse sieht nicht richtig aus";
if ($name == "") $errors[] = "es wurde kein Name eingegeben";
if ($geschlecht == "") $errors[] = "du hast dein Geschlecht nicht angegeben";
if ($alter == "") $errors[] = "du hast dein Alter nicht angegeben";
if ($frage == "") $errors[] = "du hast mir ja gar keine Frage gestellt !";
if ($_FILES['probe']['size'] > $max_attach_size) $errors[] = "Attachment zu groß (".number_format($_FILES['probe']['size']/1000,0,",","")." KB) - Maximalgröße: ".number_format($max_attach_size/1000,0,",","")." KB";
if($_POST['captcha_word'] != $_SESSION['captcha']) $errors[] = 'Sicherheitscode ist falsch';
if (empty($errors))
{
// $text = stripslashes($text);
// Inhalt der Mail
$text = "
Hallo Claudia,
Mein Name ist $name, ich bin $alter Jahre alt und $geschlecht !
Bitte beantworte mir meine Frage:
$frage
Antworte mir bitte unter: $email
Alles Liebe und vielen Dank,
$name";
// ende Inhalt der Mail
$subject = stripslashes($subject);
if ($name != "") $mail_name=$name; else $mail_name="kein Name";
if ($subject != "") $mail_subject = $subject; else $mail_subject = "kein Betreff";
if ($email != "") $mail_email = $email; else $mail_email = "email@unknown.xyz";
// if ($geschlecht != "") $text = "Geschlecht: ".$geschlecht."\n\n".$text;
$ip = $_SERVER["REMOTE_ADDR"];
// Wenn Attachment, dann MIME-Mail erstellen:
if (isset($_FILES['probe']['name']) && trim($_FILES['probe']['name']) != "")
{
// Datei einlesen und codieren:
$datei_content = fread(fopen($_FILES['probe']['tmp_name'],"r"),filesize($_FILES['probe']['tmp_name']));
$datei_content = chunk_split(base64_encode($datei_content),76,"\n");
// Boundary festlegen:
$boundary = md5(uniqid(rand()));
// Mail-Header:
$mail_header = "From: ".$mail_name." <".$mail_email.">\n";
$mail_header .= "X-Sender-IP: ".$ip."\n";
$mail_header .= "MIME-Version: 1.0\n";
$mail_header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
$mail_header .= "This is a multi-part message in MIME format.\n";
// Mail-Text:
$mail_header .= "--".$boundary;
$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n".$text;
// Attachment:
$mail_header .= "\n--".$boundary;
$mail_header .= "\nContent-Type: ".$_FILES['probe']['type']."; name=\"".$_FILES['probe']['name']."\"";
$mail_header .= "\nContent-Transfer-Encoding: base64";
$mail_header .= "\nContent-Disposition: attachment; filename=\"".$_FILES['probe']['name']."\"";
$mail_header .= "\n\n".$datei_content;
// Ende:
$mail_header .= "\n--".$boundary."--";
// Sende E-Mail und gebe Fehler bzw. Bestaetigung aus
if (@mail($mailto,$mail_subject,"",$mail_header)) $sent = true; else $errors[] = "keine Verbindung zum Mailserver - bitte nochmal versuchen";
}
// kein Attachment, normale E-Mail:
else
{
$mail_header = "From: ".$mail_name." <".$mail_email.">\n";
$mail_header .= "X-Sender-IP: $ip\n";
$mail_header .= "Content-Type: text/plain";
if (@mail($mailto,$mail_subject, $text,$mail_header)) $sent = true; else $errors[] = "keine Verbindung zum Mailserver - bitte nochmal versuchen";
}
// Kopie an Absender:
if (isset($sent) && isset($email) && $email != "" && isset($_POST['copy']))
{
$text2 = "
Hallo $name,
Es hat alles geklappt, weitere Daten aus dem Formular werden hier zur Sicherheit nicht angegeben!
Bis bald !";
$header= "From: ".$mailto."\n";
$header .= "X-Sender-IP: ".$ip."\n";
$header .= "Content-Type: text/plain";
@mail($email, $subject2, $text2, $header);
}
# session_destroy();
}
}
else
{
?>
<br /><br /><br /><br /><br />
<p style="color:red; font-weight:bold;">Ach Schade !</p>
<p>Hallo <?php echo $name; ?>,<br />du kannst dich leider nur einmal eintragen!</p>
<br /><br /><br />
<?php
}
}
if (empty($sent))
{
if(isset($errors))
{
?><p style="color:red; font-weight:bold;">Achtung:</p><ul><?php foreach($errors as $f) { ?><li><?php echo $f; ?></li><?php } ?></ul><br /><?php
}
$letters="abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789";
mt_srand((double)microtime()*1000000);
$word='';
for($i=0;$i<5;$i++)
{
$word.=substr($letters,mt_rand(0,strlen($letters)-1),1);
}
$_SESSION['captcha'] = $word;
?>
<form method="post" action="" enctype="multipart/form-data">
<input type="hidden" name="subject" value="Subject" />
<input type="hidden" name="subject2" value="RE: Subject" />
<p><strong>Dein Name:</strong><br />
<input type="text" name="name" value="<?php if (isset($name)) echo htmlentities(stripslashes($name)); else echo ""; ?>" size="35" /></p>
<p><strong>Deine E-Mail-Adresse:</strong><br />
<input type="text" name="email" value="<?php if (isset($email)) echo htmlentities(stripslashes($email)); else echo ""; ?>" size="35" /><br /></p>
<p><strong>Dein Geschlecht:</strong><br />
<input type="text" name="geschlecht" value="<?php if (isset($geschlecht)) echo htmlentities(stripslashes($geschlecht)); else echo ""; ?>" size="35" /><br /></p>
<p><strong>Dein Alter:</strong><br />
<input type="text" name="alter" value="<?php if (isset($alter)) echo htmlentities(stripslashes($alter)); else echo ""; ?>" size="35" /><br /></p>
<p><strong>Deine Frage:</strong><br />
<textarea name="frage" cols="44" rows="12"><?php if (isset($text)) echo htmlentities(stripslashes($text)); else echo ""; ?></textarea><br /></p>
<p><img border="1" style="margin:0px; padding:0px; border:1px solid #000;" src="http://beispiel.com/abfrage/formmail_img/image.php" ><br />
<strong>Sicherheitscode:</strong> <input type="text" style="margin:0px; padding:0px; width:100px; height:23px; font-size:16px;" name="captcha_word" value="" size="10" /></p>
<br />
<p><strong>Möchtest du eine Bestätigung an deine Emailadresse geschickt bekommen ?</strong><br />
<input type="checkbox" name="copy" value="true" /> Ja, ich möchte eine Bestätigung!</p>
<p><input type="submit" name="form_submitted" value="OK - Frage jetzt absenden »" /></p>
</form><?php
}
else
{
if (empty($email)) { ?><p><b>Danke!</b><br />Nachricht erfolgreich versendet. Allerdings wurde keine E-Mail-Adresse angegeben.</p><?php }
else {
// falls die emailadresse noch nicht in der datenbank war ist sie das spätestens jetzt !
mysql_query("INSERT INTO mail_tab(mail) values('".$email."')");
mysql_close ($db);
?>
<br /><br /><br /><br /><br />
<h2>Super, das hat geklappt !</h2>
<p>Deine Frage wurde erfolgreich versendet.</p>
<?php }
}
?>
Alles anzeigen
Egal was ich mache, es will mir nicht funktionieren wenn ich es in einer eigen WP-Seite reingebe.
Egal welchen Pfad ich beim include per php angebe, egal ob ich den Code direkt in die Seite packe (WYSIWYG-Editor ist standarmäßig bei mir off) und Exec-PHP 4.9 ist installiert (funkt auch mit anderem PHP-Code super!) das Formular will nicht.
Schicke ich es "leer" ab, bekomme ich die im Script festgelegten Fehlermeldungen, schicke ich es ausgefüllt, dann kommt "Sie suchen nach was, dass es hier nicht gibt" in englischer Sprache. Auch ein leeres action-attribut und diverse varianten von php-self scheitern, direkte eingabe auch per page_id klappt auch nicht.
Google hat mich leider auch nicht wirklich schlauer gemacht und noch dazu bin ich auch noch ein WP-Neuling :)