Ziffern und Buchstaben ....

Feedback, Vorschläge, Erneuerungen

Moderator: frameguard

Beitragvon frameguard » 14.03.2007, 12:43

Ok, Mail 4 you. ;)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon apophis171 » 10.04.2007, 21:19

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: Alles auswählen
<?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...
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 10.04.2007, 23:16

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.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon apophis171 » 12.04.2007, 15:12

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... :D

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?
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 12.04.2007, 15:18

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.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon apophis171 » 12.04.2007, 15:50

das ist erstmal gut zu wissen, ich habe nähmlich bei einem meiner scripte nen html davor (bei den Captcha auch...) :roll:

kann ich den html teil problemlos nach unten kopieren, oder muss ich da noch was beachten? (die ausgabe vom Kontaktformular...)
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 12.04.2007, 16:03

Einfach in die erste Zeile das <? session_start(); ?>, und ab der 2. dann den HTML-Teil wie gehabt.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon apophis171 » 12.04.2007, 16:06

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
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 12.04.2007, 16:18

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. ;)
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien

Beitragvon apophis171 » 12.04.2007, 16:26

Super!!! jetzt weiß ich auch, warum mein apache immer rumgestresst hat :D

da sollte man vieleicht auch nochmal im Tutorial drauf hinweisen.
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Vorherige

Zurück zu Feedback

Wer ist online?

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

cron