Mail verschicken immer noch möglich

Hier werden Probleme rund um das Zahlen Captcha behandelt

Moderator: frameguard

Mail verschicken immer noch möglich

Beitragvon Ralf » 18.01.2007, 11:44

das klappt irgendwie nicht so richtig:

hier mal der Code:


<?php
session_start();
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>artmedic tell a friend</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="copyright" content="Ellen Baitinger, artmedic webdesign, http://www.artmedic.de">
<!--
#############################################################################
# artmedic Tell-a-Friend Version 2.0
# Copyright (c) 2004 Ellen Baitinger, artmedic webdesign
# http://www.artmedic.de (kontakt@artmedic.de)
#
#Sie können dieses Script kostenlos einsetzen, solange Sie die Links auf artmedic webdesign
#und diese Hinweise intakt lassen. Für evl. auftretende Schäden, die durch die
#Verwendung dieses Scripts entstehen, kann artmedic webdesign nicht
#haftbar gemacht werden. Die Benutzung erfolgt auf eigene Gefahr des Anwenders.
#############################################################################
-->
<?
//edit these variables, diese zwei Variablen ändern
//Homepage-URL, Basisverzeichnis der Homepage mit Backslash am Ende
//homepage-URL with backslash at end
$url = "http://YourSite.com/";
//Limit: Anzahl von möglichen Empfehlungen innerhalb von $sperrzeit
//Count of possible recommendation within $sperrzeit
$limit = "10";
//Sperrzeit, falls mehr als $limit Empfehlungen abgegeben wurden von der gleichen IP-Adresse in Sekunden
//timelimit, if more than $limit mails have been sent by same IP-address in seconds
$sperrzeit = "3600"; // 1h
//Textdatei für die Daten, bitte aus Datenschutzgründen umbenennen
//textfile for saving all data, please rename for security reasons
$iplog = "tellafriend.txt";

//ab hier keinen PHP-Code ändern, wenn Sie nicht genau wissen, was Sie tun
//Do not change PHP-Code past here
$time = time();
$id = $_GET[id];
$filled = $_POST[filled];
?>
<style type="text/css">
<!--
.artmedic_box {
padding: 4px;
width: 400px;
border: 1px solid #000000;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #000000;
}
.artmedic_link {
font-size: 10px;
font-weight: normal;
color: #000000;
text-decoration: underline;
}
.artmedic_titel {
font-weight: bold;
padding: 2px;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #999999;
}
.artmedic_text {
font-weight: normal;
padding: 2px;
}
-->
</style>
</head>

<body>
<?
if($filled == "")
{
?>
<div class="artmedic_box">
<div class="artmedic_titel">Diese Seite weiterempfehlen</div>
<form name="form1" method="post" action="tellafriend.php">
<div>F&uuml;llen Sie dazu bitte folgendes Formular aus. Ihre
Eingaben werden nur f&uuml;r diesen Zweck verwendet und nicht gespeichert.<br>
<br>
</div>

<label for="sendername">Ihr Name* </label><br>



<input name="sendername" type="text" id="sendername" size="40"><br>


<label for="senderemail">Ihre E-Mail* </label>
<br>


<input name="senderemail" type="text" id="senderemail" size="40"><br>


<label for="recipientname">Emp&auml;ngername*</label><br>


<input name="recipientname" type="text" id="recipientname" size="40"><br>


<label for="recipientemail">E-Mail des Empf&auml;ngers*</label>
<br>


<input name="recipientemail" type="text" id="recipientemail" size="40"><br>


<label for="anmerkungen">Ihre Nachricht </label>
an den Empf&auml;nger <br>


<textarea name="anmerkungen" cols="40" rows="3" id="anmerkungen"></textarea><br>



<p><br>
<br>
</p>
<p>



<p>Um Spam zu verhindern trage das Ergebnis rechts ein. Danke. </p>






<tr><td><img src="rechen-captcha.php"></td>
<td><input type="text" name="sicherheitscode" size="4"></td>
</tr>
<br>
<br>


<?php

function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "41hgkd632");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam']){
unset($_SESSION['rechen_captcha_spam']);
session_start();
unset($_SESSION['rechen_captcha_spam']);
$zahl1 = rand(10,20); //Erste Zahl 10-20
$zahl2 = rand(1,10); //Zweite Zahl 1-10
$operator = rand(1,2); // + oder -

if($operator == "1"){
$operatorzeichen = " + ";
$ergebnis = $zahl1 + $zahl2;
}else{
$operatorzeichen = " - ";
$ergebnis = $zahl1 - $zahl2;
}

function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}

$_SESSION['rechen_captcha_spam'] = encrypt($ergebnis, "29jfkd921"); //Key
$_SESSION['rechen_captcha_spam'] = str_replace("=", "", $_SESSION['rechen_captcha_spam']);

$rechnung = $zahl1.$operatorzeichen.$zahl2." = ?";
$img = imagecreatetruecolor(80,15);
$schriftfarbe = imagecolorallocate($img,13,28,91);
$hintergrund = imagecolorallocate($img,162,162,162);
imagefill($img,0,0,$hintergrund);
imagestring($img, 3, 2, 0, $rechnung, $schriftfarbe);
header("Content-type: image/png");
imagepng($img);
imagedestroy($img);

}
?>





</p>
<p><br>
<br>
</p>
<p>




* = erforderliche Angaben
<br>
<input name="Abschicken" type="submit" value="Senden"> <input type="hidden" name="filled" value="1">
<input type="hidden" name="id" value="<? echo $id; ?>">
<div align="right"><a href="http://www.artmedic.de" target="_blank" class="artmedic_link">powered
by artmedic webdesign</a>

