Hallo zusammen
Ich habe folgendes Kontakformular:
PHP-Code:
<style type="text/css">
.style2 {
text-align: left;
}
</style>
<div style="text-align: middle;">
<h3>Kontaktformular</h3>
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$betreff = $_POST['betreff'];
$telenr = $_POST['telenr'];
$nachricht = $_POST['nachricht'];
$email = $_POST['email'];
# Ihre E-Mail-Adresse
$an ="support@next-it.ch";
# Diese Nachricht wird an Ihre E-Mail-Adresse gesendet
$text = "Hallo \n\n Du hast eine neue Nachricht von $vorname $nachname via Bestellformular von hosting.next-it.ch erhalten:\n\n
Von:$vorname $nachname\n Formular: Kontakt \n E-Mail:$email\n Tel. Nr: $telenr\n Nachricht:\n $nachricht\n\n.";
$sent = @mail($an, $betreff, $text, "From: " . $email);
if ($sent){
echo "<b>Ihre Nachricht wurde gesendet!</b>";
}else{
echo "<b>Ihre Nachricht konnte leider nicht gesendet werden! Versuchen Sie es bitte nochmals.</b>";
}
}
else { ?>
<script type="text/javascript">
function eingaben_ueberpruefen(){
var mail = document.Formular.email.value;
if (document.Formular.vorname.value.length < 3) { // Vorname mindestens 2 Zeichen
alert("Sie haben noch keinen Vornamen eingegeben!")
document.Formular.vorname.focus();
return false;
}
else if (document.Formular.nachname.value.length < 3) { // Nachname mindestens 2 Zeichen
alert("Bitte geben Sie Ihren Nachnamen ein");
document.Formular.nachname.focus();
return false;
}
else if (document.Formular.telenr.value.length < 3) { // Nachname mindestens 2 Zeichen
alert("Bitte geben Sie Ihren Nachnamen ein");
document.Formular.nachname.focus();
return false;
}
else if (mail.length < 10 || mail.indexOf ('@',0) == -1 || mail.indexOf ('.',0) == -1) {
alert("Bitte geben Sie eine gültige E-Mail-Adresse ein.")
document.Formular.email.select();
return false;
}
else if (document.Formular.betreff.value.length < 4) { // Betreff mindestens 9 Zeichen
alert("Bitte geben Sie einen Betreff ein!")
document.Formular.betreff.focus();
return false;
}
else if (document.Formular.nachricht.value.length < 10) { // Nachricht mindestens 19 Zeichen
alert("Bitte geben Sie eine Nachricht ein!")
document.Formular.nachricht.focus();
return false;
}
else
return true;
}
</script>
<form name="Formular" method="post" onSubmit="return eingaben_ueberpruefen();">
<table cellPadding="4" cellSpacing="2" border="1">
<tr>
<th scope="row" class="style2"><b>Vorname:</b></th>
<td class="style2"><input type="text" name="vorname" size="35" maxlength="40"></td>
</tr>
<tr>
<th scope="row" class="style2"><b>Nachname:</b></th>
<td class="style2"><input type="text" name="nachname" size="35" maxlength="40"></td>
</tr>
<tr>
<th scope="row" class="style2"><b>Tel. Nr.:</b></th>
<td class="style2"><input type="text" name="telenr" size="35" maxlength="40"></td>
</tr>
<tr>
<th scope="row" class="style2"><b>E-Mail:</b></th>
<td class="style2"><input type="text" name="email" size="35" maxlength="40"></td>
</tr>
<tr>
<th class="style2" scope="row"><b>Betreff:</b></th>
<td class="style2"><input type="text" name="betreff" size="45" maxlength="60"></td>
</tr>
<tr>
<th colspan="2" class="style2" scope="row">
<b>Nachricht:</b><br><textarea name="nachricht" cols="45" rows="7"></textarea>
</th>
</tr>
<tr >
<th colspan="2"scope="row"><br>
<input type="submit" value="Formular absenden">
</th>
</tr>
</table>
</form>
<?php
}
?>
</div>
Wie kann ich nun noch ein Captcha einbinden?
Besten Dank
zyclop
Geändert von zyclop (11.01.10 um 11:06 Uhr)
Grund: Zensiert
<MrLiNk> wieso bist du immer so negativ frisk?
<Frisk`> bin ich doch gar nich... is halt alles einfach schei**e
<@ScottyTM> Nerds und Fische
<@ScottyTM> eine seltsame Kombination
<@wbx> warum? beide hängen stundenlang vor ner Glasscheibe ;)
Powered by german-bash.org
Folgendes Feld einbauen:
PHP-Code:
<img src="captcha.php" border="0" title="Code"><input type="text" name="sicherheitscode" size="5">
Datei captcha.php:
PHP-Code:
session_start();
unset($_SESSION['captcha_spam']);
function randomString($len) {
function make_seed(){
list($usec , $sec) = explode (' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());
//Der folgende String enthält alle Zeichen, die im Captche verwendet werden sollen
$possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
$str="";
while(strlen($str)<$len) {
$str.=substr($possible,(rand()%(strlen($possible))),1);
}
return($str);
}
$text = randomString(5); //Anzahl der stellen
$_SESSION['captcha_spam'] = $text;
header('Content-type: image/png');
$img = ImageCreateFromPNG('captcha_grundbild.PNG'); //Hintergrundimage
$color = ImageColorAllocate($img, 0, 0, 0); //Textfarbe
$ttf = $_SERVER['DOCUMENT_ROOT']."/XFILESF"; //Text-Schriftart
$ttfsize = 25; //Schriftgrösse
$angle = rand(0,5);
$t_x = rand(5,30);
$t_y = 35;
imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
imagepng($img);
imagedestroy($img);
Im übergebenden Script wie folgt auf das Captcha prüfen:
PHP-Code:
session_start();
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam'])
{
unset($_SESSION['captcha_spam']);
ECHO "Sicherheitscode OK!";
}
else
{
die ("Der Sicherheitscode ist falsch!");
}
Greetz, MC!
Falls Dein Beitrag hilfreich war: Danke dafür :-)
Falls mein Beitrag hilfreich war: Danke klicken! :-)
Also habe das nun eingefügt...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
| <th colspan="2" class="style2" scope="row">
<b>Nachricht:</b><br><textarea name="nachricht" cols="45" rows="7"></textarea>
</th>
</tr>
<tr >
<img src="captcha.php" border="0" title="Code"><input type="text" name="sicherheitscode" size="5">
<th colspan="2"scope="row"><br>
<input type="submit" value="Formular absenden">
</th>
</tr>
</table>
</form> |
und die Datei captcha.php beinhaltet folgenden code
PHP-Code:
session_start();
unset($_SESSION['captcha_spam']);
function randomString($len) {
function make_seed(){
list($usec , $sec) = explode (' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());
//Der folgende String enthält alle Zeichen, die im Captche verwendet werden sollen
$possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
$str="";
while(strlen($str)<$len) {
$str.=substr($possible,(rand()%(strlen($possible))),1);
}
return($str);
}
$text = randomString(5); //Anzahl der stellen
$_SESSION['captcha_spam'] = $text;
header('Content-type: image/png');
$img = ImageCreateFromPNG('captcha_grundbild.PNG'); //Hintergrundimage
$color = ImageColorAllocate($img, 0, 0, 0); //Textfarbe
$ttf = $_SERVER['DOCUMENT_ROOT']."/XFILESF"; //Text-Schriftart
$ttfsize = 25; //Schriftgrösse
$angle = rand(0,5);
$t_x = rand(5,30);
$t_y = 35;
imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
imagepng($img);
imagedestroy($img);
Aber wie muss ich nun die übergabe machen, dass es zuerst die punkte im formular überprüft und dann das captcha?
etwa so?
PHP-Code:
<style type="text/css">
.style2 {
text-align: left;
}
</style>
<div style="text-align: middle;">
<h3>Bestellformular</h3>
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$betreff = $_POST['betreff'];
$telenr = $_POST['telenr'];
$nachricht = $_POST['nachricht'];
$email = $_POST['email'];
# Ihre E-Mail-Adresse
$an ="support@next-it.ch";
# Diese Nachricht wird an Ihre E-Mail-Adresse gesendet
$text = "Hallo \n\nDu hast eine neue Nachricht von $vorname $nachname via Bestellformular von hosting.next-it.ch erhalten:\n\n
Von:$vorname $nachname\nFormular: hosting.next-it.ch\nE-Mail:$email\nTel. Nr: $telenr\nNachricht:\n$nachricht\n\n.";
$sent = @mail($an, $betreff, $text, "From: " . $email);
if ($sent){
echo "<b>Ihre Nachricht wurde gesendet!\n</b>";
}else{
echo "<b>Ihre Nachricht konnte leider nicht gesendet werden! Versuchen Sie es bitte nochmals.</b>";
}
}
else { ?>
<script type="text/javascript">
function eingaben_ueberpruefen(){
var mail = document.Formular.email.value;
if (document.Formular.vorname.value.length < 3) { // Vorname mindestens 2 Zeichen
alert("Sie haben noch keinen Vornamen eingegeben!")
document.Formular.vorname.focus();
return false;
}
else if (document.Formular.nachname.value.length < 3) { // Nachname mindestens 2 Zeichen
alert("Bitte geben Sie Ihren Nachnamen ein");
document.Formular.nachname.focus();
return false;
}
else if (document.Formular.telenr.value.length < 3) { // Nachname mindestens 2 Zeichen
alert("Bitte geben Sie Ihren Nachnamen ein");
document.Formular.nachname.focus();
return false;
}
else if (mail.length < 10 || mail.indexOf ('@',0) == -1 || mail.indexOf ('.',0) == -1) {
alert("Bitte geben Sie eine gültige E-Mail-Adresse ein.")
document.Formular.email.select();
return false;
}
else if (document.Formular.betreff.value.length < 4) { // Betreff mindestens 9 Zeichen
alert("Bitte geben Sie einen Betreff ein!")
document.Formular.betreff.focus();
return false;
}
else if (document.Formular.nachricht.value.length < 10) { // Nachricht mindestens 19 Zeichen
alert("Bitte geben Sie eine Nachricht ein!")
document.Formular.nachricht.focus();
return false;
}
else
return true;
}
</script>
<?php
session_start();
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam'])
{
unset($_SESSION['captcha_spam']);
ECHO "Sicherheitscode OK!";
}
else
{
die ("Der Sicherheitscode ist falsch!");
}
?>
<form name="Formular" method="post" onSubmit="return eingaben_ueberpruefen();">
<table cellPadding="4" cellSpacing="2" border="1">
<tr>
<th scope="row" class="style2"><b>Vorname:</b></th>
<td class="style2"><input type="text" name="vorname" size="35" maxlength="40"></td>
</tr>
<tr>
<th scope="row" class="style2"><b>Nachname:</b></th>
<td class="style2"><input type="text" name="nachname" size="35" maxlength="40"></td>
</tr>
<tr>
<th scope="row" class="style2"><b>Tel. Nr.:</b></th>
<td class="style2"><input type="text" name="telenr" size="35" maxlength="40"></td>
</tr>
<tr>
<th scope="row" class="style2"><b>E-Mail:</b></th>
<td class="style2"><input type="text" name="email" size="35" maxlength="40"></td>
</tr>
<tr>
<th class="style2" scope="row"><b>Betreff:</b></th>
<td class="style2"><input type="text" name="betreff" size="45" maxlength="60"></td>
</tr>
<tr>
<th colspan="2" class="style2" scope="row">
<b>Nachricht:</b><br><textarea name="nachricht" cols="45" rows="7"></textarea>
</th>
</tr>
<tr >
<img src="captcha.php" border="0" title="Code"><input type="text" name="sicherheitscode" size="5">
<th colspan="2"scope="row"><br>
<input type="submit" value="Formular absenden">
</th>
</tr>
</table>
</form>
<?php
}
?>
</div>
Besten Dank
zyclop
So erscheint das Formular nicht sondern nur der Text:
Der Sicherheitscode ist falsch!
Geändert von zyclop (10.12.10 um 10:50 Uhr)
Grund: html tags aus codeblock entfernt
<MrLiNk> wieso bist du immer so negativ frisk?
<Frisk`> bin ich doch gar nich... is halt alles einfach schei**e
<@ScottyTM> Nerds und Fische
<@ScottyTM> eine seltsame Kombination
<@wbx> warum? beide hängen stundenlang vor ner Glasscheibe ;)
Powered by german-bash.org
1. session_start() senden einen Header an den Browser, und muss daher in die erste Zeile des PHP-Scripts.
2. Deine Captcha-Prüfung kannst du so einbauen:
PHP-Code:
$captcha_ok = false;
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam'])
{
unset($_SESSION['captcha_spam']);
$captcha_ok = true;
}
// Hier kommt das Senden der Mail
if ($_SERVER['REQUEST_METHOD'] == "POST" && $captcha_ok) {
$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$betreff = $_POST['betreff'];
$telenr = $_POST['telenr'];
$nachricht = $_POST['nachricht'];
$email = $_POST['email'];
# Ihre E-Mail-Adresse
$an ="support@next-it.ch";
# Diese Nachricht wird an Ihre E-Mail-Adresse gesendet
$text = "Hallo Enrik\n\nDu hast eine neue Nachricht von $vorname $nachname via Bestellformular von hosting.next-it.ch erhalten:\n\n
Von:$vorname $nachname\nFormular: hosting.next-it.ch\nE-Mail:$email\nTel. Nr: $telenr\nNachricht:\n$nachricht\n\n.";
$sent = @mail($an, $betreff, $text, "From: " . $email);
if ($sent){
echo "<b>Ihre Nachricht wurde gesendet!\n</b>";
}else{
echo "<b>Ihre Nachricht konnte leider nicht gesendet werden! Versuchen Sie es bitte nochmals.</b>";
}
}
else { ?>
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
Grob ohne zu prüfen würd ich es so machen:
PHP-Code:
<style type="text/css">
.style2 {
text-align: left;
}
</style>
<div style="text-align: middle;">
<h3>Bestellformular</h3>
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$betreff = $_POST['betreff'];
$telenr = $_POST['telenr'];
$nachricht = $_POST['nachricht'];
$email = $_POST['email'];
<?php
session_start();
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam'])
{
unset($_SESSION['captcha_spam']);
$code="ok";
}
else
{
die ("Der Sicherheitscode ist falsch!");
}
if ($code=="ok")
{
# Ihre E-Mail-Adresse
$an ="support@next-it.ch";
# Diese Nachricht wird an Ihre E-Mail-Adresse gesendet
$text = "Hallo Enrik\n\nDu hast eine neue Nachricht von $vorname $nachname via Bestellformular von hosting.next-it.ch erhalten:\n\n
Von:$vorname $nachname\nFormular: hosting.next-it.ch\nE-Mail:$email\nTel. Nr: $telenr\nNachricht:\n$nachricht\n\n.";
$sent = @mail($an, $betreff, $text, "From: " . $email);
if ($sent){
echo "<b>Ihre Nachricht wurde gesendet!\n</b>";
}else{
echo "<b>Ihre Nachricht konnte leider nicht gesendet werden! Versuchen Sie es bitte nochmals.</b>";
}
}
else { ?>
<script type="text/javascript">
function eingaben_ueberpruefen(){
var mail = document.Formular.email.value;
if (document.Formular.vorname.value.length < 3) { // Vorname mindestens 2 Zeichen
alert("Sie haben noch keinen Vornamen eingegeben!")
document.Formular.vorname.focus();
return false;
}
else if (document.Formular.nachname.value.length < 3) { // Nachname mindestens 2 Zeichen
alert("Bitte geben Sie Ihren Nachnamen ein");
document.Formular.nachname.focus();
return false;
}
else if (document.Formular.telenr.value.length < 3) { // Nachname mindestens 2 Zeichen
alert("Bitte geben Sie Ihren Nachnamen ein");
document.Formular.nachname.focus();
return false;
}
else if (mail.length < 10 || mail.indexOf ('@',0) == -1 || mail.indexOf ('.',0) == -1) {
alert("Bitte geben Sie eine gültige E-Mail-Adresse ein.")
document.Formular.email.select();
return false;
}
else if (document.Formular.betreff.value.length < 4) { // Betreff mindestens 9 Zeichen
alert("Bitte geben Sie einen Betreff ein!")
document.Formular.betreff.focus();
return false;
}
else if (document.Formular.nachricht.value.length < 10) { // Nachricht mindestens 19 Zeichen
alert("Bitte geben Sie eine Nachricht ein!")
document.Formular.nachricht.focus();
return false;
}
else
return true;
}
}
</script>
<form name="Formular" method="post" onSubmit="return eingaben_ueberpruefen();">
<table cellPadding="4" cellSpacing="2" border="1">
<tr>
<th scope="row" class="style2"><b>Vorname:</b></th>
<td class="style2"><input type="text" name="vorname" size="35" maxlength="40"></td>
</tr>
<tr>
<th scope="row" class="style2"><b>Nachname:</b></th>
<td class="style2"><input type="text" name="nachname" size="35" maxlength="40"></td>
</tr>
<tr>
<th scope="row" class="style2"><b>Tel. Nr.:</b></th>
<td class="style2"><input type="text" name="telenr" size="35" maxlength="40"></td>
</tr>
<tr>
<th scope="row" class="style2"><b>E-Mail:</b></th>
<td class="style2"><input type="text" name="email" size="35" maxlength="40"></td>
</tr>
<tr>
<th class="style2" scope="row"><b>Betreff:</b></th>
<td class="style2"><input type="text" name="betreff" size="45" maxlength="60"></td>
</tr>
<tr>
<th colspan="2" class="style2" scope="row">
<b>Nachricht:</b><br><textarea name="nachricht" cols="45" rows="7"></textarea>
</th>
</tr>
<tr >
<img src="captcha.php" border="0" title="Code"><input type="text" name="sicherheitscode" size="5">
<th colspan="2"scope="row"><br>
<input type="submit" value="Formular absenden">
</th>
</tr>
</table>
</form>
<?php
}
?>
</div>
Greetz, MC!
Falls Dein Beitrag hilfreich war: Danke dafür :-)
Falls mein Beitrag hilfreich war: Danke klicken! :-)
Hammer, Ihr seid einfach super.
Das einzige Problem das ich noch habe ist, dass das Bild nicht angezeigt wird.
Seite online unter: hosting.next-it.ch ---> Bestellung
gruss
zyclop
<MrLiNk> wieso bist du immer so negativ frisk?
<Frisk`> bin ich doch gar nich... is halt alles einfach schei**e
<@ScottyTM> Nerds und Fische
<@ScottyTM> eine seltsame Kombination
<@wbx> warum? beide hängen stundenlang vor ner Glasscheibe ;)
Powered by german-bash.org
Schau mal hier: http://hosting.next-it.ch/captcha.php
Normalerweise wird da ein Bild angezeigt. In diesem Falle aber der Source-Code. Warum? Weil du die PHP-Tags außenherum vergessen hast
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
Wenn Erledigt, bitte "Erledigen"! 
Ansonsten gerne auch bedanken/bewerten...
Greetz, MC!
Falls Dein Beitrag hilfreich war: Danke dafür :-)
Falls mein Beitrag hilfreich war: Danke klicken! :-)
ja klar, ich trottel...habe es gemacht, leider funktioniert es immer noch nicht...zwar erstellt er jetzt ein bild aber anschauen kann man es nicht...link steht noch...
<MrLiNk> wieso bist du immer so negativ frisk?
<Frisk`> bin ich doch gar nich... is halt alles einfach schei**e
<@ScottyTM> Nerds und Fische
<@ScottyTM> eine seltsame Kombination
<@wbx> warum? beide hängen stundenlang vor ner Glasscheibe ;)
Powered by german-bash.org

