Ankündigung

Einklappen
Keine Ankündigung bisher.

Checkliste zum Abhaken

Einklappen

Neue Werbung 2019

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

  • Checkliste zum Abhaken

    Hallo PHP-Freunde, ich habe mich vorher noch in keinem Forum angemeldet, daher entschuldigt bitte kleine Fehler

    Was ich eigentlich machen will:

    Ich bin dabei mir eine "ToDoListe" zu programmieren. (HTML/CSS/JS/PHP/MYSQL)
    Diese ist so aufgebaut, dass man auf einen Button klicken kann, z.B.: "Neuer Eintrag", und man bekommt ein kleines Formular mit verschiedenen Settings, diese sind jetzt aber nicht weiter wichtig. Wenn man dann seinen Eintrag fertig hat, schickt man ihn ab. Er wird in die MySQL Datenbank gespeichert und auch in der Liste angezeigt.
    Soweit so gut.

    Jetzt soll neben jedem Eintrag eine Checkbox stehen, die Standard-mäßig auf 0 (unchecked) steht. In der Datenbank steht auch bei der Checkbox " 0 ".
    So das wenn ich auf die Seite gehe, mir die Checkbox als unchecked angezeigt wird.

    Wenn ich jetzt auf die Checkbox klicke, soll ein häckchen da rein und der Wert " 1 " in die Datenbank geschrieben werden.
    (Beim Seitenaufbau wird geprüft ob eine 1 bzw eine 0 als Checkbox-Wert in der DB steht. Bei 1 wird sie gechecked und bei 0 unchecked)

    Zu meinem Problem:
    Da die Checkbox(en) mit dem Eintrag quasi generiert werden, ich ihnen also keinen festen Namen (für das $_POST['name']) geben kann, habe ich mir überlegt, einfach die ID (Zur Sortierung) aus der Datenbank als Name zu vergeben. Das Funktioniert auch...
    Aber wie kann ich jetzt in meinem PHP-Script mit POST arbeiten? Ich habe ja keine festen Namen für die Checkbox(en).

    Ich hoffe der ein oder andere versteht mein Problem. Verdammt schwer zu erklären.

  • #2
    http://backbonejs.org/examples/todos/ sowas?

    Kommentar


    • #3
      PHP-Code:
      <input type="checkbox" name="checkbox[<?= $someId ?>]">
      <?php
      var_dump
      ($_POST['checkbox']);
      ?>
      Falsches Unterforum.
      [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
      [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

      Kommentar


      • #4
        (Beim Seitenaufbau wird geprüft ob eine 1 bzw eine 0 als Checkbox-Wert in der DB steht. Bei 1 wird sie gechecked und bei 0 unchecked)
        Eine Checkbox wird nur übermittelt, wenn diese gechecked ist. Du mußt also bspw. mit isset arbeiten.

        Was die Namen der Checkboxen angeht, kannst Du ein Präfix + die ID des Datensatzes verwenden, alternativ auch als Array.

        Beispiel ( ohne checked/unchecked Prüfung )
        PHP-Code:
        // mit Präfix
        $sCheckboxName 'foobar' $iDataSetIdFromDatabase;
        echo 
        '<input type="checkbox" name="' $sCheckboxName '" />';

        // array
        echo '<input type="checkbox" name="foobar[' $iDataSetIdFromDatabase ']" />'

        EDIT: ...VPh war schneller
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          Genau sowas!

          @ VPh & Arne Drews
          Sorry wegen dem falschen Unterforum.

          Mit isset arbeite ich dabei. Wenn keine Checkbox gesetzt ist, bzw sie nicht übermittelt wird, wird ihr von meinem Script der Wert 0 zugewiesen.

          Mit dem Präfix + ID, genau so mache ich das auch.
          Nur wenn ich jetzt das Formular absende, also mein PHP-Script aufrufe, dann muss ich ja i-wie an die Namen der Checkboxen rankommen.
          ( Mit $_POST brauche ich ja schließlich den Namen )

          Mir fällt gerade ein, das man ja jede Checkbox abrufen könnte die in der DB steht und diese dann mit den Eintrags-ID's vergleicht. Müsste ich mich noch mal mit beschäftigen. (Oder denke ich hier völlig falsch?)

          Kommentar


          • #6
            Zeig mal Code wie du es denn aktuell machst, ich seh das Problem nicht.

            Mir fällt gerade ein, das man ja jede Checkbox abrufen könnte die in der DB steht und diese dann mit den Eintrags-ID's vergleicht.
            Und dazu mal Pseudocode / genauer erklären was du meinst.
            [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
            [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

            Kommentar


            • #7
              Ggf. mit AJAX arbeiten, denke dann tritt das Problem nicht auf, wenn ich das Konzept richtig verstanden habe.

              Kommentar


              • #8
                Zitat von DarkShapeArts
                Nur wenn ich jetzt das Formular absende, also mein PHP-Script aufrufe, dann muss ich ja i-wie an die Namen der Checkboxen rankommen.
                ( Mit $_POST brauche ich ja schließlich den Namen )
                Zitat von Arne Drews
                PHP-Code:
                // mit Präfix
                $sCheckboxName 'foobar' $iDataSetIdFromDatabase;
                echo 
                '<input type="checkbox" name="' $sCheckboxName '" />'
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  Ich komme leider die Tage nicht dazu Code zu posten, da ich unterwegs bin.

                  Durch ein Präfix + die ID (z.B. die aus der Datenbank) kann ich meinen Checkboxen einen Namen zuweisen. So mache ich das auch.

                  Aber, da es ja quasi unendlich viele Checkboxen werden könnnen (wenn halt mehrere Einträge gepostet werden),
                  dann habe ich ja im PHP Script das Problem, dass ich nicht mit $_POST arbeiten kann.

                  Da ich dafür ja einen festgelegten "Name" brauche. Beispiel: $_POST['checkbox01'] -> (oder irre ich mich mit dem festen Namen?)

                  ------------------------------------
                  Datei 1:
                  Beinhaltet die Website mit der Liste und den Einträgen, mit den dazugehörigen Checkboxen. (wie gesagt, bei jedem neuen Eintrag ensteht ja auch eine neue Checkbox)

                  Datei 2:
                  Ist mein PHP Script, was aufgerufen wird, wenn man eine Checkbox anklickt ("anhakt" oder eben "unhakt").
                  Dieses Script soll dann bei dem entsprechenden Eintrag mit der angeklickten Checkbox den Checkbox-Wert in der Datenbank umschalten. (0 oder 1)

                  -------------------------------------
                  Das heißt für mich:
                  - vars sind in Datei 2 aus Datei 1 nicht verfügbar.
                  - $_POST kann ich nicht nutzen, da ich ja einen festen "Name" brauche (was unmöglich ist bei einer generierten checkbox)
                  -- ich bin bei weitem kein Profi, deswegen kommt es mir nur so vor. Es wird iwie möglich sein --

                  Ich werde sobald es mir möglich ist, den Code posten.

                  Kommentar


                  • #10
                    Nutz die Array-Variante von Arne, da hast du dann in PHP ein Array über das du iterieren kannst.
                    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                    Kommentar


                    • #11
                      Zitat von Arne Drews Beitrag anzeigen
                      Eine Checkbox wird nur übermittelt, wenn diese gechecked ist.
                      Hierzu gibt es einen kleinen Trick:
                      Code:
                      <input type="hidden" name="my_checkbox" value="0">
                      <input type="checkbox" name="my_checkbox" value="1">
                      In dieser Reihenfolge angewendet, wird für "my_checkbox" beim Posten die "0" geliefert, wenn die Checkbox nicht angehakt ist, und die "1" wenn sie es ist.
                      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                      Kommentar


                      • #12
                        Ok, kannte ich nicht... Werde ich wohl auch nie verwenden, aber nice to know, danke...
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Hi DarkShapeArts,

                          ohne Formular und Checkboxnamen . . .

                          PHP-Code:
                          <?php
                          session_start
                          ();
                          error_reporting (E_ALL); 
                          ini_set ('display_errors'true);
                          $conn = new PDO("mysql:host=localhost;dbname=test""guenni""guenni");
                          $query "select id, todo, erledigt from todo_liste order by todo";
                          $stmt $conn->prepare($query);
                          $stmt->execute();
                          ?>
                          <!DOCTYPE HTML>
                          <html>
                          <head>
                          <title>ToDo - Liste</title>
                          <script type="text/javascript">
                          <!--
                          document.getElementById("txtHint").innerHTML='';
                          function edit_todo(check_box) {
                             var new_value = 0;
                               if(check_box.value == 0){
                                new_value = 1;
                               }
                               document.getElementById(check_box.id).value=new_value;
                               if (window.XMLHttpRequest) {
                              // code for IE7+, Firefox, Chrome, Opera, Safari
                               xmlhttp=new XMLHttpRequest();
                             } else { // code for IE6, IE5
                               xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                             }
                             xmlhttp.onreadystatechange=function() {
                               if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                                 document.getElementById("txtHint").innerHTML = document.getElementById("li"+check_box.id).firstChild.nodeValue+" wurde geändert.";
                               }
                             }
                             //Scriptaufruf Parameter q=ID der Checkbox, v=neuer Wert
                               xmlhttp.open("GET","a1_edit_todo.php?q="+check_box.id+"&v="+new_value, true);
                             xmlhttp.send();
                          }
                          // -->
                          </script>
                          </head>
                          <body>
                          <h3>ToDo - Liste</h3>
                          <?php
                          $status 
                          = array("""checked");
                          while(
                          $todos $stmt->fetch()){
                           echo 
                          '<li id="li'.$todos['id'].'">'.$todos['todo'];
                           echo 
                          '  <input type="checkbox" id="'.$todos['id'].'"'.$status[$todos['erledigt']].' value="'.$todos['erledigt'].'" onclick="edit_todo(this)"></li>'
                          }
                          ?>
                          <p><div id="txtHint"></div></p>
                          </body>
                          </html>

                          . . . die Checkboxen werden über ihre IDs identifiziert.


                          Bei Klick auf einer Checkbox wird folg. Script ausgeführt:

                          PHP-Code:
                          <?php
                          session_start
                          ();
                          error_reporting (E_ALL); 
                          ini_set ('display_errors'true);
                          $conn = new PDO("mysql:host=localhost;dbname=test""guenni""guenni");
                          $id $_GET['q'];
                          $value $_GET['v'];

                          $query "update todo_liste set erledigt = ".$value." where id = ".$id;
                          $stmt $conn->prepare($query);
                          $stmt->execute();
                          Der Datensatz wird dann "im Hintergrund" aktualisiert.

                          Bei Fragen einfach fragen . . .

                          Gruß
                          Günni

                          Kommentar


                          • #14
                            Ok, kannte ich nicht... Werde ich wohl auch nie verwenden, aber nice to know, danke...
                            Sag niemals nie. In CMS (z.B. Wordpress) in denen Du u.U. nur auf die Formularerezugung (über Pseudomarkup) Einfluss hast, hast Du manchmal keine andere Möglichkeit. Habe den Trick letztens wieder angewendet, weil Wordpress zwar das Einschalten, aber nicht das Ausschalten der Checkbox verarbeitet hat.
                            [COLOR="#F5F5FF"]--[/COLOR]
                            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                            [COLOR="#F5F5FF"]
                            --[/COLOR]

                            Kommentar


                            • #15
                              Sollte man das nicht aber von einem CMS wie WordPress erwarten können?

                              Kommentar

                              Lädt...
                              X