You are not logged in.

  • Login

1

Tuesday, September 29th 2009, 5:48pm

Checkbox beim erstaufruf markieren

Ich habe folgende Zeile:

HTML Code

1
<td>Chipsatz: ( EIN: <input type="checkbox" name="leer_pruefung" <?php if (isset($_POST['leer_pruefung'])) {echo "checked=\"checked\"";}?>> )</td>


Soweit klappt auch alles. Wenn der User die Checkbox markiert, dann bleibt sie auch markiert.
Ich möchte nun aber, dass die Checkbox beim ersten Seitenaufruf standardmäßig markiert ist. Ich kann im Input Tag aber kein checked eintragen, da es dann dort ja bleibt. Ich bräuchte mal einen Denkstoß.

2

Tuesday, September 29th 2009, 6:29pm

Ich verstehe die Frage nicht! Willst du die Checkbox disablen??

3

Tuesday, September 29th 2009, 7:39pm

Nein, sie soll immer aktiviert sein, es sei denn man deaktiviert sie. Normalerweise sind checkboxen nicht aktiviert, diese soll es aber.

4

Tuesday, September 29th 2009, 8:03pm

Wenn ich dich richtig verstanden habe, dann sollte es so ablaufen:
Benutzer ruft die Seite zum ersten mal auf. Checkbox aktiviert. Checkbox wird nicht verändert.
Benutzer ruft die Seite zum zweiten mal auf. Checkbox immer noch aktiviert. Benutzer deaktiviert Checkbox.
Benutzer ruft die Seite zum dritten mal auf. Checkbox ist deaktiviert. ...

Wenn das stimmt, dann lautet dein Denkanstoß Cookies. Mit denen solltest du den Status der Checkbox speichern und beim nächsten Aufruf entsprechend aktivieren bzw. deaktivieren.

5

Tuesday, September 29th 2009, 8:06pm

Ja das geht mit dem Attribut checked="checked", aber deinem Code-Schnipsel entnehme ich dass du das bereits weißt. Was ist also genau dein Problem?

6

Tuesday, September 29th 2009, 10:27pm

Hi,

checked ist nicht der Wert bzw. der Zustand, welcher beim absenden übermittelt wird, auch bei einer checkbox ist dafür value zuständig, falls es das ist, was du meinst ;)

7

Wednesday, September 30th 2009, 9:39am

Offtopic:

Zumindest für den FF ab Version 3 stimmt das so nicht. Meines Wissens entspricht das der HTML 4.01-Definition.

Da wird der "Zustand" des checked-Attributs übermittelt. Betonung auf Zustand, nicht Wert.

Sobald checked gesetzt ist, egal womit, ist die checkbox aktiviert und 'true' wird als Wert übermittelt.
Fehlt das Attribut hat dies "verschiedene" Auswirkungen.
- In JS erhält man für myCheckbox.checked -> false
- Per Http übertragene Daten enthalten keinen Wert. Also auch kein false für den Index der Checkbox, sondern im _GET oder _POST Array fehlt der entsprechende Index komplett.

Der Wert des Attributes value ist zumindest für den FF bzw die Definition nicht als Zustandsbestimmung vorgesehen.


Ob dies für alle Browser gilt kann ich leider nicht sagen... :/


Ontopic:
Die in meinen Augen eleganteste Lösung wurde bereits genannt und heißt Cookies oder Session.

This post has been edited 1 times, last edit by "evilwm" (Sep 30th 2009, 9:44am)


8

Wednesday, September 30th 2009, 11:25am

Nein, um den Zustand der Checkbox geht es mir nicht. Den Zustand stelle ich ja mit dem PHP Schnipsel wieder her. Wenn die Seite geschlossen wird, ist der Zustand egal, dann wird er eben gelöscht. Ist schon ok so.

Nur:
Die Checkbox soll standardmäßig einfach aktiviert sein.

9

Wednesday, September 30th 2009, 3:41pm

Hi,

checked="checked" ist genau das was du suchst und auch schon hast !

PHP Quellcode

1
<?php if (isset($_POST['leer_pruefung'])) {echo "checked=\"checked\"";}?>



Wenn du es bei deinem Beispiel beim direkten Aufruf ´checked´ haben möchtest, dann musst du das if Konstrukt entfernen, da das Post Array natürlich leer ist.

10

Thursday, October 1st 2009, 12:04pm

