• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] Google reCAPTCHA v2: JSON Objekt in PHP abfragen funkt nicht

Ich glaube, ich habe das Problem gelöst.
Mein Formular liegt in einer <table>. In jeder Zelle ist ein <divcontainer> zwecks Formatierung hinterlegt.
In Kombination mit php-echo $_POST dürfte dies zu einem (nicht angezeigten) Fehler führen.
Lösche ich testweise die Tabelle (also nur mehr divs u. php-echos), funkt die Google API Response und ich habe gültige Rückgabewerte.

Ich nehme das heute Abend mal genau unter die Lupe u. gebe Bescheid.
 
Mein Verdacht hat sich bestätigt.
Die Kombination div/table/form/php/div war wohl nicht Web u. Browser konform.

Ich habe die kontakt.php nach w3 standard komplett neu aufgebaut.
Nun läuft es!
Das Google API hat auch auf Anhieb gefunkt. (Naja, wenigstens war mein php coding von Anfang an richtig)

Klaus, abermals ~~~vielen vielen Dank~~~ für deine Geduld u. Hilfestellung über 3 Wochen hindurch!!!


Anm.: Bitte den Thread als gelöst markieren. Viell. hilft mein Thema eines Tages dem ein oder anderen verzweifelten Webmaster mit einer ähnlichen Problemstellung.
 
Nöp!
Es handelte sich um keinen Parseerror, sondern um eine (offensichtlich) nicht zulässige Kombination/Verschachtelung von Div-Containern in u. außerhalb einer Tabelle mit darüberliegenden Formular.
Ich gebe zu, dass ich das Formular ursprünglich schnell zusammengeschustert habe; im Laufe der Zeit wurde die Seite redesignt und es kamen verschiedene Inhalte dazu...naja, irgendwann ergab dies eben ein Codewirwar:confused:
Sry, dass ich soviel gepostet habe. Ich hätte es wohl gleich neu angehen sollen. *rmpfhhh

- - - Aktualisiert - - -

Mit einer Kleinigkeit, kosmetischer Natur, kämpfe ich allerdings noch:

Wie kann ich via php echo meine checkbox wieder auf den Status checked="none" zurücksetzen?

formular.php (das funktioniert):
HTML:
<input type="checkbox" name="meinebox" <?php echo ((isset($_POST['meinebox'])) ? ' checked="checked" ' : ''); ?> value="1"><label for="meinebox">Titelbeschreibung Checkbox</label>

contact.php (funktioniert nicht):
PHP:
$_POST['meinebox']=' checked="none" ';
Anm.: mit "" funkioniert es leider auch nicht.
 
Zuletzt bearbeitet:
Es handelte sich um keinen Parseerror, sondern um eine (offensichtlich) nicht zulässige Kombination/Verschachtelung von Div-Containern in u. außerhalb einer Tabelle mit darüberliegenden Formular.
Habe ich verstanden. Der IE11 hustet bei einigen unzulässigen Kombinationen wie z. B. hier:
HTML:
<!DOCTYPE html>
<html>
	<head>
		<title>Test</title>
		<meta charset="utf-8">
	</head>
	<body>
<table>
	<tr>
		<form>
			<td><input type="text" name="dummy"></td>
		</form>
	</tr>
</table>
	</body>
</html>
ie_verschachtelungsfehler.jpg

Deshalb frug ich.
 
Bitte - gern geschehen.

Wenn du nicht willst, dass die Checkbox markiert ist, darfst du das Attribut checked gar nicht vergeben.

PS: wer ist Klaus?
 
Wenn du nicht willst, dass die Checkbox markiert ist, darfst du das Attribut checked gar nicht vergeben.

Doch.
Ansatz wie folgt:
Wenn auf die Checkbox im Formular geklickt wird, existiert die Variable 'meinebox' und php setzt die Box immer auf "checked"; damit der Besucher nicht erneut auf die Checkbox klicken muss wenn andere Bedingungen nicht erfüllt sind.
Hat der User alle Bedingungen erfüllt und (erfolgreich) auf SUBMIT geklickt, leere ich zur verständlicheren Interaktion alle Eingabefelder indem ich alle Formularvariablen in php (zB: $_POST['email']=""; ) zurücksetze.
Ebenso möchte ich den Status der Checkbox wieder auf default (also checked="none") zurücksetzen.

