PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Captcha in Formular (mit Sessiondaten) intgrieren (http://www.selfphp.de/forum/showthread.php?t=24643)

tmaina 19.04.2012 22:39:17

Captcha in Formular (mit Sessiondaten) integrieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich bin autodidaktischer php-Anfänger und betreibe eine Seite, auf der man Zimmer bei Inserenten (Vermietern) anfragen kann. Dazu sucht man sich einen Vermieter aus und kommt per Link auf das Anfrageformular. Dieses besteht neben anderen Frames (head.php, menu.php und foot.php) aus der anfrage.php.
In diese anfrage.php möchte ich gern aufgrund jüngster BOT-Erfahrungen ein Captcha einbauen, am besten unten am Ende, nach den Daten des Anfragenden und dem Freitext.
Mein Script hat, und das ist wohl gerade mein Problem, natürlich die Daten des Vermieters eingebunden (siehe hidden inputs).
Kann mir jemand dabei helfen, das Captcha so einzubinden, dass es vor das submit der Anfrage eingebunden wird? Vielleicht gibt es auch eine Lösung mit nur noch einem einzigen Button, also Check des Captchas und nach Prüfung dann das Absenden?
Das Script ist nicht aus meiner Feder, das habe ich nicht drauf, wie gesagt... siehe meine ersten Worte;)
Die anfrage.php ist zu lang, daher als zip-Anhang.

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('captcha.PNG'); //Backgroundimage 
   
$color ImageColorAllocate($img000); //Farbe 
   
$ttf "XFILES.TTF"//Schriftart 
   
$ttfsize 25//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); 
?>

captcha_demo.php
PHP-Code:

<?
session_start(); 
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){ 
unset($_SESSION['captcha_spam']); 
echo "stimmt alles";
}else{
?>
<form action="/index.php" method="POST">
<tr>
<td><img src="captcha.php" border="0" title="Sicherheitscode"></td>
<td><input type="text" name="sicherheitscode" size="5"></td>
<td><input type="submit" value="Send Captcha"</td>
</tr>
</form>
<?
}
?>

Mit dieser Datei habe ich die Funktionstüchtigkeit des Captchas bereits auf gesondertem Webspace geprüft. Natürlich mit png-Datei als Hintergrund und ttf-Datei. Alles ok.

Ckaos 19.04.2012 23:43:59

AW: Captcha in Formular (mit Sessiondaten) intgrieren
 
Hi

in dem anfrage.zip hab ich folgenden Code gefunden MEHR NICHT
Code:

<a href="mycaptcha/captcha-page.php">
O.o

Zitat:

Kann mir jemand dabei helfen, das Captcha so einzubinden, dass es vor das submit der Anfrage eingebunden wird?
Das ist hier KEIN helft-mir-ich-mach-nix-forum sondern du versuchst
zeigst uns das wir helfen das besser/effizienter zu machen und geben
weiterführende Links.

mfg

CKaos

tmaina 20.04.2012 12:50:49

AW: Captcha in Formular (mit Sessiondaten) intgrieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Oh, sorry, da war ich gestern abend wohl schon etwas überarbeitet und habe nach der vielen Umbenennerei der Dateien glatt die falsche anfrage.php. gepostet. Jetzt ist die richtige dran.
In der ist nun auch mein Versuch enthalten, das Captcha einzubinden. Ich hatte im ersten Post halt nur nicht vor, mit meiner amateurhaften Einbindung für Belustigung zu sorgen;) Aber richtig, nur so lernt man es wohl...
Die Scripts hab ich von stoppt-den-spam.info und nur ganz vorsichtig angepasst.

Das Ergebnis ist zu sehen auf:
http://www.messezimmer-hannover.de/r...6/anfrage1.php

Vorerst erkenne ich 2 Fehler:
- Die captcha.png wird offensichtlich nicht geladen, auch der direkte Aufruf über
http://www.messezimmer-hannover.de/r...ha/captcha.png
geht nicht (not found on this server), sie liegt da aber!
- Ich bekomme auf der Ausgabeseite die Fehlermeldung:
Warning: Cannot send session cache limiter - headers already sent (output started at /mnt/web6/62/74/529274/htdocs/relaunch06/anfrage1.php:3) in /mnt/web6/62/74/529274/htdocs/relaunch06/anfrage1.php on line 328

Weiß jemand, was ich falsch mache?

urvater 20.04.2012 15:59:21

AW: Captcha in Formular (mit Sessiondaten) intgrieren
 
In deiner anfrage1.php werden schon Headerinformationen an den Client gesendet bevor session_start() die SESSION beginnen kann.

Ausserdem habe ich dein PNG gefunden. Mal sehen ob dir etwas auffällt.

http://www.messezimmer-hannover.de/r...ha/captcha.PNG

Und das ist die Stelle an der der Fehler sich befindet.
PHP-Code:

    <td>&nbsp;</td>
<? // Captcha Start
session_start(); 
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){

session_start

tmaina 20.04.2012 16:09:02

AW: Captcha in Formular (mit Sessiondaten) intgrieren
 
DANKE!
Also muss das ganze Script mit session_start() beginnen, richtig?
Und png ist nicht gleich PNG??? Das habe ich über Dekaden vernachlässigt;)

urvater 20.04.2012 16:27:25

AW: Captcha in Formular (mit Sessiondaten) intgrieren
 
Zitat:

Zitat von tmaina (Beitrag 143284)
DANKE!
Also muss das ganze Script mit session_start() beginnen, richtig?