OK, aber wenn ich den IF Teil weg nehme, wird nach dem Submit der Haken in der Checkbox wieder weg sein. Er soll aber bleiben. Also ist der IF Teil erforderlich. Und daneben einfach nochmal checked="checked" schreiben, geht ja auch nicht, dann klappt der IF Teil wieder nicht. Genau das ist mein Problem.

Vieleicht noch wichtig für euer Verständnis:

HTML Code

1
<form action="eingabe.html#unten">

Ich lande also nach dem SUBMIT wieder auf der Formulardatei selbst. Daher möchte ich, dass alle Änderungen bestehen bleiben, die der User gemacht hat. Deswegen der IF Teil.

11

Thursday, October 1st 2009, 5:21pm

OK, aber wenn ich den IF Teil weg nehme, wird nach dem Submit der Haken in der Checkbox wieder weg sein. Er soll aber bleiben. Also ist der IF Teil erforderlich.
Falsch, Wenn dein Formular sich immer wieder selbst aufruft und da checked="checked" (ohne Bedingung)steht, dann wird der Haken immer gesetzt sein.

Und daneben einfach nochmal checked="checked" schreiben, geht ja auch nicht, dann klappt der IF Teil wieder nicht. Genau das ist mein Problem.
Du brauchst das If überhaupt nicht? Wieso klappt der dann nicht.

Vieleicht noch wichtig für euer Verständnis:

HTML Code

1
<form action="eingabe.html#unten">

Ich lande also nach dem SUBMIT wieder auf der Formulardatei selbst. Daher möchte ich, dass alle Änderungen bestehen bleiben, die der User gemacht hat. Deswegen der IF Teil.
Sicher, dass dein Webserver so konfiguriert ist, dass .html-Dateien geparsed werden?

12

Friday, October 2nd 2009, 12:54pm

Ich habe mich wieder mal falsch oder eher unvollständig ausgedrückt. Wenn der User den Hacken weg macht und auf Absenden klickt, soll der Haken natürlich auch weg bleiben. Von daher ist der If teil doch wichtig und wohl nicht entberbar, wodurch auch der Eintrag checked="cheked" im INPUT Tag unsinnig wird.
Ich möchte also, dass der Zustand der Checkbox nach dem SUBMIT immer gespeichert wird. Und da ist der IF Teil nunaml nötig.

HTML Dateien werden bei mir geparst.

13

Friday, October 2nd 2009, 4:52pm

Hi,

du kannst du den Zustand abfragen ob das Formular abgesendet wurde. Wenn nein, dann setzt du default den Haken, wenn ja, dann musst du die value im Postarray checken.


PHP Quellcode

1
2
3
4
5
6
7
<input type="checkbox" name="leer_pruefung" value="1" <?php if( !isset($_POST['leer_pruefung']) ) {
    echo "checked = 'checked' ";
}else{
    if($_POST['leer_pruefung'] == 1) {
        echo "checked = 'checked' "; 
    }
} ?> />

14

Friday, October 2nd 2009, 5:47pm

wie oben schonmal jemand erwähnt hat, funktionieren Checkboxen nicht so... Der Zustand einer Checkbox wird NICHT in ihrem Value-Tag gespeichert.
Wenn man ein Formular mit einer Checkbox absendet und die Checkbox ist nicht aktiviert, gibt es zur Checkbox keinen Wert im Postarray (oder wie man das Formular auch immer abschickt).
Wenn die Checkbox aber aktiviert ist, gibt es im Postarray eine Variable mit dem Namen der Checkbox, die den value-Tag der Checkbox enthält. (oder einfach "on" wenn man keinen value-Tag angibt)

Daher braucht man zum Testen ob das Formular abgesendet wurde noch einen anderen Wert, z.B. den vom "Absenden"-Button... Das würde dann vielleicht so aussehen: (wenn der Button den namen "submit" hat

PHP Quellcode

1
2
3
4
5
6
7
<input type="checkbox" name="leer_pruefung" <?php if( !isset($_POST['submit']) ) {
    echo "checked = 'checked' ";
}else{
    if(isset($_POST['leer_pruefung'])) {
        echo "checked = 'checked' "; 
    }
} ?> />

15

Saturday, October 3rd 2009, 12:50am

Vielen Dank, ich werde das gleich morgen mal einbauen.

Social bookmarks