Ansatz 1:
PHP:
$_POST['meinebox']=' checked="none" ';
Ergebnis: Haut leider nicht hin.

Ansatz 2:
PHP:
echo ((isset($_POST['meinebox'])) ? ' checked="none" ' : '');
Ergebnis: Haut leider auch nicht hin.

Ansatz 3:
Ich rufe über php eine js-funktion auf welche folgendes macht:
Code:
function cboxtodefault(meinebox) {
document.getElementById("meinebox").checked = false;
}
PHP:
if isset($_POST['meinebox']) {echo "onLoad='cboxtodefault()'";}
Ergebnis: Syntaxerror:confused:
 
Zuletzt bearbeitet:
HTML:
<input type="checkbox" name="meinebox" <?php echo ((isset($_POST['meinebox'])) ? ' checked="checked" ' : ''); ?> value="1"><label for="meinebox">Titelbeschreibung Checkbox</label>

contact.php (funktioniert nicht):
PHP:
$_POST['meinebox']=' checked="none" ';
Anm.: mit "" funkioniert es leider auch nicht.
PHP: isset - Manual
bei "" liefert isset true also NULL oder gleich unset
 
PHP:
$_POST['meinebox']=" checked="none" ";
ergibt leider einen Parseerror.
Wie hast du "" genau gemeint?
 
Wie hast du "" genau gemeint?

du hast gemeint, daß $_POST['meinebox']=""; die checkbox nicht zurücksetzt, und ich habe dir erklärt das
Code:
<input type="checkbox" name="meinebox" <?php echo ((isset($_POST['meinebox'])) ? ' checked="checked" ' : ''); ?> value="1">
mit $_POST['meinebox']=""; folgendes
Code:
<input type="checkbox" name="meinebox" checked="checked" value="1">
generiert, weil (isset($_POST['meinebox'])) true ergibt
 
Ja, das ist mir schon klar.
Es gibt auch kein Problem beim Setzen und merken der gesetzten Checkbox.
Leider gelingt es mir auf die im vorletzten Posting beschriebene Art nicht, die Checkbox nach erfolgreichen Submit wieder auf "unchecked", sprich default, zu setzen.

Bevorzugt möchte ich dies eben über php erreichen.
Da es leider nicht klappt, überlege ich nun, die Checkbox über eine JS-Funktion zurückzusetzen.
Leider führt der Funktionsaufruf über php auch zu einem Syntaxerror.:confused:

