Nach Absenden des Formulars nur weisse Seite

Hier werden Probleme rund um das Zahlen Captcha behandelt

Moderator: frameguard

Nach Absenden des Formulars nur weisse Seite

Beitragvon ABuhrdorf » 05.03.2007, 19:26

Hallo zusammen!

Ich habe das CAPTCHA Script in meine Seite eingebaut und funktioniert soweit ganz gut, wenn die Zahlen falsch sind, kommt eine alert Meldung, aber wenn die Zahlen korrekt eingegeben werden, wird danach nur eine weisse Seite angezeigt. Weiss jemand Hilfe?

Hier das Script:

<?

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"], "8h384ls94");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
} else {
echo "<script type=\"text/javascript\">alert('Der eingegebene Sicherheitscode ist nicht korrekt!');history.back();</script>";


include("header.php");
include "./include/config.inc.php";
include "./include/texte.php";

$html_array= file("templates/anmelden2.htm");
$html_code = implode($html_array,"");


$rubrikname="";
$codesenden=0;

$query2="SELECT * FROM $sitetable1 WHERE nummer='$rubrik'";
$result2=mysql_db_query($dbname,$query2,$conn) or die (mysql_error());
while($date=mysql_fetch_array($result2))
{
$rubrikname= $date[name];
$rubrik22= $date[rubrik];
$codesenden=2;
}


if($rubrik=="" or $codesenden=="0")
{
$html_array= file("templates/anmelden_fehler.htm");
$html_code = implode($html_array,"");

$php_code= array(
"={datum}=si",
"={session}=si",
"={coby}=si",
"={session_form}=si"
);


$php_text= array (
"$seitendatum",
"?$sidname=$sidsid",
"$coby",
"<input type=\"hidden\" value=\"$sidsid\" name=\"$sidname\">"
);

$html_text = preg_replace ($php_code, $php_text, $html_code);
echo("$html_text");

exit;
}

$anzeige="";
$codesenden="0";

if (!preg_match("=[[:alnum:]]+=si", $home_name))
{
$anzeige="$anzeige $anmeldung_0";
$codesenden= 3;
}
else
{
$home_namezahl= strlen("$home_name");
$home_name_code++;
if($home_namezahl>="$home_name_code")
{
$anzeige="$anzeige $anmeldung_9";
$codesenden= 3;
}
}

if($agb!="ja")
{
$anzeige="$anzeige $anmeldung_1";
$codesenden= 3;
}

if(!eregi("^([_[:alnum:]-]+)(\.[_[:alnum:]-]+)*@([[:alnum:]])([[:alnum:]\.-]+)([[:alnum:]])$",$mail))
{
$anzeige="$anzeige $anmeldung_2";
$codesenden= 3;
}

if($home_url=="")
{
$anzeige="$anzeige $anmeldung_3";
$codesenden= 3;
}
else
{
$home_urlzahl= strlen("$home_url");
$home_url_code++;
if($home_urlzahl>="$home_url_code")
{
$anzeige="$anzeige $anmeldung_8";
$codesenden= 3;
}
}

if($beschreibung=="")
{
$anzeige="$anzeige $anmeldung_4";
$codesenden= 3;
}
else
{
$beschreibungzahl= strlen("$beschreibung");
$beschreibung_code++;
if($beschreibungzahl>="$beschreibung_code")
{
$anzeige="$anzeige $anmeldung_7";
$codesenden= 3;
}
}

if($keywords=="")
{
$anzeige="$anzeige $anmeldung_5";
$codesenden= 3;
}
else
{
$keywordszahl= strlen("$keywords");
$keywords_code++;
if($keywordszahl>="$keywords_code")
{
$anzeige="$anzeige $anmeldung_6";
$codesenden= 3;
}
}


if($codesenden=="0")
{

$allow = "0123456789abcdefghijklmnopqrstufwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
srand((double)microtime()*1000000);
for($i=0; $i<10; $i++) {
$nummer .= $allow[rand()%strlen($allow)];
}

$filename = "zahl.txt";
$fd = fopen( $filename, "r" );
$contents = fread( $fd, filesize( $filename ) );
fclose( $fd );
$contents=$contents+1;
$fd = fopen( $filename, "w" );
fputs( $fd, "$contents");
fclose( $fd );

$nummer= "$nummer$contents";

$allow = "0123456789abcdefghijklmnopqrstufwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
srand((double)microtime()*1000000);
for($i=0; $i<10; $i++) {
$pass .= $allow[rand()%strlen($allow)];
}

$query="INSERT INTO $sitetable2(siteid,rubrik,unterrubrik,name,mail,url,beschreibung,keywords,code,userb,adminb,besucher,nummer,pass,bwert,bzahl)
VALUES ('','$rubrik22','$rubrik','$home_name','$mail','$home_url','$beschreibung','$keywords','0','1','0','0','$nummer','$pass','0','0')";
mysql_db_query($dbname,$query,$conn) or die(mysql_error());


$codemailadresse="include/anmeldenmailuser1.dat";
$mailtext= email($codemailadresse);
mail("$mail","$anmeldenmailuser1","$mailtext","From: $adminmail");



if($anmeldenmailadmincode=="ja")
{

$codemailadresse="include/anmeldenmailadmin.dat";
$mailtext= email($codemailadresse);
mail("$adminmail","$anmeldenmailadmin","$mailtext","From: $adminmail");

}

$query2="SELECT * FROM $sitetable3 WHERE mail LIKE '%$mail%'";
$result2=mysql_db_query($dbname,$query2,$conn) or die (mysql_error());
$i="0";
while($date=mysql_fetch_row($result2))
{
if($mail==$date[1])
{
$i=2;
}
}

if($i=="0")
{
$query="INSERT INTO $sitetable3(siteid,mail,code)
VALUES ('','$mail','0')";
mysql_db_query($dbname,$query,$conn) or die(mysql_error());
}

$anzeige= $anmeldung_10;
}

$php_code= array(
"={rubrik}=si",
"={anzeige}=si",
"={datum}=si",
"={session}=si",
"={coby}=si",
"={session_form}=si"
);


$php_text= array (
"$rubrikname",
"$anzeige",
"$seitendatum",
"?$sidname=$sidsid",
"$coby",
"<input type=\"hidden\" value=\"$sidsid\" name=\"$sidname\">"
);

$html_text = preg_replace ($php_code, $php_text, $html_code);
echo("$html_text");
include("footer.php");
}
?>