Zitat von
zyclop
Hammer, Ihr seid einfach super.
+ habe ich beide Artikel bewertet.
Danke nochmals..
Problem noch nicht ganz behoben
<MrLiNk> wieso bist du immer so negativ frisk?
<Frisk`> bin ich doch gar nich... is halt alles einfach schei**e
<@ScottyTM> Nerds und Fische
<@ScottyTM> eine seltsame Kombination
<@wbx> warum? beide hängen stundenlang vor ner Glasscheibe ;)
Powered by german-bash.org
Schalte doch bitte mal das error_reporting und Fehler-Anzeige in, in dem du folgende Zeilen an den Anfang der Datei schreibst:
PHP-Code:
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors',1);
Dann bitte die Fehlermeldungen posten (oder selbst lösen). Nach dem Fixen kannst du das wieder rausnehmen.
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
hab ich gemacht, ergibt keine fehlermeldung...ist komisch nicht?
<MrLiNk> wieso bist du immer so negativ frisk?
<Frisk`> bin ich doch gar nich... is halt alles einfach schei**e
<@ScottyTM> Nerds und Fische
<@ScottyTM> eine seltsame Kombination
<@wbx> warum? beide hängen stundenlang vor ner Glasscheibe ;)
Powered by german-bash.org
Kommentiere doch bitte noch den Header-Aufruf aus:
PHP-Code:
// header('Content-type: image/png');
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
dann passiert das selbe als würde ich diesen pfad anrufen
http://hosting.next-it.ch/captcha.php
<MrLiNk> wieso bist du immer so negativ frisk?
<Frisk`> bin ich doch gar nich... is halt alles einfach schei**e
<@ScottyTM> Nerds und Fische
<@ScottyTM> eine seltsame Kombination
<@wbx> warum? beide hängen stundenlang vor ner Glasscheibe ;)
Powered by german-bash.org
Ich kannte den ursächlichen Fehler bereits länger. Ich dachte, du kommst vielleicht selbst drauf, was dein Problem ist:
Du hast sehr wahrscheinlich keine Datei "captcha_grundbild.PNG" im gleichen Ordner, wie die captcha.php liegt. Das führt dazu, das dieser Aufruf schief geht:
PHP-Code:
$img = ImageCreateFromPNG('captcha_grundbild.PNG'); //Hintergrundimage
Folglich gibt es kein $img handle, auf dem das restliche Script aufbaut. Alles weitere sind dann Folge-Fehler.
Bitte gewöhn dir an, nicht einfach irgendwelche Scripts ungeprüft auf einen produktiven Server zu packen sondern teste lokal und betrachte auch ab und an mal das Fehler-Log deines Webservers (vermutlich Apache? Dann im logs-Ordner nach der Log-Datei suchen).
MC Renè hätte da ohne weiteres (ich will da jetzt auf keinen Fall was unterstellen
) schadhaften Code posten können.
Erstelle ein Hintergrundbild für das Captcha, benenn es, wie im Script hinterlegt, und lade es auf den Server. Dann sollte das funktioneren (imho).
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
[PHP][Snippet] Array zu XML konvertieren