Checkbox vor der Registrierung

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Rudol
Mitglied
Beiträge: 12
Registriert: 02.08.2007 14:04

Checkbox vor der Registrierung

Beitrag von Rudol »

In meinem Forum ist das GET_VARS-Mod von TK bei mir installiert, aber das reicht mir noch nicht.

Zusätzlich möchte ich neben dem großen Button den man anklicken muss, noch eine Checkbox haben, in die man einen Haken setzen muss, um fortfahren zu können. Wenn kein Haken, Fehlermeldung.

Das probiere ich jetzt seit 2 Tagen, aber ich komme nicht weiter.

Ich habe es bisher so in der Art gemacht:

--------------------
/templates/subSilver/agreement.tpl
--------------------

Hier habe ich vor dem Link bzw. Button ein <input type="checkbox" name="haken"> eingesetzt.

--------------------
/includes/usercp_register.php
--------------------

Nach dem

Code: Alles auswählen

if ( $mode == 'register' && !isset($HTTP_POST_VARS['agreed']) )
{
	include($phpbb_root_path . 'includes/page_header.'.$phpEx);

	show_coppa();

	include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
}

habe ich dann eingefügt.

Code: Alles auswählen

if ( $mode == 'register' && $haken != "on" )
{
	message_die(GENERAL_ERROR, 'Haken setzen!');
}

Aber dann komme ich immer zu der Fehlermeldung, egal ob der Haken drin ist oder nicht.

Kann mir jemand helfen, wie ich diese Checkbox korrekt übergebe, dass sie auch das tut, was sie soll? Und bitte nicht lachen, falls der Code totaler Unsinn ist, ich bin nicht so der php-Profi, hab's versucht zusammenzuschustern :).
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Also erst einmal solltest du der Checkbox einen Wert übergeben:

Code: Alles auswählen

<input type="checkbox" name="haken" value="on">
Das ist zwar nicht zwingend erforderlich, aber du kannst so auch den Wert überprüfen der sich darin befindet wenn du möchtest.

Dann solltest du dir überlegen wie der Status des Hakens überhaupt in deine Variable kommt. Wie du in deiner Codestelle sehen kannst wird da mit einer Variable namens $HTTP_POST_VARS gearbeitet. In diesem Array sollte sich auch deine Checkbox befinden, daher besser so:

Code: Alles auswählen

if ($mode == 'register' && (!isset($HTTP_POST_VARS['haken']) || $HTTP_POST_VARS['haken'] != "on"))
Ansonsten sieht das schon ganz gut so aus.
Als Tipp vielleicht noch:
Wenn du der Checkbox noch zusätzlich variable (also jedes mal einen anderen) Werte zuweist, dann kannst du das ganze vielleicht noch ein wenig Bot-sicherer gestalten. Es wäre z.b. denkbar, dass der Wert auf der aktuellen Zeit basiert und du dann gleichzeitig noch prüfst wie lange der User/Bot für die Registrierung benötigt hat. Wenn die Zeit sehr kurz ist, dann kannst du davon ausgehen dass es ein Bot ist, ich habe jedenfalls noch niemanden gesehen, der die Felder in weniger als 10s ausgefüllt hat...
Um das zu realisieren könntest du dich z.b. mit diesen Themen beschäftigen:
KB:template_syntax
KB:template_system
Außerdem Hilfreich: [PHP:time] [PHP:md5] und XOR

Allerdings frage ich mich gerade, ob du überhaupt ein Formular angezeigt bekommst? Wenn ich mich nicht irre dann unterscheidet deine Abfrage überhaupt nicht zwischen der Anzeige des Formulars und der Auswertung desselben.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Rudol
Mitglied
Beiträge: 12
Registriert: 02.08.2007 14:04

Beitrag von Rudol »

Ah, vielen Dank.

Funktioniert soweit erstmal wunderbar. Ich hatte mich nicht getraut das HTTP_POST_VARS zu benutzen, weil ich glaubte der Wert muss dann auch in der Adressleiste übergeben werden, aber offenbar ist dem nicht so. Naja, kenne mich wie gesagt noch nicht ganz so aus.

Bevor ich mich an Templates und dem Rest Deiner Vorschläge versuche, werde ich allerdings die Sache erstmal versuchen richtig zum laufen zu kriegen. Denn...

Allerdings frage ich mich gerade, ob du überhaupt ein Formular angezeigt bekommst? Wenn ich mich nicht irre dann unterscheidet deine Abfrage überhaupt nicht zwischen der Anzeige des Formulars und der Auswertung desselben.
Das habe ich in der Tat noch gar nicht bedacht. Es funktioniert jetzt soweit, dass nur beim gesetzten Haken das Formular angezeigt wird. Nach Deinem Hinweis habe ich nun mal versucht das ausgefüllte Formular überhaupt abzusenden... und siehe da... wenn man auf Absenden klickt, kommt die Fehlermeldung, dass kein Haken gesetzt wurde. *seufz*

Mal schauen ob ich das lösen kann.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Du musst dir nur die Datei ein wenig genauer ansehen. Weiter unten kommen die Validierungen und da wird u.a. auch irgendwann unterschieden, ob das Formular nur angezeigt, oder auch tatsächlich abgeschickt wurde. Alternativ kannst du auch einfach in das Formular ein Hidden Field einbauen das genau den gleichen Wert abliefert wie der Haken, damit gaukelst du der Software dann quasi einen Haken vor:

Code: Alles auswählen

<input type="hidden" name="haken" value="on">
Das muss dann natürlich in die dazugehörige Templatedatei also profile_add_body.tpl passieren.

EDIT: Was HTTP_POST_VARS angeht: Das wird immer per Formular weitergegeben, HTTP_GET_VARS geht über die URL. Wobei diese Bezeichnungen inzwischen auch im Prinzip überholt sind, die neuen Versionen lauten $_POST und $_GET.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Rudol
Mitglied
Beiträge: 12
Registriert: 02.08.2007 14:04

Re: Checkbox vor der Registrierung

Beitrag von Rudol »

Hehe jo, kurz nachdem ich es gepostet hatte, hatte ich auch diese Idee mit der profile_add_body.tpl und habe es direkt umgesetzt.

Ich habe quasi in der profile_add_body.tpl neben dem Absenden-Button nochmal den selben Haken eingefügt, so müsste der Bot gleich 2 Haken setzen, statt ihn hidden zu machen.

Sieht dann so aus:

--------------------
/templates/subSilver/profile_add_body.tpl
--------------------

Unter

Code: Alles auswählen

<td class="catBottom" colspan="2" align="center" height="28">{S_HIDDEN_FIELDS}
habe ich

Code: Alles auswählen

<!-- BEGIN switch_user_logged_out -->
Bitte den Haken setzen! <input type="checkbox" name="haken" value="on"> 
<!-- END switch_user_logged_out -->
eingesetzt, so ist ein Profil-Edit nicht betroffen und bei der Registrierung selbst ist noch ein Haken zu setzen, den die Bots nicht kennen oder vermuten.
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“