Einzelnen Beitrag anzeigen
  #1  
Alt 04.08.2008, 00:12:49
KleinerKruemelZ KleinerKruemelZ ist offline
Anfänger
 
Registriert seit: May 2007
Beiträge: 2
Captcha bringt trotz richtiger Eingabe Fehlermeldung

Hallo Ihr,

versuche grad ein Captcha in ein bestehendes Gästebuch zu intergrieren.
Leider bekomme ich folgende Fehlermeldungen:

---
Notice: A session had already been started - ignoring session_start() in C:\xampp\htdocs\guestbook\captcha\captcha.php on line 2

( bei eingeschaltenem error_reporting(E_ALL); )


Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\guestbook\captcha\captcha.php:2) in C:\xampp\htdocs\guestbook\captcha\captcha.php on line 24

( bei eingeschaltenem error_reporting(E_ALL); )


Warning: imagettftext() [function.imagettftext]: Invalid font filename in C:\xampp\htdocs\guestbook\captcha\captcha.php on line 32
�PNG IHDR�(�/���IDATx���1 �@���_�OߧF��6TE4�6���m����H�5���[�s�spI"� R�H"� R�H"� R�H"� R�H"� R�H"� R�H"� R�H"� R�H����sI"z���*�"IEND�B`�

( auch ohne error_reporting(E_ALL); )

---

Desweiteren werden zwar Bild und Text angezeigt, aber selbst bei korrekter Eingabe des Sicherheitscodes kommt die von mir definierte Fehlerausgabe.
(config.php des GB : 'spamschutz' => 'Captcha ung&uuml;ltig<br>Session:'.$_SESSION['captcha_spam'].'<br>Eingabe:'.$_POST["sicherheitscode"].'<br>')

Beispiel:

Captcha ungültig
Session:qHrhs
Eingabe:qHrhs

Nachfolgend die dazugehörigen Listings:

captcha.php

PHP-Code:
<?php
   session_start
();
   unset(
$_SESSION['captcha_spam']);

   function 
randomString($len) {
      function 
make_seed(){
         list(
$usec $sec) = explode (' 'microtime());
         return (float) 
$sec + ((float) $usec 100000);
      }
      
srand(make_seed());

      
//Der String $possible enthält alle Zeichen, die verwendet werden sollen
      
$possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
      
$str="";
      while(
strlen($str)<$len) {
        
$str.=substr($possible,(rand()%(strlen($possible))),1);
      }
   return(
$str);
   }

   
$text randomString(5);  //Die Zahl bestimmt die Anzahl stellen
   
$_SESSION['captcha_spam'] = $text;

   
header('Content-type: image/png');
   
$img ImageCreateFromPNG($_SERVER['DOCUMENT_ROOT'].'/guestbook/captcha/captcha.png'); //Backgroundimage
   
$color ImageColorAllocate($img000); //Farbe
   
$ttf "xfiles.ttf"//Schriftart
   
$ttfsize 20//Schriftgrösse
   
$angle rand(0,5);
   
$t_x rand(5,30);
   
$t_y 35;
   
imagettftext($img$ttfsize$angle$t_x$t_y$color$ttf$text);
   
imagepng($img);
   
imagedestroy($img);
?>

add.php

PHP-Code:
<?php
error_reporting
(E_ALL);
#
# patShaping Guestbook 1.6 - add.php
#
# Speichern eines Eintrags und Anzeigen der 'Neuer Eintrag'-Seite
#
# Autor:            Patrick Canterino <patrick@patshaping.de>
# Letzte Aenderung: 5.11.2005
#

require('shared.php');
require(
'bbcode.php');
require(
'captcha/captcha.php');

$name    formdata('name');
$email   formdata('email');
$www     formdata('www');
$message formdata('message');
$preview formdata('preview');
$sicherheitscode formdata('sicherheitscode');
$sess $_SESSION['captcha_spam'];

if(
get_config_var('readonly'))
{
 
$tpl = new Template;
 
$tpl->read_file(get_config_var('tpl_add'));

 
$tpl->fillin('SCRIPT',$_SERVER['SCRIPT_NAME']);
 
$tpl->parse_if_block('readonly',1);

 print 
$tpl->get_template();
}
else
{
 if(!
$name && !$email && !$www && !$message)
 {
  
$tpl = new Template;
  
$tpl->read_file(get_config_var('tpl_add'));

  
$tpl->fillin('SCRIPT',$_SERVER['SCRIPT_NAME']);
  
$tpl->parse_if_block('readonly',0);

  print 
$tpl->get_template();
 }
 else
 {
  if(
$www == 'http://'$wwwurl '';
  else 
$wwwurl $www;

    
## Captcha Abfrage

    
if(!isset($_SESSION['captcha_spam'])){
    
$lala 'lala';
    };
    if(isset(
$_SESSION['captcha_spam']) && ($sicherheitscode != $sess)){
    
show_error(get_config_var('spamschutz'));
    unset(
$_SESSION['captcha_spam']);
    };
    if(isset(
$_SESSION['captcha_spam']) && ($sicherheitscode == $sess)){
    unset(
$_SESSION['captcha_spam']);
    };

  
## Captcha Ende

  
if(strlen($name)    < get_config_var('name_minlen')) show_error(get_config_var('name_too_short'));
  if(
strlen($message) < get_config_var('msg_minlen'))  show_error(get_config_var('msg_too_short'));

  if(
get_config_var('name_maxlen') && strlen($name)    > get_config_var('name_maxlen')) show_error(get_config_var('name_too_long'));
  if(
get_config_var('msg_maxlen')  && strlen($message) > get_config_var('msg_maxlen'))  show_error(get_config_var('msg_too_long'));

  
# Pruefen, ob eingegebene E-Mail-Adresse (im Internet) gueltig ist

  
if(!check_email($email) && $email != ''show_error(get_config_var('email_invalid'));

  
# Pruefen ob URL gueltig ist

  
if(!check_url($wwwurl) && $wwwurl != ''show_error(get_config_var('wwwurl_invalid'));

  
# Erzeugen einer eindeutigen ID

  
$id uniqid(dechex(rand(0,255)).dechex(rand(0,255)));

  
$name    htmlentities($name);
  
$email   htmlentities($email);
  
$wwwurl  htmlentities($wwwurl);
  
$message htmlentities($message);

  
# Ersetzen der Zeilenumbrueche in Name, E-Mail- und Homepage-Adresse
  # durch Leerzeichen

  
$name    preg_replace("/\015\012|\012|\015/",' ',$name);
  
$email   preg_replace("/\015\012|\012|\015/",' ',$email);
  
$wwwurl  preg_replace("/\015\012|\012|\015/",' ',$wwwurl);

  
# Ersetzen der Zeilenumbrueche im Text durch <br />

  
$message preg_replace("/\015\012|\012|\015/",'<br />',$message);

  
# Schraegstriche durch | ersetzen, um Probleme zu vermeiden

  
$name    str_replace('|','|',$name);
  
$wwwurl  str_replace('|','|',$wwwurl);
  
$message str_replace('|','|',$message);

  
# Mehr als ein Leerzeichen zu &nbsp;
  # Grundidee stammt aus dem Modul Encode::Plain des selfforum
  # Vorschlaege fuer eine elegantere Umsetzung werden gerne entgegengenommen!

  
for($x=0;$x<strlen($message);$x++)
  {
   if(
$message{$x} == ' ' && $message{$x+1} == ' '$message{$x} = "\240";
  }

  
$message str_replace("\240",'&nbsp;',$message);

  
# Ein Leerzeichen nach einem <br /> ebenfalls zu &nbsp;
  # Grundidee ebenfalls entnommen aus Encode::Plain des selfforum

  
$message str_replace('<br /> ','<br />&nbsp;',$message);

  
# Je nach Konfiguration den BBCode parsen

  
if(get_config_var('allow_bbcode')) $message parse_bbcode($message);

  
# Alles in Ordnung, CSV-String erzeugen

  
$line "$id|$name|$email|$wwwurl|".time()."|$message";

  if(
$preview)
  {
   
# Vorschau

   
$tpl = new Template;
   
$tpl->read_file(get_config_var('tpl_preview'));

   
$tpl->fillin('SCRIPT',$_SERVER['SCRIPT_NAME']);

   
set_tpl_form_values($tpl);

   
$tpl->fillin('ENTRY',make_entry($line));
   print 
$tpl->get_template();
  }
  else
  {
   
# Daten speichern

   
$datafile get_config_var('datafile');

   if(!
file_exists($datafile)) $openmode 'w';
   else 
$openmode 'r+';

   
$df fopen($datafile,$openmode);
   if(!
$df) die;
   
flock($df,LOCK_EX);

   if(
$openmode == 'r+' && filesize($datafile) > 0)
   {
    
# Pruefen, ob Datendatei am Ende einen Zeilenumbruch hat
    # Wenn nicht, wird ein zusaetzlicher eingefuegt

    
$data fread($df,filesize($datafile));
    if(!
preg_match("/\n$/",$data) && $data != ''fwrite($df,"\n");
    unset(
$data);
   }

   
# Daten in die Datei schreiben

   
fwrite($df,"$line\n");
   
flock($df,LOCK_UN);
   
fclose($df);

   
$tpl = new Template;
   
$tpl->read_file(get_config_var('tpl_saved'));
   
$tpl->fillin('SCRIPT',$_SERVER['SCRIPT_NAME']);
   
$tpl->fillin('ENTRY',make_entry($line));
   print 
$tpl->get_template();

  }
 }
}

# show_error()
#
# Funktion liest die Vorlagendatei fuer Fehler ein,
# parst sie, zeigt sie an und beendet das Script
#
# Parameter: Fehlermeldung

function show_error(&$errmsg)
{
 global 
$name$email$www$message$sicherheitscode;

 
$etpl = new Template;
 
$etpl->read_file(get_config_var('tpl_add_error'));

 
$etpl->fillin('SCRIPT',$_SERVER['SCRIPT_NAME']);
 
$etpl->fillin('ERRMSG',$errmsg);

 
set_tpl_form_values($etpl);

 print 
$etpl->get_template();
 exit;
}

# set_tpl_form_values()
#
# Fuegt die vom Benutzer eingegeben Daten in ein
# Template-Objekt ein
#
# Die Formulardaten werden erneut mit formdata()
# eingelesen!
#
# Parameter: Template-Objekt
#
# Rueckgabe: -nichts- (Template-Objekt wird veraendert)

function set_tpl_form_values(&$tpl)
{
 
$tpl->fillin('NAME',htmlentities(formdata('name')));
 
$tpl->fillin('EMAIL',htmlentities(formdata('email')));
 
$tpl->fillin('WWW',htmlentities(formdata('www')));
 
$tpl->fillin('MESSAGE',htmlentities(formdata('message')));
}

#
### Ende ###



?>
Hat jemand zufällig eine Idee, wie ich dies lösen könnte? Vielen Dank, schon mal.

Gruß, Alex

Geändert von KleinerKruemelZ (04.08.2008 um 00:19:21 Uhr)
Mit Zitat antworten