m.mietke: Radiobutton sollen wie angewählt bleiben

Guten Abend zusammen,

wir haben unser Kontaktformular soweit mit PHP am Laufen und alles geht gut. Wenn man das Formular absenden will und z.B. die e-mail- Adresse vergessen hat, kommt ein Hinweis darauf, und die bereits in den Textfeldern eingegebenen Daten bleiben erhalten. Das Formular wird dann noch nicht abgesendet.

Soweit so gut, aber leider ist es bei den Radiobuttons für 'Herr' und 'Frau' so, daß sie nach dem (erfolglosen) Absendeversuch wieder in ihre Ersteinstellung zurückgehen. Der code hierfür sieht folgendermaßen aus:

<input type="radio" name="anrede" id="anrede_herr" value="Herr" checked="checked">  
   <label for="anrede_herr">Herr</label>  
   <input type="radio" name="anrede" id="anrede_frau" value="Frau">  
   <label for="anrede_frau">Frau</label>

Testhalber haben wir mal die checked="checked" Anweisung herausgenommen, aber dann erscheinen bei der Fehlermeldung beide Buttons wieder leer, wie grundeingestellt.

Dann ärgert sich der Benutzer, daß er schon wieder angeben muß, ob er Männchen oder Weibchen ist. Da ich öfter aus Fernost Nachrichten bekomme, ist für mich diese Angabe wichtig :).

Was wir gerne hätten: Daß ebenso wie die Textfelder auch die Radiobuttons mit der vom user gemachten Einstellung erhalten bleiben, bis die Sendung erfolgreich durchgeführt wird.