Nun weiß ich nicht weiter...:(
 
Ja, das ist mir schon klar.
was ist dir klar? ich denke nicht, dass dir das klar ist

Es gibt auch kein Problem beim Setzen und merken der gesetzten Checkbox.
sondern? ich dachte du willst die checkbox wieder auf unchecked setzen

Leider gelingt es mir auf die im vorletzten Posting beschriebene Art nicht, die Checkbox nach erfolgreichen Submit wieder auf "unchecked", sprich default, zu setzen.
ja, so hatte ich das verstanden.
sprich, du willst
Code:
<input type="checkbox" name="meinebox" value="1">
und nicht
Code:
<input type="checkbox" name="meinebox" checked="checked" value="1">
generieren. soweit ist dir das klar?
also musst du beim generieren des html dafür sorgen, daß isset($_POST['meinebox'] false ergibt, damit ((isset($_POST['meinebox'])) ? ' checked="checked" ' : '') zu '' wird und nicht zu ' checked="checked" '
soweit klar?
 
Ich habe von HTML und nicht von PHP geredet:
Code:
<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Fenstertitel</title>
<style type="text/css"></style>
</head>
<body>
Nicht markiert:
<input type="checkbox"><br>
Alle markiert:
<input type="checkbox" checked>
<input type="checkbox" checked="checked">
<input type="checkbox" checked="none">
<input type="checkbox" checked="">
</body>
</html>

Wo wird denn die Checkbox ausgegeben? In der contact.php oder in der formular.php? Bei ersterem solltest du uns mal zeigen, wie du das dort genau machst. Bei zweitem hat tsseh Recht.
 
Meine Scripts sehen wie folgt aus:

formular.php
PHP:
<?php
include 'contact.php';
?>
Danach kommt normales html mit <form><table>Kontaktformular...mit besagter Checkbox</table></form>
Besagte Stelle:
HTML:
<input type="checkbox" name="meinebox" <?php echo ((isset($_POST['meinebox'])) ? ' checked="checked" ' : ''); ?> value="1"><label for="meinebox">Titelbeschreibung Checkbox</label>
=> Sobald der Besucher das erste Mal auf die Checkbox klickt, ergibt 'meinebox' für php true und bleibt via echo gesetzt (=checked).
Warum ich das so mache: Es gibt im Formular mehrere Bedingungen die erfüllt sein müssen, damit der User das Formular erfolgreich absenden kann. Diese frage ich per php (if/else...) ab.
Das Problem: Hat der User auf die Checkbox geklickt, aber alle anderen Bedingungen nicht erfüllt und klickt trotzdem auf Submit, wird das Formular im Browser neu geladen und die angeklickte Checkbox steht wieder auf default (also ist nicht mehr angehackt obwohl er sie schon 1x angeklickt hat).
Meine Lösung um das Reloadproblem zu umgehen: Ich merke ich mir den Status der Checkbox, indem ich überprüfe ob "meinebox" existiert (isset...bla bla bla). Durch die Abfrage weiß ich, dass er sie bereits angeklickt hat und vermeide damit, dass er sie nochmals anklicken muss wenn das Formular reloaded wird.
Das funkt einwandfrei! Soweit so gut.

Sobald nun alle Bedingungen positiv erfüllt sind und der User auf SUBMIT klickt, wird in der contact.php eine Mail generiert, ich gebe ein echo "Vielen Dank für deine Eingaben" aus und leere alle Formularfelder damit der User erkennt, dass sein Formular abgesendet wurde.
(Ich finde es schlüssiger wenn nach erfolgreichen SUBMIT das Formular zurückgesetzt wird und nicht die Usereingaben drinnen stehen bleiben; der User könnte sonst glauben, dass das Formular nicht abgesendet wurde.)
Funkt auch alles wunderbar bis auf den Umstand, dass ich die angehackte Checkbox eben nicht auch wieder auf default setzen kann.

contact.php
PHP:
//ein paar if-else und isset Abfragen, google Captcha,...bis schließlich der positive Hinweis ausgegeben wird:
$hinweis="Vielen Dank für deine Eingaben. Diese wurden an uns gesendet.";
//Eingabefelder zurücksetzen
$_POST['vname']="";
$_POST['nname']="";
$_POST['mail']="";
$_POST['betr']="";
$_POST['nachr']="";		
//$_POST['meinebox']=' checked="none" '; //funkt nicht!
//echo ((isset($_POST['meinebox'])) ? ' checked="none" ' : ''); //funkt auch nicht!

Ich hoffe, ich habe das Problem nun verständlicher erläutert:numbness:
 
Zuletzt bearbeitet:
Danke für deine rasche Antwort.
Ich nehme an, du meinst diese Stelle:
also musst du beim generieren des html dafür sorgen, daß isset($_POST['meinebox'] false ergibt, damit ((isset($_POST['meinebox'])) ? ' checked="checked" ' : '') zu '' wird und nicht zu ' checked="checked" '
soweit klar?

Ich versuche es mal in die contact.php einzubauen...gebe Bescheid.

- - - Aktualisiert - - -

Vielen DANK, tsseh!

Ich habe es wie folgt gelöst:

PHP:
unset($_POST['meinebox']);

Mir wurde jetzt erst klar, dass es sich bei diesem Teil um eine Abfrage handelte:eek:
PHP:
? ' checked="checked" ' : ''

Nun verhält sich das Formluar so wie ich es immer wollte.
Der Thread kann endgültig als gelöst markiert werden.

:rolleyes:EIN UNENDLICHES DANKESCHÖN an Alle die sich meiner Unwenigkeit angenommen haben:rolleyes:
 
Zuletzt bearbeitet:
Ternärer Operatoren kenne ich und habe auch schon einmal damit herumexperimentiert.
In meinem Fall habe ich den Wald vor lauter Bäumen nicht gesehen:icon8::confused:*rmpfhhh
Wenn man die "herkömmliche" Schreibweise gewohnt ist muss man sich da erst umstellen.

Danke dir nochmals!!!:cheerful:
 
Zurück
Oben