Gruß

Armin
ABuhrdorf
 
Beiträge: 8
Registriert: 05.03.2007, 19:23

Beitragvon frameguard » 05.03.2007, 19:32

Ich habe jetzt nicht den ganzen Script gelesen, weil es könnte daran liegen:

Code: Alles auswählen
include("header.php");
include "./include/config.inc.php";
include "./include/texte.php";


das gehört doch eigentlich:

Code: Alles auswählen
include("header.php");
include ("./include/config.inc.php");
include ("./include/texte.php");


Korrigier das und probier's dann noch einmal.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon ABuhrdorf » 05.03.2007, 19:35

frameguard hat geschrieben:Ich habe jetzt nicht den ganzen Script gelesen, weil es könnte daran liegen:

Code: Alles auswählen
include("header.php");
include "./include/config.inc.php";
include "./include/texte.php";


das gehört doch eigentlich:

Code: Alles auswählen
include("header.php");
include ("./include/config.inc.php");
include ("./include/texte.php");


Korrigier das und probier's dann noch einmal.


Bist Du dir da sicher, das es nur an den Klammern liegt? Das ganze Script lief ohne die CAPTCHA Abfrage einwandfrei.

Kann es es nicht doch an der Session liegen? Beim POST wird eine Session-ID übergeben.

Gruß

Armin
ABuhrdorf
 
Beiträge: 8
Registriert: 05.03.2007, 19:23

Beitragvon frameguard » 05.03.2007, 19:42

Also wenn Dein Script keine Comments od. dgl. vor session_start(); hat, kann's daran nicht liegen.

Außer, Du hast die Session schon im übergebenden Script gestartet - aber dann würdest Du wzar eine Fehlermeldung kriegen, aber das Script an sich würde funktionieren.

Aber ich habe gerade noch etwas entdeckt, was eine Fehlerquelle sein KÖNNTE:

echo "<script type=\"text/javascript\">alert('Der eingegebene Sicherheitscode ist nicht korrekt!');history.back();</script>";

probier's mal mit
echo ('<script type=\"text/javascript\">alert("Der eingegebene Sicherheitscode ist nicht korrekt!");history.back();</script>');

weil der echo-Befehl sonst bei =\"text/... abbricht (das " beendet den auch mit einem " eingeleiteten Befehl - während die Verwendung von ' dazu führt, daß " als Bestandteil des Strings interpretiert wird - besser kann ich's nicht erklären, sorry *g*).
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon ABuhrdorf » 05.03.2007, 19:49

Nein, am alert lag es nicht, der funktionierte ja vorher einwandfrei. Mit den Klammern dann auch nicht mehr.

Ich schätze, es liegt an der Session. Weiss aber sonst keinen Rat.

Gruß

Armin
ABuhrdorf
 
Beiträge: 8
Registriert: 05.03.2007, 19:23

Beitragvon frameguard » 05.03.2007, 19:56

OMG, ich bin blind wie ein Maulwurf...

nach ELSE hast die geschwungene Klammer {} nicht mehr zugemacht... *g* DAS dürfte des Pudels Kern sein...

Setz einmal nach
if($sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
} else {
echo "<script type=\"text/javascript\">alert('Der eingegebene Sicherheitscode ist nicht korrekt!');history.back();</script>";

ein } hin - sollte mich wundern, wenn's dann nicht funktioniert. *g* ;)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon ABuhrdorf » 05.03.2007, 19:59

Oh Wunder *g*


Parse error: parse error, unexpected '}' in C:\AppServ\www\wwwsuche\anmelden2.php on line 239
ABuhrdorf
 
Beiträge: 8
Registriert: 05.03.2007, 19:23

Beitragvon ABuhrdorf » 05.03.2007, 20:03

Naja, jetzt funktionierts, laut Anleitung sollte vor ?> auch noch eine Klammer gesetzt werden. Die habe ich nun mal weggemacht und mit deiner Klammer hinter der else Abfrage scheint es jetzt zu funktionieren. :-)

Gruß

Armin
ABuhrdorf
 
Beiträge: 8
Registriert: 05.03.2007, 19:23

Beitragvon frameguard » 05.03.2007, 20:07

Offenbar hattest Du den kompletten Script als ELSE-Bedingung gesetzt. Grundsätzlich möglich, aber in dem Fall soll ja das ELSE die weitere Verarbeitung des Scripts unterbrechen - was es ja dann prompt auch tat. ;)

Aber jetzt haben wir den Fehler ja gefunden. :)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon ABuhrdorf » 05.03.2007, 20:09

Jetzt habe ich noch das Problem, das er das weitere Script nicht stoppt. Was muss ich denn da noch einfügen, ein return true oder return false?


Gruß

Armin
ABuhrdorf
 
Beiträge: 8
Registriert: 05.03.2007, 19:23

Beitragvon frameguard » 05.03.2007, 20:18

Probier einmal folgendes:

statt
if($sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
} else {
echo "<script type=\"text/javascript\">alert('Der eingegebene Sicherheitscode ist nicht korrekt!');history.back();</script>";
}

if($sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
} else {
echo "<script type=\"text/javascript\">alert('Der eingegebene Sicherheitscode ist nicht korrekt!');history.back();</script>";
die();
}

Wobei mich irritiert (aber mit javascript bin ich nicht so gut), daß Dein Code ja eigentlich ein history.back(); bewirken sollte, also ein Zurückwechseln zum Eingabeformular.

Du könntest das also auch aufsplitten probieren:

echo "<script type=\"text/javascript\">alert('Der eingegebene Sicherheitscode ist nicht korrekt!');</script>";
echo "<javascript:history.back();>";
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon ABuhrdorf » 05.03.2007, 20:21

Das history.back() macht er auch, aber er arbeitet das Script dann weiter ab. Ich probier mal das die()
ABuhrdorf
 
Beiträge: 8
Registriert: 05.03.2007, 19:23

Beitragvon frameguard » 05.03.2007, 20:22

Aso macht er eh... seltsam.
Dann hilft vielleicht wirklich nur noch die();.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon ABuhrdorf » 05.03.2007, 20:24

Perfekt, das die() nimmt er !

Danke dir :-)
ABuhrdorf
 
Beiträge: 8
Registriert: 05.03.2007, 19:23

Beitragvon frameguard » 05.03.2007, 20:27

Gern geschehen! :)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien


Zurück zu Zahlen Captcha

Wer ist online?

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

cron