Hallo Zusammen,
ich habe mir selbst ein Formular erstellt das ich
gerne über den integrierten Formmailer versenden möchte,
um hier auch ein bisschen Sicherheit hinein zu bringen,
hab ich ein Capacha mit eigenen Fragen und eine leere Zeile eingefügt,
die nicht befüllt werden darf. Ich hab nur leider das Problem das beides nicht wirklich funktioniert, es verhindert weder das leere Feld noch die nicht gegebene Antwort des Capachas das senden des Formulars. Vielleicht könnte man das ganze auch vereinfachen? Über Vorschläge wäre ich natürlich Dankbar.
Hier der Code meines Formulars:
Was übersehe ich hier das der Spamschutz nicht greift???
Dankeschön beireits im Voraus für eure Hilfe!!!
ich habe mir selbst ein Formular erstellt das ich
gerne über den integrierten Formmailer versenden möchte,
um hier auch ein bisschen Sicherheit hinein zu bringen,
hab ich ein Capacha mit eigenen Fragen und eine leere Zeile eingefügt,
die nicht befüllt werden darf. Ich hab nur leider das Problem das beides nicht wirklich funktioniert, es verhindert weder das leere Feld noch die nicht gegebene Antwort des Capachas das senden des Formulars. Vielleicht könnte man das ganze auch vereinfachen? Über Vorschläge wäre ich natürlich Dankbar.
Hier der Code meines Formulars:
PHP-Code:
<?php
//Start Capacha__________________________________________________________________
/**
* Konfiguration
*
* Bitte passen Sie die folgenden Werte an, bevor Sie das Script benutzen!
*
* Das Skript bitte in UTF-8 abspeichern (ohne BOM).
*/
// An welche Adresse sollen die Mails gesendet werden?
$zieladresse = 'MeineMail@adresse.at';
// Welche Adresse soll als Absender angegeben werden?
// (Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)
$absenderadresse = 'Absender@adresse.at';
// Welcher Absendername soll verwendet werden?
$absendername = 'Kontaktformular';
// Welchen Betreff sollen die Mails erhalten?
$betreff = 'Zimmeranfrage';
// Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?
// Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!
$urlDankeSeite = 'danke.html';
// Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?
$trenner = ":\t"; // Doppelpunkt + Tabulator
/**
* Ende Konfiguration
*/
if ($_SERVER['REQUEST_METHOD'] === "POST") {
$header = array();
$header[] = "From: ".mb_encode_mimeheader($absendername, "utf-8", "Q")." <".$absenderadresse.">";
$header[] = "MIME-Version: 1.0";
$header[] = "Content-type: text/plain; charset=utf-8";
$header[] = "Content-transfer-encoding: 8bit";
$mailtext = "";
foreach ($_POST as $name => $wert) {
if (is_array($wert)) {
foreach ($wert as $einzelwert) {
$mailtext .= $name.$trenner.$einzelwert."\n";
}
} else {
$mailtext .= $name.$trenner.$wert."\n";
}
}
mail(
$zieladresse,
mb_encode_mimeheader($betreff, "utf-8", "Q"),
$mailtext,
implode("\n", $header)
) or die("Die Mail konnte nicht versendet werden.");
header("Location: $urlDankeSeite");
exit;
}
header("Content-type: text/html; charset=utf-8");
//..Start Formchecker und capacha
session_start();
if(isset($_POST['s_end'])) {
if(!empty($_POST['nospam'])) {
exit(); // Honepot
} else {
if(isset($_SESSION['answer']) && $_SESSION['answer'] == strtolower($_POST['c_aptcha'])) {
echo 'Die Spamschutz-Frage wurde richtig beantwortet.';
unset($_SESSION['answer']);
// Weitere Validierung, ggf. Weiterleitung
} else {
exit('Spamschutzfrage falsch beantwortet!');
}
}
} else {
$qa = array();
$qa[] = array('Frage 1' => 'Antwort 1');
$qa[] = array('Frage 2' => 'Antwort 2');
// Fragen und Antworten werden natürlich geändert
$rand = rand(0, (count($qa)-1)); // Eine zufällige Frage auswählen
$quest = $qa[$rand];
$captcha = key($quest); // Unsere Frage...
$_SESSION['answer'] = $quest[$captcha]; // ..und die dazugehörige Antwort
}
//Ende Capacha____________________________________________________________________
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Unbenanntes Dokument</title>
<!--Start Textfeld Überprüfung_________________________________________________-->
<script type="text/javascript">
function chkFormular () {
if (document.Formular.Vorname.value == "") {
alert("Bitte Ihren Vorname eingeben!");
document.Formular.Vorname.focus();
return false;
}
if (document.Formular.Nachname.value == "") {
alert("Bitte Ihren Nachname eingeben!");
document.Formular.Nachname.focus();
return false;
}
if (document.Formular.Adresse.value == "") {
alert("Bitte Ihre Adresse eingeben!");
document.Formular.Adresse.focus();
return false;
}
if (document.Formular.PLZ.value == "") {
alert("Bitte Ihre Postleitzahl eingeben!");
document.Formular.PLZ.focus();
return false;
}
if (document.Formular.Ort.value == "") {
alert("Bitte Ihren Ort eingeben!");
document.Formular.Ort.focus();
return false;
}
if (document.Formular.Mail.value == "") {
alert("Bitte Ihre E-Mail-Adresse eingeben!");
document.Formular.Mail.focus();
return false;
}
if (document.Formular.Mail.value.indexOf("@") == -1) {
alert("Keine E-Mail-Adresse!");
document.Formular.Mail.focus();
return false;
}
if (document.Formular.Von.value == "") {
alert("Bitte wälen sie den Beginn ihres Aufenthaltes aus!");
document.Formular.Von.focus();
return false;
}
if (document.Formular.Bis.value == "") {
alert("Bitte wälen sie das Ende ihres Aufenthaltes aus!");
document.Formular.Bis.focus();
return false;
}
}
</script>
<!--Ende Textfeld Überprüfung_________________________________________________-->
<style>form .spam_protect { display: none; }
</style>
<!-- Beginn neuer Kalender!!!!_____________________________________________-->
<style type="text/css">
.ds_box {
background-color: #FFF;
/*border: 1px solid #000;*/
position: absolute;
margin-top: -200px;
margin-left: -100px;
z-index: 32767;
}
.ds_tbl {
background-color: #FFF;
}
.ds_head {
background-color: #333;
color: #FFF;
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
font-weight: bold;
text-align: center;
letter-spacing: 2px;
}
.ds_subhead {
background-color: #CCC;
color: #000;
font-size: 10px;
font-weight: bold;
text-align: center;
font-family: Arial, Helvetica, sans-serif;
width: 16px;
}
.ds_cell {
background-color: #EEE;
color: #000;
font-size: 10px;
text-align: center;
font-family: Arial, Helvetica, sans-serif;
padding: 5px;
cursor: pointer;
}
.ds_cell:hover {
background-color: #F3F3F3;
} /* This hover code won't work for IE */
</style>
</head>
<body>
<table class="ds_box" cellpadding="0" cellspacing="0" id="ds_conclass" style="display: none;">
<tr><td id="ds_calclass">
</td></tr>
</table>
<script type="text/javascript">
// <!-- <![CDATA[
// Project: Dynamic Date Selector (DtTvB) - 2006-03-16
// Script featured on JavaScript Kit- http://www.javascriptkit.com
// Code begin...
// Set the initial date.
var ds_i_date = new Date();
ds_c_month = ds_i_date.getMonth() + 1;
ds_c_year = ds_i_date.getFullYear();
// Get Element By Id
function ds_getel(id) {
return document.getElementById(id);
}
// Get the left and the top of the element.
function ds_getleft(el) {
var tmp = el.offsetLeft;
el = el.offsetParent
while(el) {
tmp += el.offsetLeft;
el = el.offsetParent;
}
return tmp;
}
function ds_gettop(el) {
var tmp = el.offsetTop;
el = el.offsetParent
while(el) {
tmp += el.offsetTop;
el = el.offsetParent;
}
return tmp;
}
// Output Element
var ds_oe = ds_getel('ds_calclass');
// Container
var ds_ce = ds_getel('ds_conclass');
// Output Buffering
var ds_ob = '';
function ds_ob_clean() {
ds_ob = '';
}
function ds_ob_flush() {
ds_oe.innerHTML = ds_ob;
ds_ob_clean();
}
function ds_echo(t) {
ds_ob += t;
}
var ds_element; // Text Element...
var ds_monthnames = [
'January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'
]; // You can translate it for your language.
var ds_daynames = [
'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
]; // You can translate it for your language.
// Calendar template
function ds_template_main_above(t) {
return '<table cellpadding="3" cellspacing="1" class="ds_tbl">'
+ '<tr>'
+ '<td class="ds_head" style="cursor: pointer" onclick="ds_py();"><<</td>'
+ '<td class="ds_head" style="cursor: pointer" onclick="ds_pm();"><</td>'
+ '<td class="ds_head" style="cursor: pointer" onclick="ds_hi();" colspan="3">[Close]</td>'
+ '<td class="ds_head" style="cursor: pointer" onclick="ds_nm();">></td>'
+ '<td class="ds_head" style="cursor: pointer" onclick="ds_ny();">>></td>'
+ '</tr>'
+ '<tr>'
+ '<td colspan="7" class="ds_head">' + t + '</td>'
+ '</tr>'
+ '<tr>';
}
function ds_template_day_row(t) {
return '<td class="ds_subhead">' + t + '</td>';
// Define width in CSS, XHTML 1.0 Strict doesn't have width property for it.
}
function ds_template_new_week() {
return '</tr><tr>';
}
function ds_template_blank_cell(colspan) {
return '<td colspan="' + colspan + '"></td>'
}
function ds_template_day(d, m, y) {
return '<td class="ds_cell" onclick="ds_onclick(' + d + ',' + m + ',' + y + ')">' + d + '</td>';
// Define width the day row.
}
function ds_template_main_below() {
return '</tr>'
+ '</table>';
}
// This one draws calendar...
function ds_draw_calendar(m, y) {
// First clean the output buffer.
ds_ob_clean();
// Here we go, do the header
ds_echo (ds_template_main_above(ds_monthnames[m - 1] + ' ' + y));
for (i = 0; i < 7; i ++) {
ds_echo (ds_template_day_row(ds_daynames[i]));
}
// Make a date object.
var ds_dc_date = new Date();
ds_dc_date.setMonth(m - 1);
ds_dc_date.setFullYear(y);
ds_dc_date.setDate(1);
if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
days = 31;
} else if (m == 4 || m == 6 || m == 9 || m == 11) {
days = 30;
} else {
days = (y % 4 == 0) ? 29 : 28;
}
var first_day = ds_dc_date.getDay();
var first_loop = 1;
// Start the first week
ds_echo (ds_template_new_week());
// If sunday is not the first day of the month, make a blank cell...
if (first_day != 0) {
ds_echo (ds_template_blank_cell(first_day));
}
var j = first_day;
for (i = 0; i < days; i ++) {
// Today is sunday, make a new week.
// If this sunday is the first day of the month,
// we've made a new row for you already.
if (j == 0 && !first_loop) {
// New week!!
ds_echo (ds_template_new_week());
}
// Make a row of that day!
ds_echo (ds_template_day(i + 1, m, y));
// This is not first loop anymore...
first_loop = 0;
// What is the next day?
j ++;
j %= 7;
}
// Do the footer
ds_echo (ds_template_main_below());
// And let's display..
ds_ob_flush();
// Scroll it into view.
ds_ce.scrollIntoView();
}
// A function to show the calendar.
// When user click on the date, it will set the content of t.
function ds_sh(t) {
// Set the element to set...
ds_element = t;
// Make a new date, and set the current month and year.
var ds_sh_date = new Date();
ds_c_month = ds_sh_date.getMonth() + 1;
ds_c_year = ds_sh_date.getFullYear();
// Draw the calendar
ds_draw_calendar(ds_c_month, ds_c_year);
// To change the position properly, we must show it first.
ds_ce.style.display = '';
// Move the calendar container!
the_left = ds_getleft(t);
the_top = ds_gettop(t) + t.offsetHeight;
ds_ce.style.left = the_left + 'px';
ds_ce.style.top = the_top + 'px';
// Scroll it into view.
ds_ce.scrollIntoView();
}
// Hide the calendar.
function ds_hi() {
ds_ce.style.display = 'none';
}
// Moves to the next month...
function ds_nm() {
// Increase the current month.
ds_c_month ++;
// We have passed December, let's go to the next year.
// Increase the current year, and set the current month to January.
if (ds_c_month > 12) {
ds_c_month = 1;
ds_c_year++;
}
// Redraw the calendar.
ds_draw_calendar(ds_c_month, ds_c_year);
}
// Moves to the previous month...
function ds_pm() {
ds_c_month = ds_c_month - 1; // Can't use dash-dash here, it will make the page invalid.
// We have passed January, let's go back to the previous year.
// Decrease the current year, and set the current month to December.
if (ds_c_month < 1) {
ds_c_month = 12;
ds_c_year = ds_c_year - 1; // Can't use dash-dash here, it will make the page invalid.
}
// Redraw the calendar.
ds_draw_calendar(ds_c_month, ds_c_year);
}
// Moves to the next year...
function ds_ny() {
// Increase the current year.
ds_c_year++;
// Redraw the calendar.
ds_draw_calendar(ds_c_month, ds_c_year);
}
// Moves to the previous year...
function ds_py() {
// Decrease the current year.
ds_c_year = ds_c_year - 1; // Can't use dash-dash here, it will make the page invalid.
// Redraw the calendar.
ds_draw_calendar(ds_c_month, ds_c_year);
}
// Format the date to output.
function ds_format_date(d, m, y) {
// 2 digits month.
m2 = '00' + m;
m2 = m2.substr(m2.length - 2);
// 2 digits day.
d2 = '00' + d;
d2 = d2.substr(d2.length - 2);
// YYYY-MM-DD
return d2 + '.' + m2 + '.' + y;
}
// When the user clicks the day.
function ds_onclick(d, m, y) {
// Hide the calendar.
ds_hi();
// Set the value of it, if we can.
if (typeof(ds_element.value) != 'undefined') {
ds_element.value = ds_format_date(d, m, y);
// Maybe we want to set the HTML in it.
} else if (typeof(ds_element.innerHTML) != 'undefined') {
ds_element.innerHTML = ds_format_date(d, m, y);
// I don't know how should we display it, just alert it to user.
} else {
alert (ds_format_date(d, m, y));
}
}
// And here is the end.
// ]]> -->
</script>
<!-- Ende neuer Kalender!!!!_____________________________________________-->
</head>
<body>
<div style="width:260px; overflow:hidden; color: #3e9c2a;">
<form title="contactform" name="Formular" action="" method="post" onsubmit="return chkFormular()" accept-charset="utf-8">
<table cellspacing="1">
<tr>
<td style="width:80px">Vorname:</td>
<td><input name="Vorname" type="text" size="19" maxlength="40" />*</td>
</tr>
<tr>
<td>Nachname:</td>
<td><input name="Nachname" type="text" size="19" maxlength="40" />*</td>
</tr>
<tr>
<td>Adresse:</td>
<td><input name="Adresse" type="text" size="19" maxlength="100" />*</td>
</tr>
<tr>
<td>PLZ / Ort:</td>
<td><input name="PLZ" type="text" size="4" maxlength="8" /> /
<input name="Ort" type="text" size="9" maxlength="50" />*</td>
</tr>
<tr>
<td>E-Mail:</td>
<td><input name="Mail" type="text" size="19" maxlength="100" />*</td>
</tr>
<tr>
<td>Erwachsene:</td>
<td><select type="checkbox" style="width:136px" name="Erwachsene[]">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
<option>15</option>
<option>16</option>
<option>17</option>
<option>18</option>
<option>19</option>
<option>20</option>
</select>*</td>
</tr>
<tr>
<td>Kinder:</td>
<td><select type="checkbox" style="width:136px" name="Kinder[]">
<option></option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
<option>15</option>
<option>16</option>
<option>17</option>
<option>18</option>
<option>19</option>
<option>20</option>
</select></td>
</tr>
<tr>
<td>Von:</td>
<td>
<input onclick="ds_sh(this);" name="Von" type="text" size="15" maxlength="10" />*</td>
</tr>
<tr>
<td>Bis:</td>
<td><input onclick="ds_sh(this);" name="Bis" type="text" size="15" maxlength="10" />*</td>
</tr>
</table>
<p>Kommentar:<br/>
<textarea name="Kommentar" style="width:220px; height:230px"></textarea>
</p>
<div class="spam_protect">
<label for="nospam">Dieses Feld bitte nicht ausfüllen! (Spamschutz)</label>
<input id="nospam" name="nospam" type="text" /></div>
<p>
<label for="c_aptcha">Sicherheitsfrage: <br/>
<?php echo $captcha; ?></label><br/>
<!--<a style="color: #fff; font-size:12px">Bitte alles klein schreiben.</a>
<br/>-->
<input id="c_aptcha" name="c_aptcha" type="text" size="30" /><br/>
<input id="s_end" name="s_end" align="left" type="submit" value="Absenden" /><input style="margin-left: 26px;" type="reset" value="Abbrechen">
</p>
</form>
</div>
</body>
</html>
Dankeschön beireits im Voraus für eure Hilfe!!!

Kommentar