Dankbar für jede Hilfe ist
m.mietke

  1. Hi!

    Das checked durch php setzen. Was angewaehlt war weiss php schliesslich.

    --
    Trau Dich!
     
    1. Das checked durch php setzen. Was angewaehlt war weiss php schliesslich.

      Klingt interessant!
      Könntest Du das genauer beschreiben? Soll ich checked="php" schreiben oder wie?
      Gruß von
      m.mietke

      1. Hallo,

        Soll ich checked="php" schreiben oder wie?

        Wie machst Du es denn bei den anderen Input-Feldern? Irgendwie mit value="<?php echo htmlspecialchars($_POST['...']); ?>", oder? Für die Radio-Buttons brauchst Du nur noch eine kleine If-Abfrage:

        <?php if(isset($_POST['anrede']) && $_POST['anrede']=='Herr') { ?> checked="checked"<?php } ?>

        Alex

        1. Für die Radio-Buttons brauchst Du nur noch eine kleine If-Abfrage:

          <?php if(isset($_POST['anrede']) && $_POST['anrede']=='Herr') { ?> checked="checked"<?php } ?>

          Alex

          Danke,
          das haben wir probiert, hat aber nicht genützt.
          Geht es noch konkreter bzw. vollständiger, bitte?

          Die anderen Inputfelder machen wir wie von Dir vermutet mit htmlspecialchars.

          Gruß,
          m.mietke

          1. Hallöchen,

            Geht es noch konkreter bzw. vollständiger, bitte?

            Noch konkreter geht nicht.

            Noch vollständiger - was meinst du damit???
            Du hast einen Radiobutton definiert. Damit der angewählt erscheint, muss innerhalb der spitzen Klammern <>, die die Definition umschließen, das Wort checked, bzw. bei xhtml die Phrase checked="checked" stehen. Der PHP-Code von Alex macht genau das, was dein Problem löst: nämlich  checked="checked" ausgeben, wenn der Radiobutton angewählt war.

            Brauchst du jetzt immer noch mehr Info's, um zu wissen, wohin du die PHP-Code-Zeile von Alex schreiben musst? Dann vergleiche von deinem ersten Posting die Code-Zeilen 1 und 3 und überlege, worin sie sich in Bezug auf checked unterscheiden.

            MfG
            vaudi

          2. Hello,

            Für die Radio-Buttons brauchst Du nur noch eine kleine If-Abfrage:

            <?php if(isset($_POST['anrede']) && $_POST['anrede']=='Herr') { ?> checked="checked"<?php } ?>

            Danke,
            das haben wir probiert, hat aber nicht genützt.
            Geht es noch konkreter bzw. vollständiger, bitte?

            Ja,
             es geht konkreter, wenn Du deinen Codeversuch hier bekannt gibst.
            Dann kann man schauen, was daran falsch oder unvollständig ist.

            Liebe Grüße aus Syburg bei Dortmund

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Ja,
              es geht konkreter, wenn Du deinen Codeversuch hier bekannt gibst.
              Dann kann man schauen, was daran falsch oder unvollständig ist.

              Danke,
              Alex, Tom und Vaudi,

              ich wußte nicht genau, wo ich diese if- Abfrage einbauen muß. Jetzt habe ich sie mit in die spitzen Klammern von <input type ... genommen, und zwar einmal bei 'Herr' und einmal bei 'Frau'. Dann hat es geklappt.
              Der code sieht jetzt folgendermaßen aus:

              <input type="radio" name="anrede" id="anrede_herr" value="Herr" <?php if(isset($_POST['anrede']) && $_POST['anrede']=='Herr') { ?> checked="checked"<?php } ?>>  
                 <label for="anrede_herr">Herr</label>  
                 <input type="radio" name="anrede" id="anrede_frau" value="Frau" <?php if(isset($_POST['anrede']) && $_POST['anrede']=='Frau') { ?> checked="checked"<?php } ?>>  
                 <label for="anrede_frau">Frau</label>
              

              Danke für die Hilfe allerseits!
              Wenn es noch Anmerkungen dazu gibt, bitte gerne.
              Aber wie gesagt: es geht jetzt! Danke!
              Gruß von
              m.mietke

              1. Hallöchen,

                Wenn es noch Anmerkungen dazu gibt, bitte gerne.
                Aber wie gesagt: es geht jetzt! Danke!

                Unwesentlich für die Funktionalität, aber im Sinne eines guten Quellcodes: Du brauchst nur ein Leerzeichen. Entweder hier im HTML-Teil

                value="Herr" <?php
                  ____________^

                oder hier im PHP-Teil

                ?> checked
                  __^

                MfG
                vaudi

              2. Hi,

                <input type="radio" name="anrede" id="anrede_frau" value="Frau" <?php if(isset($_POST['anrede']) && $_POST['anrede']=='Frau') { ?> checked="checked"<?php } ?>>

                Wenn es noch Anmerkungen dazu gibt, bitte gerne.

                Ich würde Dir raten, Dir gar nicht erst diese Art von Notation anzugewöhnen; sie ist extrem unübersichtlich und ergibt eine nicht wirklich logische Struktur. Schreibe stattdessen besser:

                <input type="radio" name="anrede" id="anrede_frau" value="Frau"<?php  
                  if(isset($_POST['anrede']) && $_POST['anrede']=='Frau') echo ' checked="checked"'; ?>>
                

                Oder noch besser: setze dafür eine Funktion ein - dann wird's noch übersichtlicher.

                freundliche Grüße
                Ingo

                1. Schreibe stattdessen besser:

                  <input type="radio" name="anrede" id="anrede_frau" value="Frau"<?php

                  if(isset($_POST['anrede']) && $_POST['anrede']=='Frau') echo ' checked="checked"'; ?>>

                  
                  > Oder noch besser: setze dafür eine [Funktion](http://www.1ngo.de/web/formmailer.html#Sonderfall) ein - dann wird's noch übersichtlicher.  
                    
                  Danke Ingo und auch vaudi,  
                    
                  habe jetzt den obigen code verwendet, der ja auch ein Leerzeichen weniger hat. Jetzt bin ich erstmal froh, daß alles geht; mit dem Einbau einer Funktion werde ich mich später befassen.  
                    
                  Vielen Dank und Gruß,  
                  m.mietke
                  
      2. Hi!

        Du hast als Thema php angegeben, du hast geschrieben, das das Formular mit den Benutzereingaben (ausser den checkboxen) wieder aufgerufen wird. Ergo schliesse ich auf eine Art Affenformular, in dem das Formular nach Submit wieder dargestellt wird, wenn etwas nicht stimmt.

        Also: giev php code plz.

        Aber im Grunde laeufts auf sowas hinaus: 'wenn variable fuer checkbox = true dann echo checked'

        --
        Trau Dich!
         
        1. Also: giev php code plz.

          Aber im Grunde laeufts auf sowas hinaus: 'wenn variable fuer checkbox = true dann echo checked'

          Danke für die Nachricht, aber was bedeutet das: giev php code plz.?
          Was muß ich in die Datei schreiben?

          Gruß,
          m.mietke