Checkbox beim erstaufruf markieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Checkbox beim erstaufruf markieren

    Ich habe folgende Zeile:

    Quellcode

    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ß.
  • 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.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • 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.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von evilwm ()

  • Hi,

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

    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.
  • 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:

    Quellcode

    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.
  • x16 schrieb:

    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.

    x16 schrieb:

    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.

    x16 schrieb:

    Vieleicht noch wichtig für euer Verständnis:

    Quellcode

    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?
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • 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.
  • 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.


    Quellcode

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

    Quellcode

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