Ankündigung

Einklappen
Keine Ankündigung bisher.

Formular checkbox und <option>Liste1</option> nach senden nicht leeren...

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Formular checkbox und <option>Liste1</option> nach senden nicht leeren...

    Hallo zusammen,

    ich hänge mal wieder fest und habe sämliche Beiträge wie Affenformular durchforstet. Ich möchte gern nach dem senden in die Datenbank eingetragen und die checkbox und Listenfelder nicht wieder resetet werden.

    Bei einem Textfeld habe ich es bereits so gelößt.
    PHP-Code:
     <p><input type="text" name="IDNR"  value="<?php echo $_POST['IDNR']; ?>" />Test
    Leider klappt das nicht bei der checkbox und bei einem Listenfeld.
    PHP-Code:
    <p><input id="Kategorie1" type="checkbox" name="Kategorie1"  value="<?php echo $_POST['IDNR']; ?>" /> Test1
    <p><input id="Kategorie2" type="checkbox" name="Kategorie2"  value="<?php echo $_POST['IDNR']; ?>" /> Test2
    Wer kann mir hier dazu bitte helfen?

    Beste Grüße aus Gera

  • #2
    Wenn eine checkbox angewählt sein soll zu Beginn muss sie das Attribut checked haben:

    https://developer.mozilla.org/de/doc...Input/checkbox

    Da ich nicht weiss unter welchen Umständen du welche Checkbox getickt haben willst kann ich Dir das nicht deifinitiv sagen.

    Aber vielleicht so (ungetestet):

    PHP-Code:
    <p><input id="Kategorie1" type="checkbox" name="Kategorie1"<?= ($_POST['IDNR'] === 'Kategorie1') ? ' checked' ''?>/> Test1</p>
    <p><input id="Kategorie2" type="checkbox" name="Kategorie2"<?= ($_POST['IDNR'] === 'Kategorie2') ? ' checked' ''?>/> Test2</p>

    Kommentar


    • #3
      PHP-Code:
       <p><input type="text" name="IDNR"  value="<?php echo $_POST['IDNR']; ?>" />Test
      Du solltest Werte die von einem Formular und somit von aussen kommen immer vorher validieren und nicht ungeprüft übernehmen. Wenn IDNR zudem eine Zahl ist dann ist type="text" eh falsch gewählt.
      Zudem beachtest du den Kontextwechsel von PHP zu HTML nicht.

      Nimm statt echo die Variante die jonas3344 verwendet, siehe https://www.php.net/manual/de/function.echo.php

      Kommentar


      • #4
        Bei den Checkboxen gibt es noch einiges zu beachten.
        1. Checkboxen werden nur vom Browser gesendet wenn diese ausgewählt sind. Im Klartext: Im $_POST existiert kein Schlüssel der Checkbox wenn diese nicht aktiviert ist.
        2. Der Name taucht als Schlüssel im POST auf wenn die Box aktiviert ist. Ein $_POST['IDNR'] im Konstrukt für ein Element mit den Namen Kategorie1 macht keinen Sinn.
        3. Grundsätzlich ist zu prüfen ob der Schlüssel existiert (Gilt allgemein) Vor dem Absenden des Formulars ist das $_POST-Array in der Regel leer.
        Komplizierter wird es noch wenn das Element beim Erstaufruf als "checked" gezeigt werden soll.

        Wolfsblut76 Wenn ich mir deine Überschrift anschaue dann solltest du bevor du mit PHP beginnst dir die Unterschiede zwischen select, checkbox und radio klar machen (HTML-Grundlagen Formularverarbeitung).

        Die Checkbox betreffend solltest du mit den folgenden kleinen Test ein wenig experimentieren. Wichtig fürs Verständnis ist immer den Inhalt von $_POST vor den Augen zu haben.

        PHP-Code:
        <?php
          
        echo '<pre>';
          
        var_export($_POST);
          echo 
        '</pre>';
        ?>
        <form method="POST">
        <p><input id="Kategorie1" type="checkbox" name="Kategorie1"<?= isset($_POST['Kategorie1'])  ? ' checked' ''?>/> Test1</p>
        <input type="submit" value="Send">
        </form>

        Kommentar


        • #5
          Jonas Checkbox Ansatz mit Attribut brachte leider kein Erfolg. Auch hier wurden beim senden alles wieder gelöscht.

          jspit
          Das funktioniert soweite bei den Checkboxen und bringt mich wieder ein ganzes Stück weiter. Nur eine Frage habe ich noch. Kann man hier ein Value einbinden? Derzeit wir ein "on" in der db geschrieben.
          Cool ist auch zugleich, dass die Arry ersichtlich ist. Somit sieht jeder MA den ganzen Fall.

          WV.jpg

          Weiter besteht noch die Herausforderung für select.
          PHP-Code:
          <fieldset style="width:760px;"><legend style="padding:10px 100; font-size:15px;">Liste:</legend>
            <
          label>Sonderliste:
              <
          select name="Sonderliste" size="1">
                <
          option>Sonderliste1</option>
                <
          option>Sonderliste2</option>
                <
          option>Sonderliste3</option>
                <
          option>Sonderliste4</option>
                <
          option>Sonderliste5</option>
                <
          option>Sonderliste6</option>
                <
          option>Sonderliste7</option>
              </
          select>
            </
          label

          Kommentar


          • #6
            Obiger Skript #4 ist ja auch nur für den eigene Tests und Experimente gedacht. Ein Value ist immer zu empfehlen. Vorzugsweise gleich der zugehörige Index. Das gilt auch für select.
            PHP-Code:
              <label>Autos:
                <
            select name="selcar" size="1">
                  <
            option value="1">Audi</option>
                  <
            option value="2">BMW</option>
                </
            select
            Hier gibt es selected um ein Element zu setzen. Steht aber alles in den Links vom Beitrag #4.

            Edit: Inlinestyles sind out. CSS gehört in extra Dateien.


            Kommentar


            • #7
              Anfängerfehler
              font-size:15px

              Schriftgrössen für Bildschirme nie in px angeben, sondern immer in em, rem oder %, siehe https://developer.mozilla.org/de/docs/Web/CSS/font-size

              Für Auswahllisten haben wir auch ein Beitrag in der Wissenssammlung, ebenso zu checkboxen: https://php-de.github.io/#form

              Kommentar


              • #8
                Danke jspit das mit Value hab ich noch hinbekommen .



                Für die Nachwelt gern die Umsetztung für checkbox nach submit nicht löschen.
                PHP-Code:

                <?php
                  
                echo '<pre>';
                  
                var_export($_POST);
                  echo 
                '</pre>';
                ?>



                <fieldset style="width:760px;"><legend style="padding:10px 100; font-size: medium;">Kategorie:</legend>
                     <p>
                <form method="POST">
                     <p><input id="Kategorie1" type="checkbox" value="Kategorie1" name="Kategorie1"<?= isset($_POST['Kategorie1'])  ? ' checked' 'Kategorie1'?> >Kategorie1
                        <input id="Kategorie2" type="checkbox" value="Kategorie2" name="Kategorie2"<?= isset($_POST['Kategorie2'])  ? ' checked' 'Kategorie2'?>/>Kategorie2
                        <input id="Kategorie3" type="checkbox" value="Kategorie3" name="Kategorie3"<?= isset($_POST['Kategorie3'])  ? ' checked' 'Kategorie3'?>/>Kategorie3
                        <input id="Kategorie4" type="checkbox" value="Kategorie4" name="Kategorie4"<?= isset($_POST['Kategorie4'])  ? ' checked' 'Kategorie4'?>/>Kategorie4
                        <input id="Kategorie5" type="checkbox" value="Kategorie5" name="Kategorie5"<?= isset($_POST['Kategorie5'])  ? ' checked' 'Kategorie5'?>/>Kategorie5</p>
                     <p><input id="Kategorie6" type="checkbox" value="Kategorie6" name="Kategorie6"<?= isset($_POST['Kategorie6'])  ? ' checked' 'Kategorie6'?>/>Kategorie6
                        <input id="Kategorie7" type="checkbox" value="Kategorie7" name="Kategorie7"<?= isset($_POST['Kategorie7'])  ? ' checked' 'Kategorie7'?>/>Kategorie7
                        <input id="Kategorie8" type="checkbox" value="Kategorie8" name="Kategorie8"<?= isset($_POST['Kategorie8'])  ? ' checked' 'Kategorie8'?>/>Kategorie8
                        <input id="Kategorie9" type="checkbox" value="Kategorie9" name="Kategorie9"<?= isset($_POST['Kategorie9'])  ? ' checked' 'Kategorie9'?>/>Kategorie9
                        <input id="Kategorie10" type="checkbox" value="Kategorie10" name="Kategorie10"<?= isset($_POST['Kategorie10'])  ? ' checked' 'Kategorie10'?>/>Kategorie10
                </fieldset>
                </div>

                Allerdings scheint das nicht für select zu funktionieren .


                PHP-Code:
                  <label>Sonderliste:
                    <select name="Sonderliste" size="1">
                      <option value=""> </option>
                      <option  <?= isset($_POST['Sonderliste'])  ? ' checked' 'Sonderliste'?> </option>    Sonderliste1
                      <option  <?= isset($_POST['Sonderliste'])  ? ' checked' 'Sonderliste'?> </option>    Sonderliste2
                      <option  <?= isset($_POST['Sonderliste'])  ? ' checked' 'Sonderliste'?> </option>    Sonderliste3
                    </select>
                  </label>

                  oder

                  <label>Sonderliste:
                  <select name="Sonderliste" size="1">
                       <option   name="Sonderliste1"<?= isset($_POST['Sonderliste1'])  ? ' checked' 'Sonderliste1'?> >Sonderliste1
                       <option   name="Sonderliste2"<?= isset($_POST['Sonderliste2'])  ? ' checked' 'Sonderliste2'?> >Sonderliste2
                  </option>
                  </select>

                protestix danke auch dir, nur leider ist in der Wissenssammlung nicht dieses Lösung zu finden.

                Kommentar


                • #9
                  Ehmm... du machst einfach irgendwas, ohne dich vorher zu informieren, und wunderst dich, warum es nicht funktioniert? Warum liest du nicht erstmal die Doku dazu, dann hättest du festegestellt, dass es bei einer Option nicht checked, sondern selected heißt:

                  https://developer.mozilla.org/en-US/...Element/option

                  Und bevor man PHP programmiert, kanns auch nicht schaden erstmal die HTML-Grundlagen zu lernen.

                  Kommentar


                  • #10
                    Sorry ich muss nochmal Nerven. Das ist so zielmich das letzte wo es hängt . Habt bitte etwas Verständniss für meine Fragen. Das sind nun mal keine normalen Formularfelder nach Standart zum nachlesen.


                    Nach submit wird leider immer noch nicht die gleiche Liste geladen. Ich rafs einfach nicht.

                    HTML-Code:
                      <label>Sonderliste:
                        <select name="Sonderliste" size="1">
                          <option   value="" name="Sonderliste"  > </option>
                          <option   value="Sonderliste1" name="Sonderliste" <?= isset($_POST['Sonderliste'])  ? 'selected' : ''; ?> > Sonderliste1 </option>
                          <option   value="Sonderliste2" name="Sonderliste" <?= isset($_POST['Sonderliste'])  ? 'selected' : ''; ?> > Sonderliste2 </option>
                          <option   value="Sonderliste3" name="Sonderliste" <?= isset($_POST['Sonderliste'])  ? 'selected' : ''; ?> > Sonderliste3 </option>
                      </select>
                      </label>

                    Kommentar


                    • #11
                      Wie kommst du auf die Idee, dass <option> ein name-Attribut hätte? Warum verlinke ich eigentlich die Doku dazu? Damit man sie ignoriert und nicht liest?

                      Und wenn du bei jeder Option ein isset($_POST['Sonderliste']) machst, sind dann alle Options gleichzeitig selektiert. Machst du dir eigentlich auch irgendwelche Gedanken dazu, was du da schreibst, oder würfelst du nur herum? Warum schaust du dir nicht erstmal an, was $_POST überhaupt enthält, bevor du irgendwas auf gut Glück programmierst?

                      Kommentar


                      • #12
                        Hallo hellbringer,
                        ich habe mir die Seite angeschaut, nur hier ist nichts zu finden, dass wenn nach einem submit, die gleiche Liste, die davor ausgewählt wird wieder kommt. Selected bedeutet, dass immer die gleiche Liste kommt. Das bringt mich aber nicht weiter.

                        Vielleicht anders erklärt. Ein Mitarbeiter arbeitet an 4 Listen. Erst die Liste 1 dann 2, 3 und 4. Wenn selected auf Liste 1 gesetzt ist, ist müsste er bei den anderen Listen immer wieder umstellen.




                        Kommentar


                        • #13
                          Das ist relevant:

                          selected If present, this Boolean attribute indicates that the option is initially selected. If the <option> element is the descendant of a <select> element whose multiple attribute is not set, only one single <option> of this <select> element may have the selected attribute.
                          Wenn du das Formular abschickst hat $_POST['Sonderliste'] den Wert (value) des ausgewählten Elements (<option>). Das heisst du musst bei jedem Option-Element prüfen ob $_POST['Sonerliste'] mit dem Wert (value) des Options-Element übereinstimmt und wenn dem so ist ' selected' ausgeben. In einem Select darf nur einmal selected vorkommen, du kannst das am Schluss überprüfen indem du den generierten Seitenquelltext anschaust.

                          Kommentar


                          • #14
                            So ich hab es endlich geschafft. Danke für eure Gedult.


                            Und für die Nachwelt gern die Lösung:

                            PHP-Code:
                            <label>Sonderliste:
                            <select size="1" name="Sonderliste" id="Sonderliste">
                              <option value=""  <?php echo isset($_POST['Sonderliste']) && empty($_POST['Sonderliste'])       ? 'selected="selected"' ''?>>Bitte wählen</option>
                              <option value="1" <?php echo isset($_POST['Sonderliste']) &&       $_POST['Sonderliste'] == '1' 'selected="selected"' ''?>>Eins</option>
                              <option value="2" <?php echo isset($_POST['Sonderliste']) &&       $_POST['Sonderliste'] == '2' 'selected="selected"' ''?>>Zwei</option>
                              <option value="3" <?php echo isset($_POST['Sonderliste']) &&       $_POST['Sonderliste'] == '3' 'selected="selected"' ''?>>Drei</option>
                            </select>
                              </label>


                            Kommentar

                            Lädt...
                            X