Probleme beim Einbauen im Script

Hier werden Probleme rund um das Rechen Captcha behandelt

Moderator: frameguard

Probleme beim Einbauen im Script

Beitragvon Darkon » 19.03.2007, 21:04

Guten Tag,
Also erstmal prima Service den ihr hier anbietet! Habe schon lange ein Tutorial eines Chaptcha gesucht und letztendlich hier gelandet :)

Ich habe folgendes Problem:
Mein Skript besteht aus mehreren Teilen in einer Datei (gbposten.php):
Code: Alles auswählen
<?php
include("gbconfig.php");
$rest = 0;

function foot()
{
$str = "";
return $str;
}

function record($REMOTE_ADDR)
{
include("gbconfig.php");
$ip = $REMOTE_ADDR;
$gesperrt = time() + ( 60 * $schutz );
$fp=fopen("database/ip.txt", "a+");
fputs ($fp,$ip."][".$gesperrt."\n");
fclose($fp);
}

function check($REMOTE_ADDR)
{
global $rest;
include("gbconfig.php");
$ip = $REMOTE_ADDR;
$trenner = "][";
$now = time();
$line = file("database/ip.txt");
$aline = count($line);
for($i=0;$i<$aline;$i++)
{
$entry = explode($trenner,$line[$i]);
if($entry[0]=="$ip")
{
if($now<$entry[1])
{
$rest = round(($entry[1] - $now) / 60);
return TRUE;                               // gesperrt
break;

else { return FALSE; }                     // nicht gesperrt
}
}
}

?>


<link rel=stylesheet type="text/css" href="../<?php echo "$css"; ?>">
</head>
<body bgcolor="<?php echo "$bgcolor"; ?>">
<div align="center">
<p>&nbsp;</p>
<?php if(($action=="") and (!check($REMOTE_ADDR))) { ?>

<form action="gbposten.php?action=gbposten" method="post" name="gbposten">

<?php

$datei = "templates/posten.html";
$fp = fopen ($datei, "r");
$gbposten = fread ($fp, filesize ($datei));
fclose ($fp);

$gbposten = str_replace('%%nick%%','<input type="text" name="post[nick]" maxlength="11" size="30"/>',$gbposten);
$gbposten = str_replace('%%email%%','<input type="text" name="post[email]" size="30"/>',$gbposten);
$gbposten = str_replace('%%icq%%','<input type="text" name="post[icq]" size="30"/>',$gbposten);
$gbposten = str_replace('%%hp%%','<input type="text" name="post[hp]" size="30" value="http://"/>',$gbposten);
$gbposten = str_replace('%%beitrag%%','<textarea name="post[beitrag]" cols="30" maxlength="100" rows="7"></textarea>',$gbposten);
$gbposten = str_replace('%%abschicken%%','<input type="submit" value="Abschicken" /> <input type="reset" value="Reset" />',$gbposten);

if($html=="0") { $gbposten = str_replace('%%html%%','HTML ist an',$gbposten); }
else { $gbposten = str_replace('%%html%%','HTML ist aus',$gbposten); }

echo "$gbposten";

?>


</form>
<?php
echo foot();
}

elseif (check($REMOTE_ADDR))
{
echo "<font color=\"red\">Spammschutz: Du kannst in $rest Minuten einen Beitrag hinterlassen!</font>";
echo foot();
}

elseif ($action=="gbposten")
{

// Felder überprüfen
$error = 0;
if($post[nick]=="") {
echo "<font color=\"red\">Du hast das Feld <b>'Nick'</b> nicht korrekt ausgefüllt!</font><br>";$error=1; }
if($post[email]=="") {
echo "<font color=\"red\">Du hast das Feld <b>'Email'</b> nicht korrekt ausgefüllt!</font><br>";$error=1; }
elseif(preg_match("/^.+@.+\.(de|info|com|org|net)$/s",$post[email])) {  } else { echo "<font color=\"red\">Du hast das Feld <b>'Email'</b> nicht korrekt ausgefüllt!</font><br>";$error=1; }
if($post[hp]=="") { $post[hp] = "http://"; }
if($post[beitrag]=="") {
echo "<font color=\"red\">Du hast das Feld <b>'Text'</b> nicht korrekt ausgefüllt!</font><br>";$error=1; }
if($html=="0") {
if(preg_match("/^.<.>$/s",$post[beitrag])) { echo "<font color=\"red\"><b>HTML</b> ist nicht erlaubt!</font><br>";$error=1; }}

// Eintrag speichern
if($error==1)
{
echo "<br><br><a href=\"javascript:history.back()\">zurück</a>";
echo "<meta http-equiv=\"refresh\" content=\"3; URL=javascript:history.back()\">";
}
else
{

// Speichern

function save($datei, $eintragen)
{
$fp = fopen($datei, "w");
fwrite($fp, $eintragen);
fclose($fp);
}

function my_nl2br($text)
{
$retvalue="";
for ($ii=0; $ii < strlen($text); $ii++){
if ($text[$ii]!=chr(13))
$text[$ii]=="\n" ? $retvalue .= "<BR>" : $retvalue .= $text[$ii];
}
return $retvalue;
}

//Beitrag bearbeiten
$post[beitrag] = str_replace('\"','"',$post[beitrag]);
$post[beitrag] = my_nl2br($post[beitrag]);
// Smilies
$post[beitrag] = str_replace(':)','<img src="images/smilies/1.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':-)','<img src="images/smilies/1.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':(','<img src="images/smilies/2.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':-(','<img src="images/smilies/2.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':D','<img src="images/smilies/3.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':-D','<img src="images/smilies/3.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':|','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':-|','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace('x(','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace('x-(','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace('X(','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace('X-(','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(';)','<img src="images/smilies/5.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(';-)','<img src="images/smilies/5.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':P','<img src="images/smilies/6.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':-P','<img src="images/smilies/6.gif" border="0">',$post[beitrag]);



$dBeitraege = "database/beitraege.txt";
$line = file($dBeitraege);

$post[datum] = date(d);
$post[datum] .= ".";
$post[datum] .= date(m);
$post[datum] .= ".";
$post[datum] .= date(y);
$post[uhrzeit] = date(H);
$post[uhrzeit] .= ":";
$post[uhrzeit] .= date(i);

$line[0] = "$post[nick]|µ|$post[email]|µ|$post[icq]|µ|$post[datum]|µ|$post[uhrzeit]|µ|$post[hp]|µ|$post[beitrag]|µ||µ|\n".$line[0];

save("$dBeitraege",implode("",$line));
record($REMOTE_ADDR);


// Emails abschicken
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: ".$email."\r\n";

// Adminmail
if($adminmail=="1")
{
$text = "Folgender Eintrag wurde von $post[nick] <<a href=\"mailto:$post[email]\">$post[email]</a>> abgegeben:<br>
$post[beitrag]";

$betreff = "Neuer Eintrag in Ihrem Gästebuch";
mail($email, $betreff, $text, $headers);
}

if($usermail=="1")
{
$text = "Vielen Danke für deinen Eintrag in unserem Gästebuch!<br>
Wir würden uns freuen dich bald wieder auf unserer Homepage begrüßen zu dürfen!<br>mfg www.animanix.com";

$betreff = "Danke für deinen Eintrag!";
mail($post[email], $betreff, $text, $headers);
}

echo "
<body bgcolor=\"#636973\">

<A href=\"index.php?page=gbbook\"><img src=\"images/eintragend.jpg\" border=\"0\"></A></body>
";

}


}
?>


Nun weiß ich nicht wirklich wo ich das hier einbauen soll:
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);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "29jfkd921");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam']){
unset($_SESSION['rechen_captcha_spam']);

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

}
?>


Habs schon ein paar mal probiert, hat aber nicht wirklich funktioniert.
Ich hoffe ihr könnt mir weiterhelfen!

mfg Rene
Darkon
 
Beiträge: 4
Registriert: 19.03.2007, 20:59

Beitragvon Darkon » 28.03.2007, 13:47

Kann mir denn keiner helfen??
... wirklich schade.
Darkon
 
Beiträge: 4
Registriert: 19.03.2007, 20:59

Beitragvon frameguard » 29.03.2007, 18:16

Das kommt nach
// Felder überprüfen

Allerdings sollte das session_start(); ganz am Anfang des Scripts stehen.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon Darkon » 05.04.2007, 03:43

prima! Hat geklappt.
Eine letzte Frage noch.

Was muss ich machen, wenn eine Meldung kommen soll, dass der eingegebene Sicherheitscode falsch ist (falls er falsch eingegeben wird)

Ich habe schon im Forum nach beispielen gesucht und nur das hier gefunden:

Code: Alles auswählen
else
{
echo "Der eingetragene Sicherheitscode ist falsch";
}

Aber ich hab keinen schimmer wo das hinkommen sol :?:

Meine Datei:

Code: Alles auswählen
<html>
<head>
<title>Eintrag Posten</title>

<?php
session_start();
include("gbconfig.php");
$rest = 0;

function foot()
{
$str = "";
return $str;
}

function record($REMOTE_ADDR)
{
include("gbconfig.php");
$ip = $REMOTE_ADDR;
$gesperrt = time() + ( 60 * $schutz );
$fp=fopen("database/ip.txt", "a+");
fputs ($fp,$ip."][".$gesperrt."\n");
fclose($fp);
}

function check($REMOTE_ADDR)
{
global $rest;
include("gbconfig.php");
$ip = $REMOTE_ADDR;
$trenner = "][";
$now = time();
$line = file("database/ip.txt");
$aline = count($line);
for($i=0;$i<$aline;$i++)
{
$entry = explode($trenner,$line[$i]);
if($entry[0]=="$ip")
{
if($now<$entry[1])
{
$rest = round(($entry[1] - $now) / 60);
return TRUE;                               // gesperrt
break;

else { return FALSE; }                     // nicht gesperrt
}
}
}

?>


<link rel=stylesheet type="text/css" href="../<?php echo "$css"; ?>">
</head>
<body bgcolor="<?php echo "$bgcolor"; ?>">
<div align="center">
<p>&nbsp;</p>
<?php if(($action=="") and (!check($REMOTE_ADDR))) { ?>

<form action="gbposten.php?action=gbposten" method="post" name="gbposten">

<?php

$datei = "templates/posten.html";
$fp = fopen ($datei, "r");
$gbposten = fread ($fp, filesize ($datei));
fclose ($fp);

$gbposten = str_replace('%%nick%%','<input type="text" name="post[nick]" maxlength="11" size="30"/>',$gbposten);
$gbposten = str_replace('%%email%%','<input type="text" name="post[email]" size="30"/>',$gbposten);
$gbposten = str_replace('%%icq%%','<input type="text" name="post[icq]" size="30"/>',$gbposten);
$gbposten = str_replace('%%hp%%','<input type="text" name="post[hp]" size="30" value="http://"/>',$gbposten);
$gbposten = str_replace('%%beitrag%%','<textarea name="post[beitrag]" cols="30" maxlength="100"

rows="7"></textarea>',$gbposten);
$gbposten = str_replace('%%abschicken%%','<input type="submit" value="Abschicken" /> <input type="reset"

value="Reset" />',$gbposten);

if($html=="0") { $gbposten = str_replace('%%html%%','HTML ist an',$gbposten); }
else { $gbposten = str_replace('%%html%%','HTML ist aus',$gbposten); }

echo "$gbposten";

?>


</form>
<?php
echo foot();
}

elseif (check($REMOTE_ADDR))
{
echo "<font color=\"red\">Spammschutz: Du kannst in $rest Minuten einen Beitrag hinterlassen!</font>";
echo foot();
}

elseif ($action=="gbposten")
{

// Felder überprüfen

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']);


$error = 0;
if($post[nick]=="") {
echo "<font color=\"red\">Du hast das Feld <b>'Nick'</b> nicht korrekt ausgefüllt!</font><br>";$error=1; }
if($post[email]=="") {
echo "<font color=\"red\">Du hast das Feld <b>'Email'</b> nicht korrekt ausgefüllt!</font><br>";$error=1; }
elseif(preg_match("/^.+@.+\.(de|info|com|org|net)$/s",$post[email])) {  } else { echo "<font color=\"red\">Du hast

das Feld <b>'Email'</b> nicht korrekt ausgefüllt!</font><br>";$error=1; }
if($post[hp]=="") { $post[hp] = "http://"; }
if($post[beitrag]=="") {
echo "<font color=\"red\">Du hast das Feld <b>'Text'</b> nicht korrekt ausgefüllt!</font><br>";$error=1; }
if($html=="0") {
if(preg_match("/^.<.>$/s",$post[beitrag])) { echo "<font color=\"red\"><b>HTML</b> ist nicht

erlaubt!</font><br>";$error=1; }}

// Eintrag speichern
if($error==1)
{
echo "<br><br><a href=\"javascript:history.back()\">zurück</a>";
echo "<meta http-equiv=\"refresh\" content=\"3; URL=javascript:history.back()\">";
}

else
{

// Speichern

function save($datei, $eintragen)
{
$fp = fopen($datei, "w");
fwrite($fp, $eintragen);
fclose($fp);
}

function my_nl2br($text)
{
$retvalue="";
for ($ii=0; $ii < strlen($text); $ii++){
if ($text[$ii]!=chr(13))
$text[$ii]=="\n" ? $retvalue .= "<BR>" : $retvalue .= $text[$ii];
}
return $retvalue;
}

//Beitrag bearbeiten
$post[beitrag] = str_replace('\"','"',$post[beitrag]);
$post[beitrag] = my_nl2br($post[beitrag]);
// Smilies
$post[beitrag] = str_replace(':)','<img src="images/smilies/1.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':-)','<img src="images/smilies/1.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':(','<img src="images/smilies/2.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':-(','<img src="images/smilies/2.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':D','<img src="images/smilies/3.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':-D','<img src="images/smilies/3.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':|','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':-|','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace('x(','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace('x-(','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace('X(','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace('X-(','<img src="images/smilies/4.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(';)','<img src="images/smilies/5.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(';-)','<img src="images/smilies/5.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':P','<img src="images/smilies/6.gif" border="0">',$post[beitrag]);
$post[beitrag] = str_replace(':-P','<img src="images/smilies/6.gif" border="0">',$post[beitrag]);



$dBeitraege = "database/beitraege.txt";
$line = file($dBeitraege);

$post[datum] = date(d);
$post[datum] .= ".";
$post[datum] .= date(m);
$post[datum] .= ".";
$post[datum] .= date(y);
$post[uhrzeit] = date(H);
$post[uhrzeit] .= ":";
$post[uhrzeit] .= date(i);

$line[0] =

"$post[nick]|µ|$post[email]|µ|$post[icq]|µ|$post[datum]|µ|$post[uhrzeit]|µ|$post[hp]|µ|$post[beitrag]|µ||µ|\n".$line

[0];

save("$dBeitraege",implode("",$line));
record($REMOTE_ADDR);


// Emails abschicken
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: ".$email."\r\n";

// Adminmail
if($adminmail=="1")
{
$text = "Folgender Eintrag wurde von $post[nick] <<a href=\"mailto:$post[email]\">$post[email]</a>> abgegeben:<br>
$post[beitrag]";

$betreff = "Neuer Eintrag in Ihrem Gästebuch";
mail($email, $betreff, $text, $headers);
}

if($usermail=="1")
{
$text = "Vielen Danke für deinen Eintrag in unserem Gästebuch!<br>
Wir würden uns freuen dich bald wieder auf unserer Homepage begrüßen zu dürfen!<br>mfg www.animanix.com";

$betreff = "Danke für deinen Eintrag!";
mail($post[email], $betreff, $text, $headers);
}

echo "
<body bgcolor=\"#636973\">

<A href=\"index.php?page=gbbook\"><img src=\"images/eintragend.jpg\" border=\"0\"></A></body>
";

}

}

}
?>




</div>
</body>
</html>
Darkon
 
Beiträge: 4
Registriert: 19.03.2007, 20:59

Beitragvon frameguard » 05.04.2007, 13:21

Bei

if ($sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);

fügst an:

}
else {
echo "<font color=\"red\">Falscher Sicherheitscode!</font><br>";
$error=1;
}

sollte also so aussehen:
Code: Alles auswählen
if ($sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
}
else {
echo "<font color=\"red\">Falscher Sicherheitscode!</font><br>";
$error=1;
}


Wenn ich Deinen Script nämlich richtig verstanden habe, willst Du nicht abbrechen an der Stelle, sondern nur eine Variable $error mit 1 füllen, die dann weiter unten dazu führt, daß zur Eingabeseite zurückgewechselt wird.

Diese Vorgangsweise hat einen Nachteil: Wenn Javascript ausgeschaltet ist, wird der Script einfach fortgesetzt. Ich würde daher doch vorschlagen, bei

if($error==1)
{
echo "<br><br><a href=\"javascript:history.back()\">zurück</a>";
echo "<meta http-equiv=\"refresh\" content=\"3; URL=javascript:history.back()\">";
}

lieber noch ein die dranzuhängen, zB so:

if($error==1)
{
echo "<br><br><a href=\"javascript:history.back()\">zurück</a>";
echo "<meta http-equiv=\"refresh\" content=\"3; URL=javascript:history.back()\">";
die ("Es ist ein Fehler aufgetreten");
}

LG,
Frame
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon Darkon » 05.04.2007, 16:10

Vielen Dank, es hat alles wunderbar geklappt. Ich werde euch weiterempfehlen :)
Darkon
 
Beiträge: 4
Registriert: 19.03.2007, 20:59

Beitragvon frameguard » 05.04.2007, 16:17

Danke, da wird Rob sich sicher freuen. :)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien


Zurück zu Rechen Captcha

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron