Ankündigung

Einklappen
Keine Ankündigung bisher.

Checkbox Tutorial - Auswahl soll bestehen bleiben

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

  • Checkbox Tutorial - Auswahl soll bestehen bleiben

    Hallo,
    ich habe folgendes "Checkbox" Tutorial mir angesehen, allerdings möchte ich nach dem Betätigen des Buttons, dass die Checkboxen, die ausgewählt wurden weiterhin aktiv sind.

    Was muss ich dafür ändern?


  • #2
    Wenn ich das richtig verstehe ist der Usecase wie folgt:
    • Du hast ein Form mit mehreren Checkboxen und einem Submit
    • Du wählst Boxen aus und sendest das Formular
    • Danach sollen die Daten, die durch das Formular gesandt wurden erneut auf das Formular angewandt werden.
    Kommt das hin? Ich verstehe nicht ganz was du dadurch erreichen möchtest.
    Wenn du die PHP Daten in das Form einbauen willst, wirst du entweder das Form durch PHP erstellen müssen (also den HTML-Code in einen String packen und dann mit echo ausgeben) oder eine Template-Engine nutzen, die Variablen in einer Vorlage (also hier deinem HTML-Formular) ersetzt.

    Kommentar


    • #3
      Zitat von sunshineh Beitrag anzeigen
      Hallo,
      ich habe folgendes "Checkbox" Tutorial mir angesehen, allerdings möchte ich nach dem Betätigen des Buttons, dass die Checkboxen, die ausgewählt wurden weiterhin aktiv sind.

      Was muss ich dafür ändern?
      https://php-de.github.io/jumpto/affenformular/


      Sorry, Links ohne Erklärung sind ja "no go".
      Also:
      Ich kann nicht wissen was es zu ändern gibt, da Du nicht auch nur den Ansatz Deines versuches in Form von Programm Code geposted hast.
      Auch nach 35 Beiträgen ist Dir wohl noch nicht die Wissensammlung aufgefallen, welche sich auch damit beschäftigt.
      Oben ein Link dazu

      Kommentar


      • #4
        Danke für die Rückmeldungen:
        Meine Tabelle sieht wie folgt aus:

        <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
        <p>
        <input type="checkbox" name="formAlert[]" value="SMS" />SMS<br />
        <input type="checkbox" name="formAlert[]" checked="False" value="E-Mail" />E-Mail<br />
        <input type="checkbox" name="formAlert[]" checked="True" value="MQTT" />MQTT<br />
        <input type="checkbox" name="formAlert[]" checked="False" value="Sound" />Sound<br />
        </p>
        <input type="submit" name="formSubmit" value="Bestätigen" />
        </form>

        Und die dazugehörige SQLite DB so
        SMS 0/1
        E-Mail 0/1
        MQTT 0/1
        Sound 0/1

        Nur möchte ich gerne die Datenbank zuerst auslesen und die Checkboxen entsprechend anzeigen lassen.
        Ich dachte erst, ich erzeuge mir 4 Variablen und weise denen den Wert 0/1 zu. Dann wollte ich mit Hilfe einer if - else Abfrage die Zeile entsprechend anzeigen lassen. Doch irgendwie klappt das nicht.

        Kommentar


        • #5
          Nun die Einträge aus der DB zu holen ist der erste Schritt. Dann solltest du überprüfen welcher Wert existiert (1/0) und dann mit PHP im Input "checked" oder "" setzen. Probier das mal uns sende sonst den Code. Weil aktuell ist das Form hardcoded.

          Btw. du kannst auch HTML-Tags im Editor verwenden. Dann liest es sich besser.

          Kommentar


          • #6
            Also ich hab ja schon etwas rumprobiert und bin nun soweit, dass ich mir auf der Seite oben die Tabelle wie folgt anzeigen kann und darunter die Elemente mit den Checkboxen. Nur krieg ich die Verbindung von beidem noch nicht hin:
            PHP-Code:
              echo "<table border="1">\n";
              while($row=$result->fetchArray(SQLITE3_ASSOC))
              {
                echo "<tr>";
                foreach ($row as $item) 
                    echo "<td>$item</td>";
                echo "</tr>\n";
              }
              echo "</table>\n";
              $dbConfig->close();
            ?>

            <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
                    <p>
                            <input type="checkbox" name="formAlert[]" value="SMS" />SMS<br />
                            <input type="checkbox" name="formAlert[]" checked="False" value="E-Mail" />E-Mail<br />
                            <input type="checkbox" name="formAlert[]" checked="True" value="MQTT" />MQTT<br />
                            <input type="checkbox" name="formAlert[]" checked="False" value="Sound" />Sound<br />
                    </p>
                    <input type="submit" name="formSubmit" value="Bestätigen" />
            </form>

            Kommentar


            • #7
              Warum baust du dir die Checkboxen nicht dynamisch zusammen, du hast doch eh den foreach loop, wenn die Daten aus der DB kommen?

              Mir ist das zuviel HTML-PHP-Gemenge mit dem echo-Befehl.

              Und PHP_SELF ist böse (CrossSiteScripting/XSS)

              EDIT:

              HTML-Code:
              <input type="checkbox" name="formAlert[]" checked /> Checked Box
              Bei nicht gecheckten CB kannst du einfach das "checked" weglassen.

              Kommentar


              • #8
                Genau. Einfach den Loop mit dem Form kombinieren und am Ende sowohl Table als auch Form ausgeben.

                Kommentar


                • #9
                  Das hab ich mir schon gedacht, aber ich komm nicht drauf, wie...
                  Wie kann ich mir z.B. den Inhalt von der row-Variable (da stecken ja die einzelnen Zellen drin) anschauen

                  PHP-Code:
                  while($row=$result->fetchArray(SQLITE3_ASSOC))
                  {
                     
                  wie kann ich nun die row Variable mir ausgeben lassen???

                  Kommentar


                  • #10
                    PHP-Code:
                    echo $row['mydata']; 
                    Du bekommst von deiner DB-Abfrage ein assoziatives Array zurück.

                    Kommentar


                    • #11
                      Schau dir dann nochmal an wie du deine Tabelle generierst und überlege dir wie du auf ähnliche Weise, mit dem Wissen von Miss Santrop, das Form generieren kannst.

                      Kommentar


                      • #12
                        Zitat von sunshineh Beitrag anzeigen
                        Das hab ich mir schon gedacht, aber ich komm nicht drauf, wie...
                        Wie kann ich mir z.B. den Inhalt von der row-Variable (da stecken ja die einzelnen Zellen drin) anschauen.

                        PHP-Code:
                        while($row=$result->fetchArray(SQLITE3_ASSOC))
                        {
                        wie kann ich nun die row Variable mir ausgeben lassen???

                        Es gibt in der Wissenssammlung (#3 verlinkt) auch ein Abschnitt über Vorbelegung und und unter debugging Tips zur Ausgabe ( https://php-de.github.io/jumpto/leitfaden/#tipps ).
                        Der array Zugriff wird zwar nicht explizit erklärt, jedoch sowohl bei PDO als auch bei StandartImpementeirungen genutzt.

                        Kommentar


                        • #13
                          Mit einem dynamisch generierten Array wie das hier
                          PHP-Code:
                          <input type="checkbox" name="formAlert[]" value="SMS" />SMS<br /> 
                          wird das nichts. Warum?
                          Checkboxen haben die unangenehme Eigenschaft, nur bei einer Auswahl im Post Array zu erscheinen. Du must im Namen deshalb einen festen Index einbauen, um im Post dann den Wert richtig identifizieren zu können.

                          PHP-Code:
                          <input type="checkbox" name="formAlert[0]" value="SMS" />SMS<br /> 
                          Um das zu verstehen gehe mal auf diesen Test, setze in der Tabelle mit der Zeilennummer 143 eine Checkbox, betätige "Send Elements as POST" und schau dir im POST-Array an, was unter dem Key "chk" steht.
                          In der Zeile 148 ist ein Beispiel Checkboxen mit festen Index im Namen zu sehen, das du auch probieren kannst. Dort kann eine Identifizerung der Checkbox erfolgen und die Checkboxen können auch wieder gesetzt werden wenn diese vorher angeklickt waren.
                          Ich habe gute Erfahrungen mit dem dynamischen Erstellen von HTML-Elementen gemacht. Die Methoden der Klasse im Test liefern fertige Elemente als HTML die dann ganz nach belieben platziert werden können.
                          PHP-Klassen auf github

                          Kommentar


                          • #14
                            Danke, die Anzeige geht auch ohne Index bei mir. Allerdings weiß ich nicht, wie ich den Wert von der Variable mit der php Ausgabe richtig konfiguriere.

                            Bislang ist es so:
                            HTML-Code:
                              $sms = 0;
                              $email = 0;
                              $mqtt = 0;
                              $sound = 0;
                            
                              echo "<table border="1">\n";
                              while($row=$result->fetchArray(SQLITE3_ASSOC))
                              {
                                echo "<tr>";
                                    if($row['ALERTtype']=="SMS")
                                            $sms = $row['Active'];
                                    if($row['ALERTtype']=="E-Mail")
                                            $email = $row['Active'];
                                    if($row['ALERTtype']=="MQTT")
                                            $mqtt = $row['Active'];
                                    if($row['ALERTtype']=="SOUND")
                                            $sound = $row['Active'];
                                echo "</tr>\n";
                              }
                              echo "</table>\n";
                              $dbConfig->close();
                            
                            ?>
                            <h2>Benachrichtigungsmethode wählen</h2>
                            
                            <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
                                    <p>
                                            <input type="checkbox" name="formAlert[]" value="SMS" />SMS<br />       
                                            <input type="checkbox" name="formAlert[]" value="E-Mail" />E-Mail<br />
                                            <input type="checkbox" name="formAlert[]" checked value="MQTT" />MQTT<br />
                                            <input type="checkbox" name="formAlert[]" checked value="Sound" />Sound<br />
                                    </p>
                                    <input type="submit" name="formSubmit" value="Bestätigen" />
                            Ich habe schon folgendes bei der Ausgabe der Checkboxen versucht
                            PHP-Code:
                            <?php if($sms ==1): ?>
                            <input type...

                            Aber mir kommt dass alles ziemlich verfahren und kompliziert vor, das müsste doch viel einfacher gehen, oder... außerdem funktioniert es so auch nicht.
                            Dynamisch muss eigentlich nicht sein, da es nur 4 Elemente sind.

                            Kommentar


                            • #15
                              Also wenn ich das richtig sehe, wird dein Output der Tabelle so aussehen:
                              HTML-Code:
                              <table border="1">
                                  <tr>
                                  </tr>
                              </table>
                              Du setzt nur die Variablen, gibst aber in der Tabelle nichts aus.

                              Wenn ich ein Objekt dynamisch generiere, mache ich eigentlich immer folgendes:
                              PHP-Code:
                              $r ""//hier alles hinzufügen, was vorher angezeigt werden muss, wrapper z.B.
                              foreach($array as $val){
                                  
                              $r .= "<div class='item'>Hello World!".($val['foo']?" bar":"")."</div>";
                                  
                              //Hier wird das item hinzugefügt je nach val unterschiedlich
                              }
                              $r.=""//hier alles hinzufügen, was hinterher angezeigt werden muss, endtags von wrappern z.B.
                              return $r//oder echo oder was auch immer man benötigt 
                              Hilft dir das ein wenig? Versuch damit mal dein Form umzubauen.
                              Wenn du nicht weiterkommst, überleg dir kleinschrittig wie du jedes Input aufbauen willst. Also welche Teile fest sind, welche dynamisch, wovon die Teile abhängen und schreib damit deinen Code

                              P.S. Die Tabelle bringt es so wirklich nicht

                              Kommentar

                              Lädt...
                              X