Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Checkbox auswerten





Frage

Hallo Forum, da ich nicht der PHP-Spezi bin stolpere ich schon über kleine "Hürden". Würde mich freuen wenn mir jemand mit einem Tip weiterhelfen kann. Es geht um folgendes. Am Ende soll ein Formular herauskommen wo erst nach anklicken einer Checkbox ein Absendebutton angezeigt wird. - die Checkbox habe ich , den Button auch :-) nur wie funktioniert das das Formular nach dem anklicken der Checkbox nochmal geladen wird. Irgendwie muß ja der Klick ausgewertet werden. Habe etwas über $PHP_SELF gefunden. Mus aber gestehen, das mich das nicht wirklich weiterbringt. Vielen Dank Andreas

Antwort 1 von rabies

Hi,

Um die Checkbox zu überprüfen, brauchst Du aber auch schon erst einmal einen Absendebutton - so gesehen ist das also per PHP _nicht_ möglich.

Ich würde Dir an dieser Stelle eher zu JavaScript raten und somit auf den Boardbereich "Webseiten/HTML" verweisen.

Kleiner Denkanstoß zur Funktionsweise:

Wenn Checkbox gesetzt ist (ich glaub´ da gibt´s einen Handler, der sich onSelect schimpft), dann zeige Absendebutton.

Ich denke, wenn man den Button vorerst nur mit CSS Angaben "versteckt", sollte das insoweit auch reichen.

Aber wie gesagt - frag´ in dem anderem Board nochmal nach.


Sven aka rabies.

Antwort 2 von AndreasClaas

Hallo Sven,
danke für Deine Antwort. Ich habe mir das jetzt in etwa mit PHP "hingefummelt" :-)


print "<form action=\"$PHP_SELF\" method=\"post\">\n";
    print "<input type=\"checkbox\" name=\"box\">\n";
	print "Clubbedingungen gelesen und akzeptiert";
	
   	if (empty($_POST[´box´])) {
	print "<br><span style=\"color:red\">Die Clubbedingungen müssen akzeptiet werden</style>";
	print "<br><input type=\"submit\" name=\"abgeschickt\">\n";
	}
	else
	{
	print "<br><br><input type=\"submit\" name=\"abgeschickt\">\n";
	}
	print "</form>\n"


So werden die Daten wohl bei jedem Klick abgeschickt. Hast Du noch eine Idee wie man das unterbinden könnte. D.H. die Daten nur abschicken wenn die Checkbox angeklickt ist.

Viele Grüße
Andreas

Antwort 3 von rabies

Ehrm... Hatte ich nicht geschrieben, dass es für das, was Du willst, keine richtige PHP-Lösung gibt?

Nunja, ich hab´ mir mal die kleine Arbeit gemacht, und eine JavaScript-Lösung zusammengebastelt (nur in Firefox getestet):


<?php

	// hier Deine Auswertung der POST-Daten.

?>
<html>
	<head>
		<script type="text/javascript">
			function verifyCheckbox() {
				if(document.forms.acceptTerms.elements.box.checked == true) 
				{
					document.getElementById(´submit´).style.visibility = "visible";
				}
				else {
					document.getElementById(´submit´).style.visibility = "hidden";	
				}
			}
		</script>
	</head>
	<body>
	
		<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" name="acceptTerms" method="post">
			<input type="checkbox" name="box" onChange="verifyCheckbox()"/>
 			Clubbedingungen gelesen und akzeptiert
   			<br><span style="color:red">Die Clubbedingungen müssen akzeptiet werden</span>
   			<br><input style="visibility: hidden" id="submit" value="submit" type="submit" name="abgeschickt"/>
		</form>
	
	</body>
</html>


Zur Funktionsweise (dass das ganze auch gleich noch einen Lerneffekt hat):

Sobald die Checkbox mit dem Name "box" verändert wird, wird die JavaScript-Funktion "verfiyCheckbox" aufgerufen. Diese Funktion überprüft die Checkbox darauf, ob Sie gesetzt ist. Wenn sie gesetzt ist, wird der inline-Stylesheet des Submit-Buttons (welcher standardmäßig auf visibility: hidden steht) auf visibility: visible gestellt. Wenn sie nicht gesetzt ist, wird der inline-Stylesheet wieder auf hidden gesetzt. ... Heißt so viel, wie, dass der Button "versteckt" ist (so kann der User ihn nun mal auch nicht anklicken).

hth,
Sven aka rabies.

Antwort 4 von AndreasClaas

Hallo Sven,
vielen Dank für Deine Mühe.
Ich hab schon verstanden das das mit PHP net geht.
Da ich mich aber schon mit der einen "Programmiersprache" schwer tue, fällt meine Begeisterung für ein weitere Sprache doch recht bescheiden aus :-)
Aber ich schau mir das natürlich an und sage nochmal vielen DAnk.
Viele Grüße
Andreas

Antwort 5 von rfb

das Script von rabies hat noch einen Fehler: ohne JavaScript gibts auch keinen Absendebutton - und JavaScript ist oft nicht verfügbar bzw. aus Sicherheitsgründen deaktiviert.
Abhilfe ist möglich:

<?php 

   // hier Deine Auswertung der POST-Daten. 

?> 
<html> 
   <head> 
      <script type="text/javascript"> 
         function verifyCheckbox() { 
            if(document.forms.acceptTerms.elements.box.checked == true) 
            { 
               document.getElementById(´submit´).style.visibility = "visible"; 
            } 
            else { 
               document.getElementById(´submit´).style.visibility = "hidden";    
            } 
         } 
      </script> 
   </head> 
   <body onload="verifyCheckbox()"> 
    
      <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" name="acceptTerms" method="post"> 
         <input type="checkbox" name="box" onChange="verifyCheckbox()"/> 
         Clubbedingungen gelesen und akzeptiert 
         <br><span style="color:red">Die Clubbedingungen müssen akzeptiet werden</span> 
         <br><input style="visibility: visible" id="submit" value="submit" type="submit" name="abgeschickt"/> 
      </form> 
    
   </body> 
</html>


(und dass auch dies gleich noch einen Lerneffekt hat) ohne JavaScript ist der Absendebutton nun einfach sichtbar, mit JavaScript wird unmittelbar nach dem Laden der Seite erstmalig die Prüffunktion ausgeführt, die dann natürlich feststellt, das das AGB-Häkchen fehlt und den Button verschwinden lässt.

Antwort 6 von AndreasClaas

prima, hab jetzt etwas Zeit gehabt und mir das mal angesehen.
Das Grundprinzip hab ich verstanden.

Jetzt gibt es aber noch eine Kleinihgkeit::

Mit Mozilla Firefox funktioniert das einwandfrei. D.h. bei jedem Klick wird je nach Zustand der Checkbox der Absendebutton angezeigt oder nicht.

Im IE muß ich zweimal klicken. 1x die Checkbox anklicken und dann muß ich nochmal irgendwo klicken damit die Änderung übernommen bzw. ausgewertet wird.

Liegt das am Script oder könnte das auch eine Einstellung am IE sein?

Viele Grüße
Andreas