</div>
</form>
</div>
<?
}
else
{
$id = $_POST[id];
$sendername = $_POST[sendername];
$senderemail = $_POST[senderemail];
$recipientname = $_POST[recipientname];
$recipientemail = $_POST[recipientemail];
$anmerkungen = $_POST[anmerkungen];
//Dateneingabe überprüfen, check incoming form-variables
if (empty ($sendername)) {
die ("Fehler: Sie müssen Ihren Namen eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($senderemail)) {
die ("Fehler: Sie müssen Ihre Emailadresse eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($recipientname)) {
die ("Fehler: Sie müssen einen Empfängernamen eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($recipientemail)) {
die ("Fehler: Sie müssen eine Empfängeremailadresse eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $senderemail)) {
die("Fehler: Geben Sie bitte eine gültige Emailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $recipientemail)) {
die("Fehler: Geben Sie bitte eine gültige Empfänger-Emailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $recipientemail)) {
die("Fehler: Geben Sie bitte eine gültige Empfänger-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $recipientemail)){
die("Fehler: Geben Sie bitte eine gültige Empfänger-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $senderemail)) {
die("Fehler: Geben Sie bitte eine gültige Absender-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $senderemail)){
die("Fehler: Geben Sie bitte eine gültige Absender-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $sendername)) {
die("Fehler: Geben Sie bitte einen gültigen Absendernamen ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $sendername)){
die("Fehler: Geben Sie bitte einen gültigen Absendernamen ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}

$remote = getenv("REMOTE_ADDR");
//Ablaufzeit in Sekunden
$ablaufzeit = "$time" - "$sperrzeit";
//Abgelaufene IP-Adressen entfernen
$test = @file($iplog);
while (list ($line_num, $line) = @each ($test))
{$s = explode("&&",$line);
if($s[0] <= $ablaufzeit)
{
$fz = fopen( "$iplog", "r+" );
$c = fread($fz, filesize($iplog));
fclose($fz);
$line=quotemeta($line);
$string = "";
$c = ereg_replace($line, $string, $c);
$c1=fopen($iplog, "w+");
@flock($c1,2);
fputs($c1, $c);
@flock($c1,3);
fclose($c1);
}}
//IP-Prüfung
$ippruefung = @file($iplog);
while (list ($line_num, $line) = @each ($ippruefung))
{$ips = explode("&&",$line);
//IP-Adresse finden
if($ips[1] == $remote)
{
$ipf = "1";
//Prüfen, wieviel Empfehlungen bereits versendet wurden
if($ips[2] < $limit)
{
$z = $ips[2];
$z ++;
$fp = fopen($iplog, "r" );
$contents = fread($fp, filesize($iplog));
fclose($fp);
$string = "$ips[0]&&$ips[1]&&$z&&";
$replace = ereg_replace($line, $string, $contents);
$fh=fopen($iplog, "w");
@flock($fh,2);
fputs($fh, $replace);
@flock($fh,3);
fclose($fh);
}
if($ips[2] >= $limit)
{$gesperrt = "1";}
}
}
if($ipf != 1)
{
$string2 = "$time&&$remote&&1&&\n";
$fi=fopen($iplog, "a");
@flock($fi,2);
fputs($fi, $string2);
@flock($fi,3);
fclose($fi);
}
//URL der Seite zusammenstellen
if($gesperrt != "1")
{
$sendurl = "$url$id";
if ($anmerkungen == "")
{$anmerkungen = "Keine";}

//Nachricht versenden
$subject = "Seitenempfehlung von $sendername";
$mailtext = "
Sehr geehrte/r Frau/Herr $recipientname,
$sendername ($senderemail) empfiehlt Ihnen den Besuch
folgender Webseite:
------------------------------------------------------
$sendurl
------------------------------------------------------
Anmerkungen dazu von $sendername:
$anmerkungen
";
mail($recipientemail,$subject,$mailtext,"From: $sendername <$senderemail>");
echo "Vielen Dank $sendername,
Ihre Empfehlung wurde an $recipientname ($recipientemail) gesendet.
Bitte schließen Sie dieses Fenster, um zur Ausgangsseite zurückzukehren.
<a href=\"http://www.artmedic.de\">script by artmedic</a>
";
}
if($gesperrt == "1")
{echo "Aufgrund von Spamschutzeinstellungen können Sie leider nur $limit Empfehlungen versenden.";}
}

?>
</body>
</html>




es wird zwar das Rechenbeispiel angezeit, die Mail aber ohne zu lösen verschickt. Warum?


gruß ins Land

Ralf
Ralf
 
Beiträge: 8
Registriert: 18.01.2007, 11:42

Beitragvon Ralf » 18.01.2007, 23:25

Irgendwie komme ich mit diesem Zusatz auf der letzten Seite nicht klar:

//
//
//Hier kommt das ursprüngliche Script hin.
//
//

}
?>

Der Key 29jfkd921 muss der Gleiche sein wie bei der rechen-captcha.php. Der Einbau ins bestehende Script ist sehr einfach, es braucht nur eine if-Schleife um das bisherige Script, welche überprüft ob das Ergebnis das eingegeben wurde, der generierten Captcha Rechnung entspricht. Optional kann auch noch ein else Teil angefügt werden, welche den Fehler ausgibt, dass das Ergebnis falsch war.


ist das der Teil der ersten Seite (rechen-captcha.php?) oder was ist das???

Wenn ich diesen komplett einfüge, erscheinen 1.000 Fehlermeldungen...
Ralf
 
Beiträge: 8
Registriert: 18.01.2007, 11:42

Beitragvon Sebi » 18.01.2007, 23:42

Hey Ralf versuch mal folgendes:

Mache eine Datei die heißt rechen-captcha.php, die muss im selben Verzeichnis liegen und soll folgendes enthalten:
Code: Alles auswählen
<?php
unset($_SESSION['rechen_captcha_spam']);
$zahl1 = rand(10,20); //Erste Zahl 10-20
$zahl2 = rand(1,10); //Zweite Zahl 1-10
$operator = rand(1,2); // + oder -

if($operator == "1"){
$operatorzeichen = " + ";
$ergebnis = $zahl1 + $zahl2;
}else{
$operatorzeichen = " - ";
$ergebnis = $zahl1 - $zahl2;
}

$_SESSION['rechen_captcha_spam'] = encrypt($ergebnis, "41hgkd632"); //Key
$_SESSION['rechen_captcha_spam'] = str_replace("=", "", $_SESSION['rechen_captcha_spam']);

$rechnung = $zahl1.$operatorzeichen.$zahl2." = ?";
$img = imagecreatetruecolor(80,15);
$schriftfarbe = imagecolorallocate($img,13,28,91);
$hintergrund = imagecolorallocate($img,162,162,162);
imagefill($img,0,0,$hintergrund);
imagestring($img, 3, 2, 0, $rechnung, $schriftfarbe);
header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
?>


und jetzt deine oben genannte Datei, die ich umgeschrieben habe:
Code: Alles auswählen
<?php
session_start();
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>artmedic tell a friend</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="copyright" content="Ellen Baitinger, artmedic webdesign, http://www.artmedic.de">
<!--
#############################################################################
# artmedic Tell-a-Friend Version 2.0
# Copyright (c) 2004 Ellen Baitinger, artmedic webdesign
# http://www.artmedic.de (kontakt@artmedic.de)
#
#Sie können dieses Script kostenlos einsetzen, solange Sie die Links auf artmedic webdesign
#und diese Hinweise intakt lassen. Für evl. auftretende Schäden, die durch die
#Verwendung dieses Scripts entstehen, kann artmedic webdesign nicht
#haftbar gemacht werden. Die Benutzung erfolgt auf eigene Gefahr des Anwenders.
#############################################################################
-->
<?
//edit these variables, diese zwei Variablen ändern
//Homepage-URL, Basisverzeichnis der Homepage mit Backslash am Ende
//homepage-URL with backslash at end
$url = "http://YourSite.com/";
//Limit: Anzahl von möglichen Empfehlungen innerhalb von $sperrzeit
//Count of possible recommendation within $sperrzeit
$limit = "10";
//Sperrzeit, falls mehr als $limit Empfehlungen abgegeben wurden von der gleichen IP-Adresse in Sekunden
//timelimit, if more than $limit mails have been sent by same IP-address in seconds
$sperrzeit = "3600"; // 1h
//Textdatei für die Daten, bitte aus Datenschutzgründen umbenennen
//textfile for saving all data, please rename for security reasons
$iplog = "tellafriend.txt";

//ab hier keinen PHP-Code ändern, wenn Sie nicht genau wissen, was Sie tun
//Do not change PHP-Code past here
$time = time();
$id = $_GET[id];
$filled = $_POST[filled];
?>
<style type="text/css">
<!--
.artmedic_box {
padding: 4px;
width: 400px;
border: 1px solid #000000;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #000000;
}
.artmedic_link {
font-size: 10px;
font-weight: normal;
color: #000000;
text-decoration: underline;
}
.artmedic_titel {
font-weight: bold;
padding: 2px;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #999999;
}
.artmedic_text {
font-weight: normal;
padding: 2px;
}
-->
</style>
</head>

<body>
<?
if($filled == "")
{
?>
<div class="artmedic_box">
<div class="artmedic_titel">Diese Seite weiterempfehlen</div>
<form name="form1" method="post" action="tellafriend.php">
<div>F&uuml;llen Sie dazu bitte folgendes Formular aus. Ihre
Eingaben werden nur f&uuml;r diesen Zweck verwendet und nicht gespeichert.<br>
<br>
</div>

<label for="sendername">Ihr Name* </label><br>



<input name="sendername" type="text" id="sendername" size="40"><br>


<label for="senderemail">Ihre E-Mail* </label>
<br>


<input name="senderemail" type="text" id="senderemail" size="40"><br>


<label for="recipientname">Emp&auml;ngername*</label><br>


<input name="recipientname" type="text" id="recipientname" size="40"><br>


<label for="recipientemail">E-Mail des Empf&auml;ngers*</label>
<br>


<input name="recipientemail" type="text" id="recipientemail" size="40"><br>


<label for="anmerkungen">Ihre Nachricht </label>
an den Empf&auml;nger <br>


<textarea name="anmerkungen" cols="40" rows="3" id="anmerkungen"></textarea><br>



<p><br>
<br>
</p>
<p>



<p>Um Spam zu verhindern trage das Ergebnis rechts ein. Danke. </p>






<tr><td><img src="rechen-captcha.php"></td>
<td><input type="text" name="sicherheitscode" size="4"></td>
</tr>
<br>
<br>
</p>
<p><br>
<br>
</p>
<p>
* = erforderliche Angaben
<br>
<input name="Abschicken" type="submit" value="Senden"> <input type="hidden" name="filled" value="1">
<input type="hidden" name="id" value="<? echo $id; ?>">
<div align="right"><a href="http://www.artmedic.de" target="_blank" class="artmedic_link">powered
by artmedic webdesign</a>

</div>
</form>
</div>
<?
}
else
{
$id = $_POST[id];
$sendername = $_POST[sendername];
$senderemail = $_POST[senderemail];
$recipientname = $_POST[recipientname];
$recipientemail = $_POST[recipientemail];
$anmerkungen = $_POST[anmerkungen];
//Dateneingabe überprüfen, check incoming form-variables
if (empty ($sendername)) {
die ("Fehler: Sie müssen Ihren Namen eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($senderemail)) {
die ("Fehler: Sie müssen Ihre Emailadresse eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($recipientname)) {
die ("Fehler: Sie müssen einen Empfängernamen eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($recipientemail)) {
die ("Fehler: Sie müssen eine Empfängeremailadresse eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $senderemail)) {
die("Fehler: Geben Sie bitte eine gültige Emailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $recipientemail)) {
die("Fehler: Geben Sie bitte eine gültige Empfänger-Emailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $recipientemail)) {
die("Fehler: Geben Sie bitte eine gültige Empfänger-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $recipientemail)){
die("Fehler: Geben Sie bitte eine gültige Empfänger-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $senderemail)) {
die("Fehler: Geben Sie bitte eine gültige Absender-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $senderemail)){
die("Fehler: Geben Sie bitte eine gültige Absender-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $sendername)) {
die("Fehler: Geben Sie bitte einen gültigen Absendernamen ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $sendername)){
die("Fehler: Geben Sie bitte einen gültigen Absendernamen ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}

$remote = getenv("REMOTE_ADDR");
//Ablaufzeit in Sekunden
$ablaufzeit = "$time" - "$sperrzeit";
//Abgelaufene IP-Adressen entfernen
$test = @file($iplog);
while (list ($line_num, $line) = @each ($test))
{$s = explode("&&",$line);
if($s[0] <= $ablaufzeit)
{
$fz = fopen( "$iplog", "r+" );
$c = fread($fz, filesize($iplog));
fclose($fz);
$line=quotemeta($line);
$string = "";
$c = ereg_replace($line, $string, $c);
$c1=fopen($iplog, "w+");
@flock($c1,2);
fputs($c1, $c);
@flock($c1,3);
fclose($c1);
}}
//IP-Prüfung
$ippruefung = @file($iplog);
while (list ($line_num, $line) = @each ($ippruefung))
{$ips = explode("&&",$line);
//IP-Adresse finden
if($ips[1] == $remote)
{
$ipf = "1";
//Prüfen, wieviel Empfehlungen bereits versendet wurden
if($ips[2] < $limit)
{
$z = $ips[2];
$z ++;
$fp = fopen($iplog, "r" );
$contents = fread($fp, filesize($iplog));
fclose($fp);
$string = "$ips[0]&&$ips[1]&&$z&&";
$replace = ereg_replace($line, $string, $contents);
$fh=fopen($iplog, "w");
@flock($fh,2);
fputs($fh, $replace);
@flock($fh,3);
fclose($fh);
}
if($ips[2] >= $limit)
{$gesperrt = "1";}
}
}
if($ipf != 1)
{
$string2 = "$time&&$remote&&1&&\n";
$fi=fopen($iplog, "a");
@flock($fi,2);
fputs($fi, $string2);
@flock($fi,3);
fclose($fi);
}
//URL der Seite zusammenstellen
if($gesperrt != "1")
{
$sendurl = "$url$id";
if ($anmerkungen == "")
{$anmerkungen = "Keine";}

function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "41hgkd632");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam']){
unset($_SESSION['rechen_captcha_spam']);

//Nachricht versenden
$subject = "Seitenempfehlung von $sendername";
$mailtext = "
Sehr geehrte/r Frau/Herr $recipientname,
$sendername ($senderemail) empfiehlt Ihnen den Besuch
folgender Webseite:
------------------------------------------------------
$sendurl
------------------------------------------------------
Anmerkungen dazu von $sendername:
$anmerkungen
";
mail($recipientemail,$subject,$mailtext,"From: $sendername <$senderemail>");
echo "Vielen Dank $sendername,
Ihre Empfehlung wurde an $recipientname ($recipientemail) gesendet.
Bitte schließen Sie dieses Fenster, um zur Ausgangsseite zurückzukehren.
<a href=\"http://www.artmedic.de\">script by artmedic</a>
";
}
else
{
echo 'Der eingetragene Code ist falsch';
}
}
if($gesperrt == "1")
{echo "Aufgrund von Spamschutzeinstellungen können Sie leider nur $limit Empfehlungen versenden.";}
}

?>
</body>
</html>
Sebi
 
Beiträge: 44
Registriert: 26.12.2006, 12:05

Beitragvon Ralf » 19.01.2007, 18:00

Hallo Sebi,

finde ich echt klasse, das du dich meines Problems annimmst und dann noch den kompletten Code. Wahnsinn.

Hab nur einen winzigen Schönheitsfehler --> siehe Bild

Die Aufgabe wird nämlich nicht gestellt; einzig der Platz zur Zahleingabe ist da. Im Internet Explorer wird mir das html-Zeichen eines Bildes angezeigt, das allerdings nicht weiter verlinkt wurde. Der Feuerfuchs zeigt mir nix an. Woran kann das liegen.


Danke


Ralf
Dateianhänge
foto.gif
foto.gif (3.88 KiB) 863-mal betrachtet
Ralf
 
Beiträge: 8
Registriert: 18.01.2007, 11:42

Beitragvon Sebi » 19.01.2007, 20:08

alles klar ich hab den fehler :-)

du hast aus dem tutorial folgendes übernommen:

Code: Alles auswählen
<tr>
<td><img src="rechen-captcha.php"></td>
<td><input type="text" name="sicherheitscode" size="4"></td>
</tr>


aber du musst natürlich erstmal das table tag aufmachen, also ersetze den o.g. aussschnitt durch:
Code: Alles auswählen
<table>
<tr>
<td><img src="rechen-captcha.php"></td>
<td><input type="text" name="sicherheitscode" size="4"></td>
</tr>
</table>
Sebi
 
Beiträge: 44
Registriert: 26.12.2006, 12:05

Hallo

Beitragvon Ralf » 19.01.2007, 21:09

Hallo Sebi,

ich möchte ja nicht unhöflich oder lästig erscheinen, aber das klappt immer noch noch nicht.
Ich habe zur Sicherheit nocheinmal den Code hierher kopiert, um alle Mißverständnisse auszuräumen:

tellafriend.php

<?php
session_start();
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>artmedic tell a friend</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="copyright" content="Ellen Baitinger, artmedic webdesign, http://www.artmedic.de">
<!--
#############################################################################
# artmedic Tell-a-Friend Version 2.0
# Copyright (c) 2004 Ellen Baitinger, artmedic webdesign
# http://www.artmedic.de (kontakt@artmedic.de)
#
#Sie können dieses Script kostenlos einsetzen, solange Sie die Links auf artmedic webdesign
#und diese Hinweise intakt lassen. Für evl. auftretende Schäden, die durch die
#Verwendung dieses Scripts entstehen, kann artmedic webdesign nicht
#haftbar gemacht werden. Die Benutzung erfolgt auf eigene Gefahr des Anwenders.
#############################################################################
-->
<?
//edit these variables, diese zwei Variablen ändern
//Homepage-URL, Basisverzeichnis der Homepage mit Backslash am Ende
//homepage-URL with backslash at end
$url = "http://YourSite.com/";
//Limit: Anzahl von möglichen Empfehlungen innerhalb von $sperrzeit
//Count of possible recommendation within $sperrzeit
$limit = "10";
//Sperrzeit, falls mehr als $limit Empfehlungen abgegeben wurden von der gleichen IP-Adresse in Sekunden
//timelimit, if more than $limit mails have been sent by same IP-address in seconds
$sperrzeit = "3600"; // 1h
//Textdatei für die Daten, bitte aus Datenschutzgründen umbenennen
//textfile for saving all data, please rename for security reasons
$iplog = "tellafriend12.txt";

//ab hier keinen PHP-Code ändern, wenn Sie nicht genau wissen, was Sie tun
//Do not change PHP-Code past here
$time = time();
$id = $_GET[id];
$filled = $_POST[filled];
?>
<style type="text/css">
<!--
.artmedic_box {
padding: 4px;
width: 400px;
border: 1px solid #000000;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #000000;
}
.artmedic_link {
font-size: 10px;
font-weight: normal;
color: #000000;
text-decoration: underline;
}
.artmedic_titel {
font-weight: bold;
padding: 2px;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #999999;
}
.artmedic_text {
font-weight: normal;
padding: 2px;
}
-->
</style>
</head>

<body>
<?
if($filled == "")
{
?>
<div class="artmedic_box">
<div class="artmedic_titel">Diese Seite weiterempfehlen</div>
<form name="form1" method="post" action="tellafriend.php">
<div>F&uuml;llen Sie dazu bitte folgendes Formular aus. Ihre
Eingaben werden nur f&uuml;r diesen Zweck verwendet und nicht gespeichert.<br>
<br>
</div>

<label for="sendername">Ihr Name* </label><br>



<input name="sendername" type="text" id="sendername" size="40"><br>


<label for="senderemail">Ihre E-Mail* </label>
<br>


<input name="senderemail" type="text" id="senderemail" size="40"><br>


<label for="recipientname">Emp&auml;ngername*</label><br>


<input name="recipientname" type="text" id="recipientname" size="40"><br>


<label for="recipientemail">E-Mail des Empf&auml;ngers*</label>
<br>


<input name="recipientemail" type="text" id="recipientemail" size="40"><br>


<label for="anmerkungen">Ihre Nachricht </label>
an den Empf&auml;nger <br>


<textarea name="anmerkungen" cols="40" rows="3" id="anmerkungen"></textarea><br>



<p><br>
<br>
</p>
<p>



<p>Um Spam zu verhindern trage das Ergebnis rechts ein. Danke. </p>






<table>
<tr>
<td><img src="rechen-captcha.php"></td>
<td><input type="text" name="sicherheitscode" size="4"></td>
</tr>
</table>
<br>
<br>
</p>
<p><br>
<br>
</p>
<p>
* = erforderliche Angaben
<br>
<input name="Abschicken" type="submit" value="Senden"> <input type="hidden" name="filled" value="1">
<input type="hidden" name="id" value="<? echo $id; ?>">
<div align="right"><a href="http://www.artmedic.de" target="_blank" class="artmedic_link">powered
by artmedic webdesign</a>

</div>
</form>
</div>
<?
}
else
{
$id = $_POST[id];
$sendername = $_POST[sendername];
$senderemail = $_POST[senderemail];
$recipientname = $_POST[recipientname];
$recipientemail = $_POST[recipientemail];
$anmerkungen = $_POST[anmerkungen];
//Dateneingabe überprüfen, check incoming form-variables
if (empty ($sendername)) {
die ("Fehler: Sie müssen Ihren Namen eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($senderemail)) {
die ("Fehler: Sie müssen Ihre Emailadresse eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($recipientname)) {
die ("Fehler: Sie müssen einen Empfängernamen eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($recipientemail)) {
die ("Fehler: Sie müssen eine Empfängeremailadresse eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $senderemail)) {
die("Fehler: Geben Sie bitte eine gültige Emailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $recipientemail)) {
die("Fehler: Geben Sie bitte eine gültige Empfänger-Emailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $recipientemail)) {
die("Fehler: Geben Sie bitte eine gültige Empfänger-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $recipientemail)){
die("Fehler: Geben Sie bitte eine gültige Empfänger-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $senderemail)) {
die("Fehler: Geben Sie bitte eine gültige Absender-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $senderemail)){
die("Fehler: Geben Sie bitte eine gültige Absender-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $sendername)) {
die("Fehler: Geben Sie bitte einen gültigen Absendernamen ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $sendername)){
die("Fehler: Geben Sie bitte einen gültigen Absendernamen ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}

$remote = getenv("REMOTE_ADDR");
//Ablaufzeit in Sekunden
$ablaufzeit = "$time" - "$sperrzeit";
//Abgelaufene IP-Adressen entfernen
$test = @file($iplog);
while (list ($line_num, $line) = @each ($test))
{$s = explode("&&",$line);
if($s[0] <= $ablaufzeit)
{
$fz = fopen( "$iplog", "r+" );
$c = fread($fz, filesize($iplog));
fclose($fz);
$line=quotemeta($line);
$string = "";
$c = ereg_replace($line, $string, $c);
$c1=fopen($iplog, "w+");
@flock($c1,2);
fputs($c1, $c);
@flock($c1,3);
fclose($c1);
}}
//IP-Prüfung
$ippruefung = @file($iplog);
while (list ($line_num, $line) = @each ($ippruefung))
{$ips = explode("&&",$line);
//IP-Adresse finden
if($ips[1] == $remote)
{
$ipf = "1";
//Prüfen, wieviel Empfehlungen bereits versendet wurden
if($ips[2] < $limit)
{
$z = $ips[2];
$z ++;
$fp = fopen($iplog, "r" );
$contents = fread($fp, filesize($iplog));
fclose($fp);
$string = "$ips[0]&&$ips[1]&&$z&&";
$replace = ereg_replace($line, $string, $contents);
$fh=fopen($iplog, "w");
@flock($fh,2);
fputs($fh, $replace);
@flock($fh,3);
fclose($fh);
}
if($ips[2] >= $limit)
{$gesperrt = "1";}
}
}
if($ipf != 1)
{
$string2 = "$time&&$remote&&1&&\n";
$fi=fopen($iplog, "a");
@flock($fi,2);
fputs($fi, $string2);
@flock($fi,3);
fclose($fi);
}
//URL der Seite zusammenstellen
if($gesperrt != "1")
{
$sendurl = "$url$id";
if ($anmerkungen == "")
{$anmerkungen = "Keine";}

function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "41hgkd632");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam']){
unset($_SESSION['rechen_captcha_spam']);

//Nachricht versenden
$subject = "Seitenempfehlung von $sendername";
$mailtext = "
Sehr geehrte/r Frau/Herr $recipientname,
$sendername ($senderemail) empfiehlt Ihnen den Besuch
folgender Webseite:
------------------------------------------------------
$sendurl
------------------------------------------------------
Anmerkungen dazu von $sendername:
$anmerkungen
";
mail($recipientemail,$subject,$mailtext,"From: $sendername <$senderemail>");
echo "Vielen Dank $sendername,
Ihre Empfehlung wurde an $recipientname ($recipientemail) gesendet.
Bitte schließen Sie dieses Fenster, um zur Ausgangsseite zurückzukehren.
<a href=\"http://www.artmedic.de\">script by artmedic</a>
";
}
else
{
echo 'Der eingetragene Code ist falsch';
}
}
if($gesperrt == "1")
{echo "Aufgrund von Spamschutzeinstellungen können Sie leider nur $limit Empfehlungen versenden.";}
}

?>
</body>
</html>



und die rechen-captcha.php

<?php
unset($_SESSION['rechen_captcha_spam']);
$zahl1 = rand(10,20); //Erste Zahl 10-20
$zahl2 = rand(1,10); //Zweite Zahl 1-10
$operator = rand(1,2); // + oder -

if($operator == "1"){
$operatorzeichen = " + ";
$ergebnis = $zahl1 + $zahl2;
}else{
$operatorzeichen = " - ";
$ergebnis = $zahl1 - $zahl2;
}

$_SESSION['rechen_captcha_spam'] = encrypt($ergebnis, "41hgkd632"); //Key
$_SESSION['rechen_captcha_spam'] = str_replace("=", "", $_SESSION['rechen_captcha_spam']);

$rechnung = $zahl1.$operatorzeichen.$zahl2." = ?";
$img = imagecreatetruecolor(80,15);
$schriftfarbe = imagecolorallocate($img,13,28,91);
$hintergrund = imagecolorallocate($img,162,162,162);
imagefill($img,0,0,$hintergrund);
imagestring($img, 3, 2, 0, $rechnung, $schriftfarbe);
header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
?>


das Bild wie oben (also nur das Kästchen) ist leider geblieben!

Hab ich da jetzt doch noch einen Dreher drinne???

wünsche noch einen schönen Abend.



Ralf
Ralf
 
Beiträge: 8
Registriert: 18.01.2007, 11:42

Beitragvon Ralf » 20.01.2007, 16:43

ich stelle den von mir geänderten Code hier nocheinmal ein; es wird mir jetzt die einfache Rechenaufgabe gestellt, das Eingabefenster ist da, die Mail kann aber verschickt werden, ohne das die Aufgabe gelöst wird.

@Sebi
ich habe die von dir angegebene Änderung gemacht, hatte allerdings den gleichen Erfolg.

Ich bin mir jetzt auch nicht mehr ganz sicher, ob das ganze eine Rechen,- oder ein Zahlencaptcha ist, also habe ich alle Dateien (das Hintergrundbild, die Schrift; das rechen-captcha, das captcha > alles alles hochgeladen).

wie gesagt, aussehen tuts mittlerweile gut, nur klappen tuts nicht... Wer kann helfen...


<?php
session_start();
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "29jfkd921");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam']){
unset($_SESSION['rechen_captcha_spam']);
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>artmedic tell a friend</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="copyright" content="Ellen Baitinger, artmedic webdesign, http://www.artmedic.de">
<!--
#############################################################################
# artmedic Tell-a-Friend Version 2.0
# Copyright (c) 2004 Ellen Baitinger, artmedic webdesign
# http://www.artmedic.de (kontakt@artmedic.de)
#
#Sie können dieses Script kostenlos einsetzen, solange Sie die Links auf artmedic webdesign
#und diese Hinweise intakt lassen. Für evl. auftretende Schäden, die durch die
#Verwendung dieses Scripts entstehen, kann artmedic webdesign nicht
#haftbar gemacht werden. Die Benutzung erfolgt auf eigene Gefahr des Anwenders.
#############################################################################
-->
<?
//edit these variables, diese zwei Variablen ändern
//Homepage-URL, Basisverzeichnis der Homepage mit Backslash am Ende
//homepage-URL with backslash at end
$url = "http://YourSite.com/";
//Limit: Anzahl von möglichen Empfehlungen innerhalb von $sperrzeit
//Count of possible recommendation within $sperrzeit
$limit = "10";
//Sperrzeit, falls mehr als $limit Empfehlungen abgegeben wurden von der gleichen IP-Adresse in Sekunden
//timelimit, if more than $limit mails have been sent by same IP-address in seconds
$sperrzeit = "3600"; // 1h
//Textdatei für die Daten, bitte aus Datenschutzgründen umbenennen
//textfile for saving all data, please rename for security reasons
$iplog = "tellafriend.txt";

//ab hier keinen PHP-Code ändern, wenn Sie nicht genau wissen, was Sie tun
//Do not change PHP-Code past here
$time = time();
$id = $_GET[id];
$filled = $_POST[filled];
?>
<style type="text/css">
<!--
.artmedic_box {
padding: 4px;
width: 400px;
border: 1px solid #000000;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #000000;
}
.artmedic_link {
font-size: 10px;
font-weight: normal;
color: #000000;
text-decoration: underline;
}
.artmedic_titel {
font-weight: bold;
padding: 2px;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #999999;
}
.artmedic_text {
font-weight: normal;
padding: 2px;
}
-->
</style>
</head>

<body>
<?
if($filled == "")
{
?>
<div class="artmedic_box">
<div class="artmedic_titel">Diese Seite weiterempfehlen</div>
<form name="form1" method="post" action="tellafriend.php">
<div>F&uuml;llen Sie dazu bitte folgendes Formular aus. Ihre
Eingaben werden nur f&uuml;r diesen Zweck verwendet und nicht gespeichert.<br>
<br>
</div>

<label for="sendername">Ihr Name* </label><br>



<input name="sendername" type="text" id="sendername" size="40"><br>


<label for="senderemail">Ihre E-Mail* </label>
<br>


<input name="senderemail" type="text" id="senderemail" size="40"><br>


<label for="recipientname">Emp&auml;ngername*</label><br>


<input name="recipientname" type="text" id="recipientname" size="40"><br>


<label for="recipientemail">E-Mail des Empf&auml;ngers*</label>
<br>


<input name="recipientemail" type="text" id="recipientemail" size="40"><br>


<label for="anmerkungen">Ihre Nachricht </label>
an den Empf&auml;nger <br>


<textarea name="anmerkungen" cols="40" rows="3" id="anmerkungen"></textarea><br>


<tr>
<td><img src="rechen-captcha.php"></td>
<td><input type="text" name="sicherheitscode" size="4"></td>
</tr>



* = erforderliche Angaben
<br>
<input name="Abschicken" type="submit" value="Senden"> <input type="hidden" name="filled" value="1">
<input type="hidden" name="id" value="<? echo $id; ?>">
<div align="right"><a href="http://www.artmedic.de" target="_blank" class="artmedic_link">powered
by artmedic webdesign</a>

</div>
</form>
</div>
<?
}
else
{
$id = $_POST[id];
$sendername = $_POST[sendername];
$senderemail = $_POST[senderemail];
$recipientname = $_POST[recipientname];
$recipientemail = $_POST[recipientemail];
$anmerkungen = $_POST[anmerkungen];
//Dateneingabe überprüfen, check incoming form-variables
if (empty ($sendername)) {
die ("Fehler: Sie müssen Ihren Namen eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($senderemail)) {
die ("Fehler: Sie müssen Ihre Emailadresse eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($recipientname)) {
die ("Fehler: Sie müssen einen Empfängernamen eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($recipientemail)) {
die ("Fehler: Sie müssen eine Empfängeremailadresse eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $senderemail)) {
die("Fehler: Geben Sie bitte eine gültige Emailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $recipientemail)) {
die("Fehler: Geben Sie bitte eine gültige Empfänger-Emailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}

$remote = getenv("REMOTE_ADDR");
//Ablaufzeit in Sekunden
$ablaufzeit = "$time" - "$sperrzeit";
//Abgelaufene IP-Adressen entfernen
$test = @file($iplog);
while (list ($line_num, $line) = @each ($test))
{$s = explode("&&",$line);
if($s[0] <= $ablaufzeit)
{
$fz = fopen( "$iplog", "r+" );
$c = fread($fz, filesize($iplog));
fclose($fz);
$line=quotemeta($line);
$string = "";
$c = ereg_replace($line, $string, $c);
$c1=fopen($iplog, "w+");
@flock($c1,2);
fputs($c1, $c);
@flock($c1,3);
fclose($c1);
}}
//IP-Prüfung
$ippruefung = @file($iplog);
while (list ($line_num, $line) = @each ($ippruefung))
{$ips = explode("&&",$line);
//IP-Adresse finden
if($ips[1] == $remote)
{
$ipf = "1";
//Prüfen, wieviel Empfehlungen bereits versendet wurden
if($ips[2] < $limit)
{
$z = $ips[2];
$z ++;
$fp = fopen($iplog, "r" );
$contents = fread($fp, filesize($iplog));
fclose($fp);
$string = "$ips[0]&&$ips[1]&&$z&&";
$replace = ereg_replace($line, $string, $contents);
$fh=fopen($iplog, "w");
@flock($fh,2);
fputs($fh, $replace);
@flock($fh,3);
fclose($fh);
}
if($ips[2] >= $limit)
{$gesperrt = "1";}
}
}
if($ipf != 1)
{
$string2 = "$time&&$remote&&1&&\n";
$fi=fopen($iplog, "a");
@flock($fi,2);
fputs($fi, $string2);
@flock($fi,3);
fclose($fi);
}
//URL der Seite zusammenstellen
if($gesperrt != "1")
{
$sendurl = "$url$id";
if ($anmerkungen == "")
{$anmerkungen = "Keine";}

//Nachricht versenden
$subject = "Seitenempfehlung von $sendername";
$mailtext = "
Sehr geehrte/r Frau/Herr $recipientname,
$sendername ($senderemail) empfiehlt Ihnen den Besuch
folgender Webseite:
------------------------------------------------------
$sendurl
------------------------------------------------------
Anmerkungen dazu von $sendername:
$anmerkungen
";
mail($recipientemail,$subject,$mailtext,"From: $sendername <$senderemail>");
echo "Vielen Dank $sendername,
Ihre Empfehlung wurde an $recipientname ($recipientemail) gesendet.
Bitte schließen Sie dieses Fenster, um zur Ausgangsseite zurückzukehren.
<a href=\"http://www.artmedic.de\">script by artmedic</a>
";
}
if($gesperrt == "1")
{echo "Aufgrund von Spamschutzeinstellungen können Sie leider nur $limit Empfehlungen versenden.";}
}

}
?>

</body>
</html>


Gruß Ralf
Ralf
 
Beiträge: 8
Registriert: 18.01.2007, 11:42

Beitragvon Sebi » 20.01.2007, 19:41

sorry ich bekomme es auch net hin, habs jetzt grad ewig versucht und ich find den blöden fehler nicht :(

aber die grafik bekomme ich jetzt endlich angezeigt. dazu muss die rechen-captcha.php so aussehen:

Code: Alles auswählen
<?php
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}

unset($_SESSION['rechen_captcha_spam']);
$zahl1 = rand(10,20); //Erste Zahl 10-20
$zahl2 = rand(1,10); //Zweite Zahl 1-10
$operator = rand(1,2); // + oder -

if($operator == "1"){
$operatorzeichen = " + ";
$ergebnis = $zahl1 + $zahl2;
}else{
$operatorzeichen = " - ";
$ergebnis = $zahl1 - $zahl2;
}

$_SESSION['rechen_captcha_spam'] = encrypt($ergebnis, "41hgkd632"); //Key
$_SESSION['rechen_captcha_spam'] = str_replace("=", "", $_SESSION['rechen_captcha_spam']);

$rechnung = $zahl1.$operatorzeichen.$zahl2." = ?";
$img = imagecreatetruecolor(80,15);
$schriftfarbe = imagecolorallocate($img,13,28,91);
$hintergrund = imagecolorallocate($img,162,162,162);
imagefill($img,0,0,$hintergrund);
imagestring($img, 3, 2, 0, $rechnung, $schriftfarbe);
header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
?>
Sebi
 
Beiträge: 44
Registriert: 26.12.2006, 12:05

Beitragvon Ralf » 20.01.2007, 20:05

Hallo Sebi, habe zwischenzeitlich auch ein wenig gebastelt:

<?php
session_start();
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>artmedic tell a friend</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="copyright" content="Ellen Baitinger, artmedic webdesign, http://www.artmedic.de">
<!--
#############################################################################
# artmedic Tell-a-Friend Version 2.0
# Copyright (c) 2004 Ellen Baitinger, artmedic webdesign
# http://www.artmedic.de (kontakt@artmedic.de)
#
#Sie können dieses Script kostenlos einsetzen, solange Sie die Links auf artmedic webdesign
#und diese Hinweise intakt lassen. Für evl. auftretende Schäden, die durch die
#Verwendung dieses Scripts entstehen, kann artmedic webdesign nicht
#haftbar gemacht werden. Die Benutzung erfolgt auf eigene Gefahr des Anwenders.
#############################################################################
-->
<?
//edit these variables, diese zwei Variablen ändern
//Homepage-URL, Basisverzeichnis der Homepage mit Backslash am Ende
//homepage-URL with backslash at end
$url = "http://deine homepage/";
//Limit: Anzahl von möglichen Empfehlungen innerhalb von $sperrzeit
//Count of possible recommendation within $sperrzeit
$limit = "10";
//Sperrzeit, falls mehr als $limit Empfehlungen abgegeben wurden von der gleichen IP-Adresse in Sekunden
//timelimit, if more than $limit mails have been sent by same IP-address in seconds
$sperrzeit = "3600"; // 1h
//Textdatei für die Daten, bitte aus Datenschutzgründen umbenennen
//textfile for saving all data, please rename for security reasons
$iplog = "tellafriend.txt";

//ab hier keinen PHP-Code ändern, wenn Sie nicht genau wissen, was Sie tun
//Do not change PHP-Code past here
$time = time();
$id = $_GET[id];
$filled = $_POST[filled];
?>
<style type="text/css">
<!--
.artmedic_box {
padding: 4px;
width: 400px;
border: 1px solid #000000;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #000000;
}
.artmedic_link {
font-size: 10px;
font-weight: normal;
color: #000000;
text-decoration: underline;
}
.artmedic_titel {
font-weight: bold;
padding: 2px;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #999999;
}
.artmedic_text {
font-weight: normal;
padding: 2px;
}
-->
</style>
</head>

<body>
<?
if($filled == "")
{
?>
<div class="artmedic_box">
<div class="artmedic_titel">Diese Seite weiterempfehlen</div>
<form name="form1" method="post" action="tellafriend.php">
<div>F&uuml;llen Sie dazu bitte folgendes Formular aus. Ihre
Eingaben werden nur f&uuml;r diesen Zweck verwendet und nicht gespeichert.<br>
<br>
</div>

<label for="sendername">Ihr Name* </label><br>



<input name="sendername" type="text" id="sendername" size="40"><br>


<label for="senderemail">Ihre E-Mail* </label>
<br>


<input name="senderemail" type="text" id="senderemail" size="40"><br>


<label for="recipientname">Emp&auml;ngername*</label><br>


<input name="recipientname" type="text" id="recipientname" size="40"><br>


<label for="recipientemail">E-Mail des Empf&auml;ngers*</label>
<br>


<input name="recipientemail" type="text" id="recipientemail" size="40"><br>


<label for="anmerkungen">Ihre Nachricht </label>
an den Empf&auml;nger <br>


<textarea name="anmerkungen" cols="40" rows="3" id="anmerkungen"></textarea><br>



<p><br>
<br>
</p>
<p>



<p>Um Spam zu verhindern trage das Ergebnis rechts ein. Danke. </p>






<table>
<tr>
<td><img src="rechen-captcha.php"></td>
<td><input type="text" name="sicherheitscode" size="4"></td>
</tr>
</table>
<br>
<br>
</p>
<p><br>
<br>
</p>
<p>
* = erforderliche Angaben
<br>
<input name="Abschicken" type="submit" value="Senden"> <input type="hidden" name="filled" value="1">
<input type="hidden" name="id" value="<? echo $id; ?>">
<div align="right"><a href="http://www.artmedic.de" target="_blank" class="artmedic_link">powered
by artmedic webdesign</a>

</div>
</form>
</div>
<?
}
else
{
$id = $_POST[id];
$sendername = $_POST[sendername];
$senderemail = $_POST[senderemail];
$recipientname = $_POST[recipientname];
$recipientemail = $_POST[recipientemail];
$anmerkungen = $_POST[anmerkungen];
//Dateneingabe überprüfen, check incoming form-variables
if (empty ($sendername)) {
die ("Fehler: Sie müssen Ihren Namen eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($senderemail)) {
die ("Fehler: Sie müssen Ihre Emailadresse eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($recipientname)) {
die ("Fehler: Sie müssen einen Empfängernamen eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if (empty ($recipientemail)) {
die ("Fehler: Sie müssen eine Empfängeremailadresse eingeben.<a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $senderemail)) {
die("Fehler: Geben Sie bitte eine gültige Emailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $recipientemail)) {
die("Fehler: Geben Sie bitte eine gültige Empfänger-Emailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $recipientemail)) {
die("Fehler: Geben Sie bitte eine gültige Empfänger-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $recipientemail)){
die("Fehler: Geben Sie bitte eine gültige Empfänger-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $senderemail)) {
die("Fehler: Geben Sie bitte eine gültige Absender-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $senderemail)){
die("Fehler: Geben Sie bitte eine gültige Absender-E-Mailadresse ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\n", $sendername)) {
die("Fehler: Geben Sie bitte einen gültigen Absendernamen ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}
if(eregi("\r", $sendername)){
die("Fehler: Geben Sie bitte einen gültigen Absendernamen ein. <a href=\"javascript:history.go(-1);\">&laquo;&laquo; Zurück</A>");}

$remote = getenv("REMOTE_ADDR");
//Ablaufzeit in Sekunden
$ablaufzeit = "$time" - "$sperrzeit";
//Abgelaufene IP-Adressen entfernen
$test = @file($iplog);
while (list ($line_num, $line) = @each ($test))
{$s = explode("&&",$line);
if($s[0] <= $ablaufzeit)
{
$fz = fopen( "$iplog", "r+" );
$c = fread($fz, filesize($iplog));
fclose($fz);
$line=quotemeta($line);
$string = "";
$c = ereg_replace($line, $string, $c);
$c1=fopen($iplog, "w+");
@flock($c1,2);
fputs($c1, $c);
@flock($c1,3);
fclose($c1);
}}
//IP-Prüfung
$ippruefung = @file($iplog);
while (list ($line_num, $line) = @each ($ippruefung))
{$ips = explode("&&",$line);
//IP-Adresse finden
if($ips[1] == $remote)
{
$ipf = "1";
//Prüfen, wieviel Empfehlungen bereits versendet wurden
if($ips[2] < $limit)
{
$z = $ips[2];
$z ++;
$fp = fopen($iplog, "r" );
$contents = fread($fp, filesize($iplog));
fclose($fp);
$string = "$ips[0]&&$ips[1]&&$z&&";
$replace = ereg_replace($line, $string, $contents);
$fh=fopen($iplog, "w");
@flock($fh,2);
fputs($fh, $replace);
@flock($fh,3);
fclose($fh);
}
if($ips[2] >= $limit)
{$gesperrt = "1";}
}
}
if($ipf != 1)
{
$string2 = "$time&&$remote&&1&&\n";
$fi=fopen($iplog, "a");
@flock($fi,2);
fputs($fi, $string2);
@flock($fi,3);
fclose($fi);
}
//URL der Seite zusammenstellen
if($gesperrt != "1")
{
$sendurl = "$url$id";
if ($anmerkungen == "")
{$anmerkungen = "Keine";}

function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "41hgkd632");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam']){
unset($_SESSION['rechen_captcha_spam']);

//Nachricht versenden
$subject = "Seitenempfehlung von $sendername";
$mailtext = "
Sehr geehrte/r Frau/Herr $recipientname,
$sendername ($senderemail) empfiehlt Ihnen den Besuch
folgender Webseite:
------------------------------------------------------
$sendurl
------------------------------------------------------
Anmerkungen dazu von $sendername:
$anmerkungen
";
mail($recipientemail,$subject,$mailtext,"From: $sendername <$senderemail>");
echo "Vielen Dank $sendername,
Ihre Empfehlung wurde an $recipientname ($recipientemail) gesendet.
Bitte schließen Sie dieses Fenster, um zur Ausgangsseite zurückzukehren.
<a href=\"http://www.artmedic.de\">script by artmedic</a>
";
}
else
{
echo 'Der eingetragene Code ist falsch';
}
}
if($gesperrt == "1")
{echo "Aufgrund von Spamschutzeinstellungen können Sie leider nur $limit Empfehlungen versenden.";}
}

?>
</body>
</html>

jetzt wird zumindest die Mail nicht mehr verschickt; leider sagt das Ding immer wieder das die Rechnung falsch ist....

:(



Ralf


den rechen-captcha.php hab ich ebenfalls geändert
Ralf
 
Beiträge: 8
Registriert: 18.01.2007, 11:42

Beitragvon Sebi » 21.01.2007, 20:16

habs hinbekommen :-)

also die rechen-captcha.php:
Code: Alles auswählen
<?php
session_start();

function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}

unset($_SESSION['rechen_captcha_spam']);
$zahl1 = rand(10,20); //Erste Zahl 10-20
$zahl2 = rand(1,10); //Zweite Zahl 1-10
$operator = rand(1,2); // + oder -

if($operator == "1"){
$operatorzeichen = " + ";
$ergebnis = $zahl1 + $zahl2;
}else{
$operatorzeichen = " - ";
$ergebnis = $zahl1 - $zahl2;
}

$_SESSION['rechen_captcha_spam'] = encrypt($ergebnis, "41hgkd632"); //Key
$_SESSION['rechen_captcha_spam'] = str_replace("=", "", $_SESSION['rechen_captcha_spam']);

$rechnung = $zahl1.$operatorzeichen.$zahl2." = ?";
$img = imagecreatetruecolor(80,15);
$schriftfarbe = imagecolorallocate($img,13,28,91);
$hintergrund = imagecolorallocate($img,162,162,162);
imagefill($img,0,0,$hintergrund);
imagestring($img, 3, 2, 0, $rechnung, $schriftfarbe);
header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
?>


GANZ wichtig
aus der tellafriend.php ganz oben folgendes entfernen:
Code: Alles auswählen
<?php
session_start();
?>
Bild
Sebi
 
Beiträge: 44
Registriert: 26.12.2006, 12:05

Beitragvon Ralf » 22.01.2007, 06:12

:cry:

Moin Sebi

also irgendwie...


ich habe jetzt deine letzte rechen-captcha bei mir eingefügt. Die tellafriend-Variante habe ich mit bisher allen o.a. Versuchen gestartet.

Ergebnis: Mail wird ohne Lösung der Rechenaufgabe verschickt.
Wenn ich ein Ergebnis eintrage, bekomme ich jedes Mal die Antwort: Der eingetragene Code ist falsch.

Mit welcher Konstellation hast Du es denn hinbekommen???



Gruß Ralf
Ralf
 
Beiträge: 8
Registriert: 18.01.2007, 11:42

Beitragvon Sebi » 22.01.2007, 16:09

okay sorry hab mich geirrt füge wieder in die tellafriend.php ganz oben ein:

<?php
session_start();
?>

und es geht :) war gestern leicht übermüdet :D
Bild
Sebi
 
Beiträge: 44
Registriert: 26.12.2006, 12:05

Hut ab Sebi

Beitragvon Ralf » 22.01.2007, 18:38

:D

Ende gut - alles gut.

Vielen, vielen Dank.


Ralf



gibts eigentlich eine Möglichkeit den geschriebenen Inhalt zu behalten, wenn man ein falsches Rechenergebnis eingegeben hat.
Ist nur ne Frage - nicht lebenswichtig....
Ralf
 
Beiträge: 8
Registriert: 18.01.2007, 11:42

Beitragvon Sebi » 22.01.2007, 18:41

nichts zu danken :-)

das hab ich auch versucht, aber ich bin zu der Lösung gekommen dass es irgendwie nicht will.... außer du versuchst es vl mal mit einer IF schleife und sagst falls es POST Variablen gibt, dann soll er in die Formularfelder die enstprechenden POST Values einsetzen... das hab ich jetzt noch nicht versucht.
Bild
Sebi
 
Beiträge: 44
Registriert: 26.12.2006, 12:05


Zurück zu Zahlen Captcha

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron