| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
frameguard
Anmeldedatum: 05.03.2007 Beiträge: 117 Wohnort: Wien
|
Verfasst am: 14.03.2007, 10:43 Titel: |
|
|
Ok, Mail 4 you.  |
|
| Nach oben |
|
 |
apophis171
Anmeldedatum: 02.04.2007 Beiträge: 16 Wohnort: Rathenow
|
Verfasst am: 10.04.2007, 19:19 Titel: |
|
|
der apo kommt mal wieder nicht klar mit der materie. ich poste mal die captcha datei und den anderen code. in der hoffnung ihr könnt mir helfen
Code:
<?php
session_start();
unset($_SESSION['captcha_spam']);
$text = rand(1000,10000); //Zufallszahl
function randomString($len) {
srand(date("s"));
$possible="ABCDEFGHIJKLMNPRSTUVWXYZabcdefghijklmnpqrstuvwxyz123456789";
$str="";
while(strlen($str)<$len) {
$str.=substr($possible,(rand()%(strlen($possible))),1);
}
return($str);
}
$text=randomString(4);
$randkey=randomString(12);
$keyfile="key.txt";
$handle= fopen($keyfile,"w");
fwrite($handle,$randkey);
fclose($handle);
}
return base64_encode($result);
}
$_SESSION['captcha_spam'] = encrypt($text, $randkey); // mit zufälligem Key
$_SESSION['captcha_spam'] = str_replace("=", "", $_SESSION['captcha_spam']);
header('Content-type: image/png');
$img = ImageCreateFromPNG('captcha.png'); //Backgroundimage
$color = ImageColorAllocate($img, 0, 0, 0); //Farbe
$ttf = $_SERVER['Document_Root']."arial.ttf"; //Schriftart
$ttfsize = 25; //Schriftgrösse
$angle = rand(0,5);
$t_x = rand(5,50);
$t_y = 35;
imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
imagepng($img);
imagedestroy($img);
?>
//und hier das andere script
// captcha anfang
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"], $randkey);
$keyfile="captcha/key.txt";
$handle=fopen($keyfile,"r");
$randkey = fread($handle, filesize ($keyfile));
fclose($handle);
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if($sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
// captcha ende
so, das wars... |
|
| Nach oben |
|
 |
frameguard
Anmeldedatum: 05.03.2007 Beiträge: 117 Wohnort: Wien
|
Verfasst am: 10.04.2007, 21:16 Titel: |
|
|
Also ich seh darin eigentlich keinen Fehler, bis auf:
}
return base64_encode($result);
}
nach fclose($handle);
Da wird vorher nirgends eine {-Klammer aufgemacht, die noch zu schließen wäre. Die drei Zeilen kannst, soweit ich sehe, komplett streichen.
Und der Teil nach
//und hier das andere script
ist hoffentlich in einer anderen PHP-Datei.
WICHTIG und nicht oft genug zu betonen: session_start(); MUSS am Anfang der zweiten PHP-Datei stehen, noch vor irgendwelchen HTML-Headers - da darf nicht einmal eine Leerzeile davor stehen. |
|
| Nach oben |
|
 |
apophis171
Anmeldedatum: 02.04.2007 Beiträge: 16 Wohnort: Rathenow
|
Verfasst am: 12.04.2007, 13:12 Titel: |
|
|
hab die version in einem anderen thread gefunden http://forum.stoppt-den-spam.info/gemischtes-captcha-tutorial-t84.html
hab mal von da nochmal kopiert, und jetzt geht es...
jetzt noch ne andere frage: warum muss der/die/das "session_start(); " ganz am anfang stehen (bezieht sich jetzt mehr auf die Leerzeichen)?
Und ist das jetzt nur speziell in diesem Script der Fall, oder ist das allgemein so? |
|
| Nach oben |
|
 |
frameguard
Anmeldedatum: 05.03.2007 Beiträge: 117 Wohnort: Wien
|
Verfasst am: 12.04.2007, 13:18 Titel: |
|
|
Der andere Thread ist eh von mir.
Die Funktion session_start(); muß in JEDEM Script, das eine solche Funktion enthält, ganz am Anfang stehen. Wenn der Browser eine PHP-Datei aufmacht und da steht am Anfang eine Leerzeile, generiert er automatisch HTML-Headers, und schon ist das Malheur perfekt: session_start(); kann nur funktionieren, wenn vorher noch kein Header und nichts geschickt wurde. |
|
| Nach oben |
|
 |
apophis171
Anmeldedatum: 02.04.2007 Beiträge: 16 Wohnort: Rathenow
|
Verfasst am: 12.04.2007, 13:50 Titel: |
|
|
das ist erstmal gut zu wissen, ich habe nähmlich bei einem meiner scripte nen html davor (bei den Captcha auch...)
kann ich den html teil problemlos nach unten kopieren, oder muss ich da noch was beachten? (die ausgabe vom Kontaktformular...) |
|
| Nach oben |
|
 |
frameguard
Anmeldedatum: 05.03.2007 Beiträge: 117 Wohnort: Wien
|
Verfasst am: 12.04.2007, 14:03 Titel: |
|
|
| Einfach in die erste Zeile das <? session_start(); ?>, und ab der 2. dann den HTML-Teil wie gehabt. |
|
| Nach oben |
|
 |
apophis171
Anmeldedatum: 02.04.2007 Beiträge: 16 Wohnort: Rathenow
|
Verfasst am: 12.04.2007, 14:06 Titel: |
|
|
also so: (mal sehen ob ich das verstanden habe...)
1 <? session_start(); ?>
2 html
3 ...
4 <? php
5 Captcha Script
6 mein script (also wie gehabt)
7 ?>
8 rest des html |
|
| Nach oben |
|
 |
frameguard
Anmeldedatum: 05.03.2007 Beiträge: 117 Wohnort: Wien
|
Verfasst am: 12.04.2007, 14:18 Titel: |
|
|
Bingo. *g*
Nur kannst Dir bei 4 das "php" sparen, setz es lieber gleich unter 1 rein:
1 <? php session_start(); ?>
2 html
3 ...
4 <?
5 Captcha Script
6 mein script (also wie gehabt)
7 ?>
8 rest des html
ist einfach eleganter.  |
|
| Nach oben |
|
 |
apophis171
Anmeldedatum: 02.04.2007 Beiträge: 16 Wohnort: Rathenow
|
Verfasst am: 12.04.2007, 14:26 Titel: |
|
|
Super!!! jetzt weiß ich auch, warum mein apache immer rumgestresst hat
da sollte man vieleicht auch nochmal im Tutorial drauf hinweisen. |
|
| Nach oben |
|
 |
|