fast richtig. session_start muss gesetzt werden bevor es zu einer Ausgabe kommt. Theoretisch befindet sich die Ausgabe immer am Ende einer Verarbeitung.
Nennt sich EVA Prinzip.
Zitat:

Zitat von tmaina (Beitrag 143284)
Und png ist nicht gleich PNG??? Das habe ich über Dekaden vernachlässigt;)

Wir reden hier von Dingen, die ein Server oder PC verarbeiten soll. Für die meisten Server ist ein APFEL weder Apfel noch apfel.

urvater 20.04.2012 16:41:00

AW: Captcha in Formular (mit Sessiondaten) intgrieren
 
Ich habe einmal versucht ein Zimmer auf der Seite zu suchen. Da knallt es nur so vor Fehlermeldungen.
Zitat:

Warning: include(lang/lang_.php) [function.include]: failed to open stream: No such file or directory in /mnt/web6/62/74/529274/htdocs/relaunch06/liste.php on line 2

Warning: include() [function.include]: Failed opening 'lang/lang_.php' for inclusion (include_path='.:/opt/RZphp52/includes') in /mnt/web6/62/74/529274/htdocs/relaunch06/liste.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at /mnt/web6/62/74/529274/htdocs/relaunch06/liste.php:2) in /mnt/web6/62/74/529274/htdocs/relaunch06/liste.php on line 29
und
Zitat:

Warning: mktime() expects parameter 4 to be long, string given in /mnt/web6/62/74/529274/htdocs/relaunch06/inc/preiskalk.php on line 32

Warning: mktime() expects parameter 4 to be long, string given in /mnt/web6/62/74/529274/htdocs/relaunch06/inc/preiskalk.php on line 34
und
Zitat:

Warning: Invalid argument supplied for foreach() in /mnt/web6/62/74/529274/htdocs/relaunch06/liste.php on line 309

Warning: Invalid argument supplied for foreach() in /mnt/web6/62/74/529274/htdocs/relaunch06/liste.php on line 319

Warning: Invalid argument supplied for foreach() in /mnt/web6/62/74/529274/htdocs/relaunch06/liste.php on line 330

Warning: Invalid argument supplied for foreach() in /mnt/web6/62/74/529274/htdocs/relaunch06/liste.php on line 340

Warning: Invalid argument supplied for foreach() in /mnt/web6/62/74/529274/htdocs/relaunch06/liste.php on line 350
Ich glaube du solltest deine Seite nicht online stellen bevor alles ohne Probleme funktioniert.

Das benutzte Formular fand ich auf Unterkünfte finden

tmaina 20.04.2012 18:34:38

AW: Captcha in Formular (mit Sessiondaten) intgrieren
 
Oh je, das war bis gestern in Ordnung. Hatte heute auf Strato die php-Einstellungen von 4.1.2 auf 5.2.17 geändert. Kann es sein, dass das die Ursache für die Fehlermeldungen war? Jetzt wieder zurück auf 4.1.2 und es scheint es wieder ok zu sein.

Sessioneintrag ist jetzt oben und Fehlermeldung weg.

png hab ich zu PNG geändert, das Bild bleibt jedoch noch weiter nur ein Logo.

meikel (†) 20.04.2012 19:00:12

AW: Captcha in Formular (mit Sessiondaten) integrieren
 
Zitat:

Zitat von tmaina (Beitrag 143279)
... Mit dieser Datei habe ich die Funktionstüchtigkeit des Captchas bereits auf gesondertem Webspace geprüft. Natürlich mit png-Datei als Hintergrund und ttf-Datei. Alles ok.

Ich vermisse hier ne Frage...

Prinzipiell gehört in Dein Formular-Script das Feld für den Captcha Text mit rein.
Optisch in der Nähe dann der img Tag:
Code:

<img src="captcha.php">
Das Script, welches die Formulareingaben überprüft, muß natürlich den Userstring mit dem String in der Session vergleichen.

btw: captcha.php scheint wohl schon ein paar Jahre auf dem Buckel zu haben...

Eben mal getestet:
http://validator.w3.org/check?uri=ht...Inline&group=0

Result: 169 Errors, 18 warning(s)

Das HTML ist grottenschlecht.

tmaina 20.04.2012 20:17:11

AW: Captcha in Formular (mit Sessiondaten) intgrieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Oh, und dafür hab ich damals mal Geld gezahlt. Egal, ist lange her;)

Session_start, Textfeld und img Tag hab ich drin. Das sieht in der anfrage.php jetzt so aus (Ausschnitte):

PHP-Code:

<?
session_start(); 
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){ 
unset($_SESSION['captcha_spam']); 
echo "OK";
}else{
   
}
?>

...

PHP-Code:

<td><img src="captcha/captcha.php" border="0" title="Sicherheitscode"></td></tr>
<tr>
<td> </td>
<td><input type="text" name="sicherheitscode" size="5"></td></tr>
<tr>
<td> </td>
<td><input type="submit" value="Check"</td></tr>
<?
}
?>

Die Klammer in der vorletzten Zeile irritiert mich, aber ohne gibts parse error.

Im Unterordner "captcha" liegen die captcha.php, captcha.PNG und XFILES.TFF
Ich füge aber auch nochmal die komplette aktualisierte anfrage.php als zip bei.

Das Problem ist nun: Image (und font) werden nicht angezeigt.


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:40:56 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.