ReCaptcha - Registerformular wird nicht angezeigt
Hallo,
wollte eben ein ReCaptcha in mein Register einbauen, jedoch wird kein ReCaptcha angezeigt, woran liegt das habe die ReCaptchalib.php Datei auf meinem Server unter
var/www//page/captcha/recaptchalib.php liegen.
vielen Dank für eure Hilfe.
Gruß
wollte eben ein ReCaptcha in mein Register einbauen, jedoch wird kein ReCaptcha angezeigt, woran liegt das habe die ReCaptchalib.php Datei auf meinem Server unter
var/www//page/captcha/recaptchalib.php liegen.
{include file="header.html" title=$hooks->title->title_registration}
<div class="row-fluid">
{include file="sidebar.html"}
<div class="span8">
{if $errorpass}
<br />
<div class="alert alert-error">
<b>{$lang.error} :</b> Ihr Passwort ist ungültig!
<a href="#" class="close" data-dismiss="alert">×</a>
</div>
{/if}
{if $erroruser}
<br />
<div class="alert alert-error">
<b>{$lang.error} :</b> Ihr Benutzername ist ungültig oder schon vorhanden!
<a href="#" class="close" data-dismiss="alert">×</a>
</div>
{/if}
{if $errorMail}
<br />
<div class="alert alert-error">
<b>{$lang.error} :</b> Ihre E-Mail Adresse ist ungültig oder schon vorhanden!
<a href="#" class="close" data-dismiss="alert">×</a>
</div>
{/if}
{if $UserOrMailexist}
<br />
<div class="alert alert-error">
<b>{$lang.error} :</b> Ihr Benutzername oder E-Mail Adresse existiert bereits!
<a href="#" class="close" data-dismiss="alert">×</a>
</div>
{/if}
{foreach item=i from=$hooks->addcontentregistration|@sortby:"#prio"}
{if $i.id eq 'defaultRegistration'}
<div class="base-block">
<div class="title">{$lang.registration}</div>
<form id="form1" name="form1" method="post" action="">
<label class="log-lab">{$lang.username}:</label>
<input name="user" type="text" class="login-input-user" />
<label class="log-lab">{$lang.password}:</label>
<input name="pass" type="password" class="login-input-pass" /><br /><br />
<label class="log-lab">{$lang.mail}:</label>
<input name="mail" type="text" class="login-input-pass" /><br />
<input type="submit" name="submit" value="{$lang.registration}" class="btn"/></br></br>
<?php
require_once('../page/captcha/recaptchalib.php');
$publickey = "meinpublickey";
echo recaptcha_get_html($publickey);
?>
</form>
</div>
{else}
{$i.content}
{/if}
{/foreach}
</div><!--/span-->
</div><!--/row-->
{include file="footer.html"}
vielen Dank für eure Hilfe.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 229656
Url: https://administrator.de/contentid/229656
Ausgedruckt am: 28.03.2024 um 22:03 Uhr
66 Kommentare
Neuester Kommentar
Moin,
hast du den Code einfach eingefügt oder dir vorher auch einen API-Key für ReCaptcha organisiert?
http://www.google.com/recaptcha/whyrecaptcha
Denke es ist auch für dich nicht verkehrt, wenn du dich einmal durch die Dokumentation liest:
https://developers.google.com/recaptcha/intro?hl=de-DE
Einfach jeden Menüpunkt ausgiebig lesen und verstehen, denke dann klappt es auch.
Gruß
@d4shoerncheN
hast du den Code einfach eingefügt oder dir vorher auch einen API-Key für ReCaptcha organisiert?
http://www.google.com/recaptcha/whyrecaptcha
$publickey = "meinpublickey";
Denke es ist auch für dich nicht verkehrt, wenn du dich einmal durch die Dokumentation liest:
https://developers.google.com/recaptcha/intro?hl=de-DE
Einfach jeden Menüpunkt ausgiebig lesen und verstehen, denke dann klappt es auch.
Gruß
@d4shoerncheN
Hi...
...ICH HABE IMMER NOCH KEINE ANTWORT AUF MEINE ERSTE FRAGE VON DIR BEKOMMEN !
Wenn du nicht antwortest, geht es nicht weiter !
Also:
HINWEIS: Fehlt eine Antwort oder relevante Daten, dann bin ich raus ...denn ich habe keine Lust jede Frage laufend wiederholen zu müssen.
~Arano
...ICH HABE IMMER NOCH KEINE ANTWORT AUF MEINE ERSTE FRAGE VON DIR BEKOMMEN !
Wenn du nicht antwortest, geht es nicht weiter !
Also:
- Was ist die Ausgabe von
recaptcha_get_html()
? - Wie lauten die __absoluten Pfade__ der PHP-Dateien von: dem Register-Formular und der ReCaptchaLib ?
- Ist dein Key für verschiedene Domains zugelassen ?
HINWEIS: Fehlt eine Antwort oder relevante Daten, dann bin ich raus ...denn ich habe keine Lust jede Frage laufend wiederholen zu müssen.
~Arano
Hallo, ja das ist gut so !
Die richtige Antwort wäre also gewesen: "Nichts". Da du aber nicht genau wusstest was ich mein ist das aber okay, denn immerhin hast du __Nachgefragt__ und ein mögliches Ergebnis angeboten.
Ich habe jetzt doch selber nachgesehen. die Funktion gibt nichts zurück, wirft aber auch keine Fehlermeldung ? Komisch !
Da ich leider trotz der absoluten Pfadangabe nicht verstehe wo welche Datei liegt und von wo sie aufgerufen werden... probieren wir es mal etwas anders.
Das
Füge mal in die Datei "/var/www/page/onpaste/themes/bootstrap/registration.html" an die Stelle nach
~Arano
Welche Ausgabe meinst du von rcaptcha_get_html ()?
Diese Funktion generiert doch eigentlich HTML-Code der dann ausgegeben wird um das reCaptcha-Bild einzubinden und das Eingabefeld, ect.Die richtige Antwort wäre also gewesen: "Nichts". Da du aber nicht genau wusstest was ich mein ist das aber okay, denn immerhin hast du __Nachgefragt__ und ein mögliches Ergebnis angeboten.
Ich habe jetzt doch selber nachgesehen. die Funktion gibt nichts zurück, wirft aber auch keine Fehlermeldung ? Komisch !
Da ich leider trotz der absoluten Pfadangabe nicht verstehe wo welche Datei liegt und von wo sie aufgerufen werden... probieren wir es mal etwas anders.
Das
display_errors
ist aktiviert und error_reporting
steht auf -1
Füge mal in die Datei "/var/www/page/onpaste/themes/bootstrap/registration.html" an die Stelle nach
require_once('../page/captcha/recaptchalib.php');
(Zeile 47) folgendes ein und schreib die Ausgabe hier her:<?php
echo 'TESTING >>>';
if( function_exists('recaptcha_get_html') )
{
echo '<h1>recaptcha_get_html() Funktion ist verfügbar</h1>';
}
else
{
echo '<h1>recaptcha_get_html() Funktion FEHLT !</h1>';
if( file_exists('../page/captcha/recaptchalib.php') )
{
echo '<h2>Lib existiert auch...</h2>';
}
else
{
echo '<h2>Lib existiert doch NICHT !</h2>';
echo 'Wir sind in: '.dirname(__FILE__);
}
}
echo 'TESTING <<<';
?>
~Arano
Hi,
das ist eines der Dinge die ich wissen wollte.
Ich wollte jetzt nicht wieder nach allem einzeln Fragen, bis ich auf das richtige Treffe. weil ich mir selber nicht sicher bin
Es ist ja sowieso eine *.html-Datei. Die kann normalerweise kein PHP aber auch keine andere Scriptsprache.
Und deine ganzen IFs in der HTML-Datei ließen mich vermuten das evtl. die Template-Enginen SMARTY verwendet wird.
Und in dieser muss man PHP noch einmal in extra "Smarty-Tags" stellen, damit Smarty weiß das es sich dabei um PHP-Code handelt der noch ausgeführt werden soll.
Ist es so ? Wird Smarty verwendet ? Oder eine andere Template-Engine ?
Wenn es Smarty ist, schau mal hier: http://www.smarty.net/docsv2/de/language.function.php.tpl
Und dann probiere es noch einmal.
~Arano
PS. Ich weiß ja nicht wichtig das ist, aber du solltest deinen PublicKey aus dem Beitrag entfernen
das ist eines der Dinge die ich wissen wollte.
Ich wollte jetzt nicht wieder nach allem einzeln Fragen, bis ich auf das richtige Treffe. weil ich mir selber nicht sicher bin
Es ist ja sowieso eine *.html-Datei. Die kann normalerweise kein PHP aber auch keine andere Scriptsprache.
Und deine ganzen IFs in der HTML-Datei ließen mich vermuten das evtl. die Template-Enginen SMARTY verwendet wird.
Und in dieser muss man PHP noch einmal in extra "Smarty-Tags" stellen, damit Smarty weiß das es sich dabei um PHP-Code handelt der noch ausgeführt werden soll.
Ist es so ? Wird Smarty verwendet ? Oder eine andere Template-Engine ?
Wenn es Smarty ist, schau mal hier: http://www.smarty.net/docsv2/de/language.function.php.tpl
Und dann probiere es noch einmal.
~Arano
PS. Ich weiß ja nicht wichtig das ist, aber du solltest deinen PublicKey aus dem Beitrag entfernen
Autsch !
Jetzt ist irgend etwas schief gelaufen Oo
Oh.. hm.. da habe ich dir jetzt was falsches gesagt... -.-
Und jetzt lese ich noch was... evtl. ist das Smarty-{php}-Tag schon wieder abgeschafft worden !?
Aber das schau ich mir jetzt nicht an.
Probieren wir es einfach aus *fg*
Füge mal diesen ganzen Block an die Stelle ein an der das Captcha erscheinen soll. Und alles andere PHP entfernst du.
Dieser Code enthält sowohl dein Captcha als auch meinen (aus wenn der vielleicht nicht mehr nötig ist) nur den PublicKey musst du anpassen.
Wenn die selben Fehlermeldungen erscheinen einfach wieder rausschmeißen und für heute Feierabend machen. Wie es dann funktioniert weiß ich auch nicht.
So aus dem Stegreif kenne ich mich auch nicht mit allem aus aber dafür gibt es ja Handbücher, Manuals und Referenzen in denen man nachlesen kann
~Arano
Jetzt ist irgend etwas schief gelaufen Oo
Oh.. hm.. da habe ich dir jetzt was falsches gesagt... -.-
Und jetzt lese ich noch was... evtl. ist das Smarty-{php}-Tag schon wieder abgeschafft worden !?
Aber das schau ich mir jetzt nicht an.
Probieren wir es einfach aus *fg*
Füge mal diesen ganzen Block an die Stelle ein an der das Captcha erscheinen soll. Und alles andere PHP entfernst du.
Dieser Code enthält sowohl dein Captcha als auch meinen (aus wenn der vielleicht nicht mehr nötig ist) nur den PublicKey musst du anpassen.
Wenn die selben Fehlermeldungen erscheinen einfach wieder rausschmeißen und für heute Feierabend machen. Wie es dann funktioniert weiß ich auch nicht.
{php}
require_once('../page/captcha/recaptchalib.php');
$publickey = "meinpublickey";
echo recaptcha_get_html($publickey);
echo 'TESTING >>>';
if( function_exists('recaptcha_get_html') )
{
echo '<h1>recaptcha_get_html() Funktion ist verfügbar</h1>';
}
else
{
echo '<h1>recaptcha_get_html() Funktion FEHLT !</h1>';
if( file_exists('../page/captcha/recaptchalib.php') )
{
echo '<h2>Lib existiert auch...</h2>';
}
else
{
echo '<h2>Lib existiert doch NICHT !</h2>';
echo 'Wir sind in: '.dirname(__FILE__);
}
}
echo 'TESTING <<<';
{/php}
So aus dem Stegreif kenne ich mich auch nicht mit allem aus aber dafür gibt es ja Handbücher, Manuals und Referenzen in denen man nachlesen kann
~Arano
Moin,
mit SMARTY kenne ich mich auch nicht aus. Allerdings liefert das Web einige Ergebnisse zum Thema "Smarty Recaptcha", unteranderem folgende Beiträge:
http://www.codefx.biz/2011/10/recaptcha-with-smarty-php
und
http://www.smarty.net/forums/viewtopic.php?p=75007
und hier
https://developers.google.com/recaptcha/docs/display
Hast du mal eine phpinfo.php erstellt? Schau mal nach ob die Funktion "GD LIBARY" aktiviert ist.
Gruß
@d4shoerncheN
mit SMARTY kenne ich mich auch nicht aus. Allerdings liefert das Web einige Ergebnisse zum Thema "Smarty Recaptcha", unteranderem folgende Beiträge:
http://www.codefx.biz/2011/10/recaptcha-with-smarty-php
und
http://www.smarty.net/forums/viewtopic.php?p=75007
und hier
https://developers.google.com/recaptcha/docs/display
Hast du mal eine phpinfo.php erstellt? Schau mal nach ob die Funktion "GD LIBARY" aktiviert ist.
Gruß
@d4shoerncheN
Hi,
Nein, so nicht !
Das Template ist richtig,das kannst du so lassen.
Aber das PHP, das darf nicht in eine beliebige PHP-Datei, es MUSS in GENAU die Datei, die das Template aufruft.
Es wird ja das Template-System verwendet, das macht man um Programmlogik (PHP) und Design(HTML/CSS) von einander zu trennen. Im Prinzip könnte das so aussehen: "Eine z.B. index.PHP-Datei" die abhängig vom einem Parameter eine andere Seite/Template anzeigt:
PSEUDOCODE
PSEUDOCODE
__In diesem Beispiel__ müsste dein PHP-Code __ungefähr__ an die Stelle an der die Variablen dem Template hinzugefügt werden.
Ich gehe aber stark davon aus, das deine Seite um einiges komplizierter aufgebaut ist und es für das Registrierformular eine eigene PHP-Datei gibt.
__In genau diese muss du den PHP-Code einfügen !__
Schönen Abend noch
~Arano
Nein, so nicht !
Das Template ist richtig,das kannst du so lassen.
Aber das PHP, das darf nicht in eine beliebige PHP-Datei, es MUSS in GENAU die Datei, die das Template aufruft.
Es wird ja das Template-System verwendet, das macht man um Programmlogik (PHP) und Design(HTML/CSS) von einander zu trennen. Im Prinzip könnte das so aussehen: "Eine z.B. index.PHP-Datei" die abhängig vom einem Parameter eine andere Seite/Template anzeigt:
PSEUDOCODE
PSEUDOCODE
<?php
// erstelle Smarty-Instanz
$smarty = new Smarty()
// lade template anhand des parameters
switch( $_GET['seite'] )
{
case 'impressum':
$smarty->lade_template('templates/impressum.html');
break;
case 'kontakt':
$smarty->lade_template('templates/kontaktformular.html');
break;
case 'index':
case 'start':
default:
$smarty->lade_template('templates/startseite.html');
break;
}
// füge variablen hinzu
$smarty->assign('titel','Seiten-Name.de');
$smarty->assign('var1','wert1');
$smarty->assign('var2','wert2');
$smarty->assign('var3','wert3');
// zeige geladenes template an
$smarty->display();
?>
__In diesem Beispiel__ müsste dein PHP-Code __ungefähr__ an die Stelle an der die Variablen dem Template hinzugefügt werden.
Ich gehe aber stark davon aus, das deine Seite um einiges komplizierter aufgebaut ist und es für das Registrierformular eine eigene PHP-Datei gibt.
__In genau diese muss du den PHP-Code einfügen !__
Schönen Abend noch
~Arano
Hi
ich hoffe du hast das nicht einfach so in die Datei "reingeprügelt" !?
Probiere es hat Step-by-step:
(Zeilennummern sind auf die Stellen des Queltextes vom 18.02.2014 22:19Uhr bezogen)
Die Fehlerprüfung ist ja ersteinmal unwichtig, solange kein Captcha erscheint bringt uns die sowieso nichts.
~Arano
ich hoffe du hast das nicht einfach so in die Datei "reingeprügelt" !?
Probiere es hat Step-by-step:
(Zeilennummern sind auf die Stellen des Queltextes vom 18.02.2014 22:19Uhr bezogen)
- Das
require_once()
in Zeile 2 -> testen $publickey
__unter__ Zeile 2 einfügen -> testenassign('recaptcha')
in Zeile 28 -> testen: (Captcha sollte erscheinen wenn im Template die Variable eingebungenwird)
Die Fehlerprüfung ist ja ersteinmal unwichtig, solange kein Captcha erscheint bringt uns die sowieso nichts.
~Arano
NEE! HALT! STOP !
Ich arbeite doch nicht für dich an einer Lösung eines bestehenden Problems, damit du mitten drin einfach alles wegwirfst und mit nem __anderem__ Problem daher kommst....
Alles fürn Arsch...
...noch mal von Vorne !?
Nee, nicht mit mir !
Wenn du weitermachen willst, sie letzten Beitrag von mir, andernfalls stehst du alleine da.
~Arano
Ich arbeite doch nicht für dich an einer Lösung eines bestehenden Problems, damit du mitten drin einfach alles wegwirfst und mit nem __anderem__ Problem daher kommst....
Alles fürn Arsch...
...noch mal von Vorne !?
Nee, nicht mit mir !
Wenn du weitermachen willst, sie letzten Beitrag von mir, andernfalls stehst du alleine da.
~Arano
Dan probiere mal:
Und schau in den Quelltext der angezeigten Seite.
Wichtig ist ja zu sehen was der Server generiert und übertragen hat, nicht was der Browser (meint) anzeigen zu dürfen.
~Arano
ini_set( 'display_errors','On' );
ini_set( 'error_reporting',E_ALL );
echo 'Hallo ';
require_once( ...DEIN_PFAD... );
echo 'Welt !';
Wichtig ist ja zu sehen was der Server generiert und übertragen hat, nicht was der Browser (meint) anzeigen zu dürfen.
~Arano
Das ist jetzt ein blöder Fehler deiner Seits :-P
Und weil der Pfad nicht in Anführungszeichen steht, geht der PHP-Interpreter davon aus das es sich um Konstanten handelt und versucht diese zu finden, weil diese aber auch nicht existieren gibts einen Fehler !
Das Slash (/) wiederum ist kein gültiges Zeichen für eine Konstante so das der Interpreter auch in diesem Kontext nicht weiss was es damit anfangen soll und wirft einen weiteren Fehler. In deinem zweitem Versuch z.B. interpretiert der Interpreter das Slash als Mathematischeszeichen (Division) und versucht entsprechend damit zu rechnen. Das geht aber auch schief weil sowohl Dividend als auch Divisor Konstanten sind die nicht existieren.
Daher so viele Fehlermeldungen.
Wir sehen also das
Also Fehler beheben und erneut Probieren
Achja !
Wir sehen übrigens auch das "Hallo" aus unserem erstem echo, aber das "Welt!" sehen wird nicht.
Die Fehler führen also komplett zu einem Abbruch des Scripts.
So kann man auf einfache weise ermitteln wie weit ein Script läuft und wann es abbricht: Der Fehler liegt also VOR dem "Welt!" aber nach dem "Hallo"
~Arano
require_once(page/captcha/recaptchalib.php);
Der Pfad MUSS doch in Anführungszeichen stehen (nimm einfache ' die werden __nicht__ nach Variablen durchsucht und sind somit schneller)Und weil der Pfad nicht in Anführungszeichen steht, geht der PHP-Interpreter davon aus das es sich um Konstanten handelt und versucht diese zu finden, weil diese aber auch nicht existieren gibts einen Fehler !
Das Slash (/) wiederum ist kein gültiges Zeichen für eine Konstante so das der Interpreter auch in diesem Kontext nicht weiss was es damit anfangen soll und wirft einen weiteren Fehler. In deinem zweitem Versuch z.B. interpretiert der Interpreter das Slash als Mathematischeszeichen (Division) und versucht entsprechend damit zu rechnen. Das geht aber auch schief weil sowohl Dividend als auch Divisor Konstanten sind die nicht existieren.
Daher so viele Fehlermeldungen.
Wir sehen also das
display_errors
und error_reporting
zwei sehr wichtige Direktiven während der Programmierung/des Debuggens sind und immer (während des Programmierens) gesetzt sein sollten. Aber niemals auf ProduktivsystemenAlso Fehler beheben und erneut Probieren
Achja !
Wir sehen übrigens auch das "Hallo" aus unserem erstem echo, aber das "Welt!" sehen wird nicht.
Die Fehler führen also komplett zu einem Abbruch des Scripts.
So kann man auf einfache weise ermitteln wie weit ein Script läuft und wann es abbricht: Der Fehler liegt also VOR dem "Welt!" aber nach dem "Hallo"
~Arano
Halleluja!
Endlich gibts ne vernünftige Fehlermeldung - Amen.
Passend wäre es natürlich herauszufinden, an welcher Stelle in den Verzeichnissen wir uns aktuelle befinden um dann den passenden relativen Pfad anzugeben.
Aber dazu haben wir beide denke ich keine Lust mehr, also nehmen wir den absoluten Pfad.
Probiere es erneut mit
Da fällt mir gerade ein, evtl. ist es auch ein Rechteproblem !
Wenn es also mit dem absolutem Pfad auch nicht funktioniert, dann überprüfe einmal die Dateirecht der einzubindenden Datei... wenn die nicht gelesen werden darf, macht das natürlich auch keinen Sinn *g*
EDIT: Moment, da seht je der Pfad wo wir sind XD
Gib mir ne Sekunde...
So... das sind die beiden absoluten Dateipfade:
Das
Dein relativer Pfad IST also falsch !
Richtig sollte sein: "
~Arano
Endlich gibts ne vernünftige Fehlermeldung - Amen.
der Pad müsste soweit stimmen
Ähm... Nee !- Sagt der Fatal error etwas anderes: "No such file or directory" -> "Datei oder Verzeichnis __nicht__ gefunden" und
- "müsste" ist nicht "ist" !
Passend wäre es natürlich herauszufinden, an welcher Stelle in den Verzeichnissen wir uns aktuelle befinden um dann den passenden relativen Pfad anzugeben.
Aber dazu haben wir beide denke ich keine Lust mehr, also nehmen wir den absoluten Pfad.
Probiere es erneut mit
require_once('/var/www/page/captcha/recaptchalib.php');
Da fällt mir gerade ein, evtl. ist es auch ein Rechteproblem !
Wenn es also mit dem absolutem Pfad auch nicht funktioniert, dann überprüfe einmal die Dateirecht der einzubindenden Datei... wenn die nicht gelesen werden darf, macht das natürlich auch keinen Sinn *g*
EDIT: Moment, da seht je der Pfad wo wir sind XD
Gib mir ne Sekunde...
So... das sind die beiden absoluten Dateipfade:
/var/www/page/onpaste/pages/registration.php/var/www/page/captcha/recaptchalib.php
Das
require_once()
hast du in die registration.php-Datei geschrieben. Wir befinden uns also in dem Verzeichnis "pages" und die Wegbeschreibung zur Lib ist daher:- zurück in das Verzeichnis "onpaste"
- zurück in das Verzeichnis "page"
- vor in das Verzeichnis "captcha"
- Datei selber
Dein relativer Pfad IST also falsch !
Richtig sollte sein: "
../../captcha/recaptchalib.php
"~Arano
Gibts ja nich...
Und mit dem absolutem Pfad !? vielleicht habe ich mich bei dem relativen Pfad auch verhauen...
In der Regel sollte man, eben wegen solcher Probleme, immer den absoluten Pfad verwenden.
Dazu erstellt man sich eine Konstante die auf das "Document Root" zeigt. und von dieser Position aus, kann man dann die weiteren Pfade angeben.
z.B.:
Das ganze lässt sich dann auch für einzelne Projekte erweitern:
~Arano
Und mit dem absolutem Pfad !? vielleicht habe ich mich bei dem relativen Pfad auch verhauen...
In der Regel sollte man, eben wegen solcher Probleme, immer den absoluten Pfad verwenden.
Dazu erstellt man sich eine Konstante die auf das "Document Root" zeigt. und von dieser Position aus, kann man dann die weiteren Pfade angeben.
z.B.:
<?php
define( 'ROOT', '/var/www/page/' );
# oder
define( 'ROOT', '/var/www/' );
include ROOT.'captcha/recaptchalib.php';
include_once ROOT.'captcha/recaptchalib.php';
require ROOT.'captcha/recaptchalib.php';
require_once ROOT.'captcha/recaptchalib.php';
# oder
include ROOT.'page/captcha/recaptchalib.php';
include_once ROOT.'page/captcha/recaptchalib.php';
require ROOT.'page/captcha/recaptchalib.php';
require_once ROOT.'page/captcha/recaptchalib.php';
?>
<?php
define( 'ROOT', '/var/www/' );
# definiere Konstante für url-shorter
define( 'ROOT_S', ROOT.'page/' );
# definiere Konstante für onpaste
define( 'ROOT_O', ROOT.'page/onpast/' );
# oder für andere oft benötigte Daten
define( 'LIBS', ROOT.'libs/' );
require LIBS.'recaptchalib.php' );
?>
~Arano
Hi,
Da wir nun ein vollständiges "Hallo Welt!" sehen wissen wir das es, zumindest nicht dazwischen, zu einer NOTICE, WARNING, oder FATAL ERROR kommt. Denn diese Meldung würden zwischen den beiden Wörtern stehen.
Wegen der trotzdem erscheinenden NOTICE tippe ich mal auf eine $smarty-Variable, die zwar im Template verwendet wird, aber im PHP __nicht__ definiert wurde. Das allerdings ist eine andere Baustelle - hier gehts ums Captcha:
~Arano
mit dem absoluten zeigt es mir jetzt endlich folgendes oben links an:
"Hallo Welt"
Wie eben angedeutet, mit den absoluten Pfaden kann man sich absolut sicher sein absolut nichts falsch gemacht zu haben "Hallo Welt"
Da wir nun ein vollständiges "Hallo Welt!" sehen wissen wir das es, zumindest nicht dazwischen, zu einer NOTICE, WARNING, oder FATAL ERROR kommt. Denn diese Meldung würden zwischen den beiden Wörtern stehen.
Wegen der trotzdem erscheinenden NOTICE tippe ich mal auf eine $smarty-Variable, die zwar im Template verwendet wird, aber im PHP __nicht__ definiert wurde. Das allerdings ist eine andere Baustelle - hier gehts ums Captcha:
Zitat von @Arano
(Zeilennummern sind auf die Stellen des Queltextes vom 18.02.2014 22:19Uhr bezogen)
Punk 1 haben wir gerade erledigt, weiter gehts bei 2(Zeilennummern sind auf die Stellen des Queltextes vom 18.02.2014 22:19Uhr bezogen)
- Das require_once() in Zeile 2 -> testen
- $publickey unter Zeile 2 einfügen -> testen
- assign('recaptcha') in Zeile 28 -> testen: (Captcha sollte erscheinen wenn im Template die Variable eingebunden wird)
~Arano
Ja, genau so !
Und beim testen sollte dann keine zusätzliche Fehlermedung erscheinen.
Das ist jetzt zwar völlig übertrieben selbst das zu testen, aber sicher ist sicher.
Immer schön einen Schritt nach dem anderem...
Und wenn das geklappt hat, kannst du auch gleich mit 3. weitermachen.
3. speichert den von der Funktion generierten HTML-Code in einer Smarty-Variable. Und wenn diese Variable im Template verwendet wird, sollte an ihrer stelle das Capche erscheinen.
Das ist zumindest der Plan.
~Arano
Und beim testen sollte dann keine zusätzliche Fehlermedung erscheinen.
Das ist jetzt zwar völlig übertrieben selbst das zu testen, aber sicher ist sicher.
Immer schön einen Schritt nach dem anderem...
Und wenn das geklappt hat, kannst du auch gleich mit 3. weitermachen.
3. speichert den von der Funktion generierten HTML-Code in einer Smarty-Variable. Und wenn diese Variable im Template verwendet wird, sollte an ihrer stelle das Capche erscheinen.
Das ist zumindest der Plan.
~Arano
Ich muss ehrlich zugeben, ich habe keine Ahnung mehr wie deine registrieren.php-Datei nun aussieht XD
Die beiden
Aktuell kann dir ja auch nichts angezeigt werden, denn du setzt die Smarty-Variable ja auch auf "FALSE".
~Arano
Die beiden
echo
s für das HalloWelt kannst du jetzt übrigends ruhig raus löschen, die brauchen wir nicht mehr.Aktuell kann dir ja auch nichts angezeigt werden, denn du setzt die Smarty-Variable ja auch auf "FALSE".
$smarty->assign("recaptcha", recaptcha_get_html($pub_key, $error));
~Arano
Hach... -.-
Nein und Ja.
Nein das ist nicht das Problem
Ja, das kommt auch noch dazu - aber erst später.
Denn was wollen wir denn mit der Prüfroutine, wenn und das Captcha noch nicht einmal richtig angezeigt wird ?
Siehe her:
Siehst du den Fehler jetzt !?
Technisch ist das gar kein Problem. Das Captcha einzubinden ist allerdings auch technisch kein Problem und trotzdem haben wir hier einen Thread von über 40 Beiträgen.
...poste mal beide Dateien (die PHP- und die Template-Datei) komplett hier im Forum bitte.
Gute Nacht
~Arano
Nein und Ja.
Nein das ist nicht das Problem
Ja, das kommt auch noch dazu - aber erst später.
Denn was wollen wir denn mit der Prüfroutine, wenn und das Captcha noch nicht einmal richtig angezeigt wird ?
Siehe her:
$publickey = "X";
$smarty->assign("recaptcha", recaptcha_get_html($pub_key, $error));
und kann ich noch ein Error hinzufügen:
Sei mir nicht böse aber... ich habe da so meine Zweifel !Technisch ist das gar kein Problem. Das Captcha einzubinden ist allerdings auch technisch kein Problem und trotzdem haben wir hier einen Thread von über 40 Beiträgen.
...poste mal beide Dateien (die PHP- und die Template-Datei) komplett hier im Forum bitte.
Gute Nacht
~Arano
Moin,
Die Stelle ist schon richtig, aber die beiden Variablen heißen:
Aber, und das war auch wieder richtig, du musst dich hier auf einen Namen einigen. Welcher ist egal, haubtsacher der Funktion wird der PublicKey übergeben und sie kann das Captcha generieren.
~Arano
das hier: ($pub_key, in -> ($public_key, oder?
Das ist doch nicht dein Ernst oder ? Oo :,(Die Stelle ist schon richtig, aber die beiden Variablen heißen:
- $pub_key
- $publickey
$public_key
? Diese Variable existiert doch gar nicht...Aber, und das war auch wieder richtig, du musst dich hier auf einen Namen einigen. Welcher ist egal, haubtsacher der Funktion wird der PublicKey übergeben und sie kann das Captcha generieren.
~Arano
Huhu,
sehr schön !
Aber ich muss mich gerade mal um etwas anders kümmern, ich melde mich dann mit den nächsten Schritten.
Denn bevor wir eine Captcha fehler anzeigen lassen, muss erstmal geprüft werden ob es überhaupt einen gibt bzw. ob das Captcha richtig gelöst wurde. Die Anzeige eines Captchafehler ist das letzte um das wir uns kümmern.
Bis dann
~Arano
sehr schön !
für ein Error müsste das normalerweise ausreichen oder:
Nein !- ist das nur ein kleiner Teil von dem was noch fehlt und
- Die Smarty-Variable
$recaptcha
enthält doch das generierte HTML für die Anzeige des Captchas selber.
Aber ich muss mich gerade mal um etwas anders kümmern, ich melde mich dann mit den nächsten Schritten.
Denn bevor wir eine Captcha fehler anzeigen lassen, muss erstmal geprüft werden ob es überhaupt einen gibt bzw. ob das Captcha richtig gelöst wurde. Die Anzeige eines Captchafehler ist das letzte um das wir uns kümmern.
Bis dann
~Arano
So!
Da wir hier ja eh schon ein kleines Buch schreiben, ich eigentlich kein Fan davon bin anderen fertigen Code "hinzuwerfen", habe ich mir überlegt das du __mehr machen musst__.
Okay, die Anzeige des Captchas haben wir ja nun auch erfolgreich beendet.
Wie geht es weiter !?
Nach dem Absenden des Captchas muss dieses nun (1) auf Korrektheit geprüft werden. Daraus ergeben sich dann zwei weitere Fälle, entweder der Test wurde (2) bestanden oder (3) nicht. Und das sind auch die nächsten Punkte die wir/du abarbeiten musst.
__1. die Prüfung__
Natürlich müssen wir die "Antwort" des Benutzers auf die Frage des Captchas auf Korrektheit überprüfen, das ist ja der Sinn des Captchas. Da du das reCaptcha verwendest haben wir zu keinem Zeitpunk Kontrolle darüber was gefragt wird und wie die Antwort lauten könnte, also können wir die Überprüfung gar nicht selber machen. Glücklicherweise stellt uns das reCaptcha dafür eine passenden Funktion zur Verfügung die wir nur noch benutzen müssen.
Und jetzt kommst du in Spiel !
Vor ein paar Beiträgen wolltest du schon einmal Code verwenden der noch fehlt, diesen brauchen wir jetzt und den findest du im erstem Codeblock hier: ReCaptcha - Registerformular wird nicht angezeigt
Aber vorsicht, einfach kopieren und an einer freien Stelle einfügen funktioniert __nicht__ !
Schau dir diesen Code genau an... was passiert da.
Schau dir auch den Code von registration.php an... was passiert hier.
Wie muss der noch fehlende Code (oder vielleicht nur ein Teil davon) in die registration.php eingebaut werden ?
~Arano
Da wir hier ja eh schon ein kleines Buch schreiben, ich eigentlich kein Fan davon bin anderen fertigen Code "hinzuwerfen", habe ich mir überlegt das du __mehr machen musst__.
Okay, die Anzeige des Captchas haben wir ja nun auch erfolgreich beendet.
Wie geht es weiter !?
Nach dem Absenden des Captchas muss dieses nun (1) auf Korrektheit geprüft werden. Daraus ergeben sich dann zwei weitere Fälle, entweder der Test wurde (2) bestanden oder (3) nicht. Und das sind auch die nächsten Punkte die wir/du abarbeiten musst.
- die Prüfung
- der Fall des Bestehens und
- der Fehlerfall
__1. die Prüfung__
Natürlich müssen wir die "Antwort" des Benutzers auf die Frage des Captchas auf Korrektheit überprüfen, das ist ja der Sinn des Captchas. Da du das reCaptcha verwendest haben wir zu keinem Zeitpunk Kontrolle darüber was gefragt wird und wie die Antwort lauten könnte, also können wir die Überprüfung gar nicht selber machen. Glücklicherweise stellt uns das reCaptcha dafür eine passenden Funktion zur Verfügung die wir nur noch benutzen müssen.
Und jetzt kommst du in Spiel !
Vor ein paar Beiträgen wolltest du schon einmal Code verwenden der noch fehlt, diesen brauchen wir jetzt und den findest du im erstem Codeblock hier: ReCaptcha - Registerformular wird nicht angezeigt
Aber vorsicht, einfach kopieren und an einer freien Stelle einfügen funktioniert __nicht__ !
Schau dir diesen Code genau an... was passiert da.
Schau dir auch den Code von registration.php an... was passiert hier.
Wie muss der noch fehlende Code (oder vielleicht nur ein Teil davon) in die registration.php eingebaut werden ?
~Arano
Moin,
das ist der Code den du brauchst.
Dieser muss nun in die "registration.php" eingefügt werden. ABER einfach an einer freien Stelle einfügen funktioniert nicht ! Er muss schon richtig in den vorhandenen Code eingearbeitet werden damit ALLES (und nicht __nur__ das Captcha) funktioniert.
~Arano
das ist der Code den du brauchst.
Dieser muss nun in die "registration.php" eingefügt werden. ABER einfach an einer freien Stelle einfügen funktioniert nicht ! Er muss schon richtig in den vorhandenen Code eingearbeitet werden damit ALLES (und nicht __nur__ das Captcha) funktioniert.
- Was passiert noch in der "registration.php",
- wie ist die Reihenfolge und
- an welcher Stelle macht die Captcha prüfung Sinn.
~Arano
Hi
Nein, so stimmt das nicht !
Wie gesagt, einfach komplett einfügen funktioniert __nicht__ !
Genau genommen muss der "Prüfcode" in zwei Teile geteilt werden die jeweils an einer anderen Stelle eingefügt werden müssen.
Verstehst du überhaupt den Code in der "registration.php" und was dort passiert, geprüft und abgefragt wird !?
~Arano
Nein, so stimmt das nicht !
Wie gesagt, einfach komplett einfügen funktioniert __nicht__ !
Genau genommen muss der "Prüfcode" in zwei Teile geteilt werden die jeweils an einer anderen Stelle eingefügt werden müssen.
Verstehst du überhaupt den Code in der "registration.php" und was dort passiert, geprüft und abgefragt wird !?
~Arano
Ja, versteh ich schon ungefähr.
Muss man ja mal gefragt haben.Also der Gedanke geht schon mal in die richtige Richtung !
Allerdings muss der Rest __auch__ in den Anweisungsblock "{ ... }" des genannten IFs.
Denn nur wenn das Formular abgeschickt wurde (und damit auch das Captcha), macht es Sinn, die Eingaben zu überprüfen.
Mal etwas anders gefragt, an welcher Stelle würdest du den "Prüfcode" in zwei Teile teilen und warum !?
~Arano
Formulieren wir deinen Antwort mal ein wenig um:
Mit
Die richtige Überprüfung muss also noch vorgenommen werden, und das geschieht über die Eigenschaft "is_valid" des Objekts. Dieses Eigenschaft kann
Und wie du schon sagtest, wenn
Aber wenn
Dann setze den Code doch mal komplett zusammen und Poste ihn.
~Arano
Mit
recaptcha_check_answer()
wird die Eingabe zum Captcha überprüft. Als Rückgabewert erhalten wir allerdings keine direkte Antwort "richtig/falsche" sondern nur ein Objekt welches in der Variable $resp(-onse) (dt. Antwort) gespeichert wird.Die richtige Überprüfung muss also noch vorgenommen werden, und das geschieht über die Eigenschaft "is_valid" des Objekts. Dieses Eigenschaft kann
TRUE
aber auch FALSE
sein. Für den Falls das die FALSE ist, gibt es dann noch die Eigenschaft "error" die eine Fehlermeldung bereit hält.Und wie du schon sagtest, wenn
$resp->is_valid===true
dann machen wir mit der Formularverarbeitung weiter, sprich erst dann überprüfen wir auch die anderen Eingaben.Aber wenn
$resp->is_valid===false
dann gab es einen Fehler beim abfragen des Captchas beim ReCaptcha-Server.Dann setze den Code doch mal komplett zusammen und Poste ihn.
~Arano
Hm...
Nöö...
Wir/DU SELBER hatten doch vorhin schon festgestellt, das alles in den Anweisungsblock des IFs
Wieso sind denn nun Zeile 11-16 außerhalb des Anweisungsblocks !?
Ncoh ne Hilfestellung:
Di hast den Prüfcode nun auch an der falschen Stelle getrennt !
Getrennt werden muss er im Anweisungsblock des IFs
Wenn du es doch nicht verstehst, dann sag es, ansonsten reden wir uns hier beide den Mund fusselig.
~Arano
Nöö...
Wir/DU SELBER hatten doch vorhin schon festgestellt, das alles in den Anweisungsblock des IFs
if( isset($_POST['submit']) )
gehört weil eine Prüfung doch erst dann Sinn macht, wenn das Formular abgeschickt wurde !Wieso sind denn nun Zeile 11-16 außerhalb des Anweisungsblocks !?
Ncoh ne Hilfestellung:
Di hast den Prüfcode nun auch an der falschen Stelle getrennt !
Getrennt werden muss er im Anweisungsblock des IFs
if( $resp->is_valid )
Wenn du es doch nicht verstehst, dann sag es, ansonsten reden wir uns hier beide den Mund fusselig.
~Arano
Nehmen wir mal nur die IFs aus der "registration.php"
"Übersetzen" wir die mal in "Menschensprache":
Der logische Ablauf ist also:
Wenn das Formular abgeschickt wurde, überprüfen wir ob eine E-Mail-Adresse eingegeben wurde, DANN ob ein Benutzername angegeben wurde, DANN ob ein Passwort dazu angegeben wurde und ERST DANN (wenn alle Angaben vorhanden sind) speichern wir den neuen Benutzer-Account.
Da hinein muss nun die Captchaprüfung integriert werden.
Aus welchen Schritten besteht die Captcha Prüfung und wie passen die Sinnvoll in das vorhandene !?
Zu Mensch:
Du muss also eigentlich "nur" die 2 neuen Schritte in die ersten 5 vorhandenen einfügen.
Mach das einmal mit dem 7 Textzeilen die ich gerade aufgelistet habe, und anschließend passt du den Code an.
Ich möchte gerne BEIDES sehen !
Schönen Sonntag soweit
~Arano
PS: wer solch einen Service aufzieht, der MUSS auch damit umgehen können
if (isset($_POST['submit'])) {
if ($startUp->checkMail($_POST['mail'])) {
if (!empty($_POST['user'])) {
if (!empty($_POST['pass'])) {
if (!$startUp->addUser($_POST['user'],$_POST['mail'],$_POST['pass'],'true','true',$_POST[' recaptcha_check_answer'])) {
- wenn das Formular abgeschickt wurde
- wenn eine gültige E-Mail-Adresse eingegeben wurde
- wenn ein Benutzername eingegeben wurde
- wenn ein Passwort eingegeben wurde
- wenn Benutzer (erfolgreich) angelegt wurde
Der logische Ablauf ist also:
Wenn das Formular abgeschickt wurde, überprüfen wir ob eine E-Mail-Adresse eingegeben wurde, DANN ob ein Benutzername angegeben wurde, DANN ob ein Passwort dazu angegeben wurde und ERST DANN (wenn alle Angaben vorhanden sind) speichern wir den neuen Benutzer-Account.
Da hinein muss nun die Captchaprüfung integriert werden.
Aus welchen Schritten besteht die Captcha Prüfung und wie passen die Sinnvoll in das vorhandene !?
if ($_POST["recaptcha_response_field"]) {
if ($resp->is_valid) {
- wenn ein Captchaeingabefeld übertragen wurde (doof programmiert, dies kann nämlich auch LEER sein !)
- wenn das Capcha richtig gelöst wurde
Du muss also eigentlich "nur" die 2 neuen Schritte in die ersten 5 vorhandenen einfügen.
Mach das einmal mit dem 7 Textzeilen die ich gerade aufgelistet habe, und anschließend passt du den Code an.
Ich möchte gerne BEIDES sehen !
Schönen Sonntag soweit
~Arano
PS: wer solch einen Service aufzieht, der MUSS auch damit umgehen können
Naja fast...
Also mit deiner Reihenfolge funktioniert das auch, das macht am Ende eigentlich keinen Unterschiede ABER logisch ist die Reihenfolge trotzdem nicht. zumindest sehe ich das anders
Logischerweise prüfen wir ERST ob es sich bei dem Besucher um Mensch oder Maschine handelt, denn wenn es eine Maschine ist, brauchen wir die angegebenen E-Mail-Adresse, den Benutzernamen und das Passwort __nicht__ überprüfen - die Arbeit können wir uns dann ja sparen.
Wie gesagt, du hast die Lösung ja fast gehabt und am Ende würde es auch so funktionieren.
Zwei Dinge waren da aber noch !
Ich habe:
Das sollte jetzt eigentlich ganz gut hinhauen... auf Fehler konnte ich das natürlich nicht Testen.
Probiere es mal aus
Backups nicht vergessen, man weiß ja nie !
Schönen Sonntag noch
~Arano
Also mit deiner Reihenfolge funktioniert das auch, das macht am Ende eigentlich keinen Unterschiede ABER logisch ist die Reihenfolge trotzdem nicht. zumindest sehe ich das anders
// wenn das formular abgeschickt wurde
if( isset($_POST['submit']) )
// wenn beim captcha eine eingabe gemacht wurde
if( isset($_POST["recaptcha_response_field"]) && !empty($_POST["recaptcha_response_field"]) )
// wenn das captcha richtig gelöst wurde / der besucher ein mensch ist
if( true==$resp->is_valid )
// wenn die e-mail-adresse gültig ist
if( $startUp->checkMail($_POST['mail']) )
// wenn ein benutzername angegeben wurde
if( !empty($_POST['user']) )
// wenn ein passwort angegeben wurde
if( !empty($_POST['pass']) )
// ACHTUNG: wenn der account NICHT angelegt werden konnte.
if( !$startUp->addUser( $_POST['user'], $_POST['mail'], $_POST['pass'], 'true', 'true') )
Wie gesagt, du hast die Lösung ja fast gehabt und am Ende würde es auch so funktionieren.
Zwei Dinge waren da aber noch !
- Hast du die
else
-Klauseln (Fehlerfälle) vergessen und - aber das das hattest du Nachgefragt, fehlte der Funktionsaufruf von
recaptcha_check_answer()
<?php
require_once('/var/www/page/captcha/recaptchalib.php');
$publickey = "x";
$privatekey = "x";
if( !defined("IN_PASTE") )
die("Access denied!");
if( $startUp->isLogged() )
$startUp->redirect( $conf['baseurl'].'/account.html' );
if( isset($_POST['submit']) )
{
if( isset($_POST["recaptcha_response_field"]) && !empty($_POST["recaptcha_response_field"]) )
{ // isset() um zu prüfen ob es dieses inputfeld überhaupt giebt und
// !empty() um sicher zu stellen das auch etwas eingegeben wurde
$resp = recaptcha_check_answer( $privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]
);
if( true==$resp->is_valid )
{ // Captcha wurde gelöst, besucher ist _wahrscheinlich_ ein mensch.
if( $startUp->checkMail($_POST['mail']) )
{
if( !empty($_POST['user']) )
{
if( !empty($_POST['pass']) )
{
// Check if data is save else we make an error
if( !$startUp->addUser( $_POST['user'], $_POST['mail'], $_POST['pass'], 'true', 'true') )
{
$smarty->assign( "UserOrMailexist", true );
}
}
else
$smarty->assign( "errorpass", true );
}
else
$smarty->assign( "erroruser", true );
}
else
$smarty->assign( "errorMail", true );
}
else
{
// captcha wurde falsch gelöst = error
$smarty->assign( "errorCaptcha", true );
$smarty->assign( "errorCaptchaMsg", $resp->error );
}
}
else
$marty->assign( "errorCaptcha", true ); // kein captcha übertragen = error
}
else
{
$smarty->assign( "errorpass", false );
$smarty->assign( "erroruser", false );
$smarty->assign( "errorMail", false );
$smarty->assign( "errorCaptcha", false );
$smarty->assign( "recaptcha", recaptcha_get_html( $publickey, $error ) );
}
$hook->set_title( 'title_registration', 'Registration' );
$hook->add_content_registration( 'defaultRegistration', '', 10 );
if( $hook->hook_exist('registration_page') )
$hook->execute_hook( 'registration_page' );
?>
- die Reihenfolge so geändert wie ich es für logisch halte,
- die Kontrolle ob das Captcha-Eingabefeld übertragen wurde erweitert (
isset() && !empty()
) und - die Smarty-Variabeln
errorCaptcha & errorCaptchaMsg
eingeführt die aussagen ob es eine Fehler gab und wenn, welcher. Das muss dann noch in deinem Template angepasst werden.
{if $errorCaptcha }
<br />
<div class="alert alert-error">
<b>{$lang.error} :</b> Ihr Captcha ist ungültig!
<!-- <br />Fehler: {$errorCaptchaMsg} -->
<a href="#" class="close" data-dismiss="alert">×</a>
</div>
{/if}
Das sollte jetzt eigentlich ganz gut hinhauen... auf Fehler konnte ich das natürlich nicht Testen.
Probiere es mal aus
Backups nicht vergessen, man weiß ja nie !
Schönen Sonntag noch
~Arano