[PHP MySQL] Checkbox Wert in Array speichern und MySQL updaten

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

  • #16
    Problem: Von z. B. 5 Checkboxen im Formular kommen nur die an, die auch aktiviert sind (z. B. nur 2). Wenn man also die Post-Daten durchrattert, werden immer die ausgeschalteten fehlen. Dein Script kennt die Checkboxen aber und natürlich auch deren Bedeutung, denn es muss die Formulardaten ja auch verarbeiten.

    Lösung: Erstelle für jedes erwartete Checkbox-Feld eine Boolean-Variable mit dem Wert false. Wenn die Post-Variable für diese Checkbox gesetzt ist, ändere den Wert auf true. Gruppen von Checkboxen lassen sich ebenso mit Gruppen von Variablen abbilden – also mit Arrays.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #17
      Danke für deine Hilfe.

      Das übersteigt wohl aber gerade meinen php Horizont. ^^

      Du meinst bestimmt deine Erklärung mit isset.
      Aber hab leider überhaupt kein Plan, wo und wie ich das unterbringe.

      Gruß
      Ingo

      Kommentar


      • #18
        Ne ich bekomms einfach nicht hin.
        Es spuckt nie aus was ich möchte.
        Kannst mir nochmal unter die Arme greifen??

        Danke
        Gruß Ingo

        Kommentar


        • #19
          Versuch's mal mit
          HTML-Code:
          <input ... name="status[$id]" .../>
          dann hast du die korrekte Zuordnung über die ID, ansonsten verrutscht ja alles, weil eben nur die mitgeschickt werden, die angetickt sind:

          Code:
          id:     2, 3, 4, 10, 12
          status: 0, 1, 0,  0,  1
          ergibt den Request-Body
          Code:
          id[]=1&id[]=2&id[]=3&id[]=4&id[]=10&id[]=12&status[]=on&status[]=on
          ergibt in PHP
          PHP-Code:
          array(
              
          "id" => array(
                  
          => 2,
                  
          => 3,
                  
          => 4,
                  
          => 10,
                  
          => 12,
              ),
              
          "status" => array(
                  
          => "on"// statt 1 => "on"
                  
          => "on"  // statt 4 => "on"
              
          )

          Wenn du aber im Namen des Feldes die ID als Array-Index benutzt, kann das nicht passieren.
          Zuletzt geändert von AmicaNoctis; 28.06.2011, 12:10.
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #20
            Das sieht schon mal vielversprechender aus ^^.

            Hab den Code geändert in:

            PHP-Code:
                 echo "<td align=\"left\"><input type=\"hidden\" name=\"id[$id]\" readonly value=\"$id\" size=\"5\"/></td>";
                 echo 
            "<td align=\"center\"><b>SPIELTAG : </b><input type=\"text\" name=\"gameday[$id]\" readonly value=\"$gameday\" size=\"2\"/</td>";
                 echo 
            "<td align=\"left\"><input type=\"checkbox\" name=\"status[$id]\" value=\"$id\"/></td>"
            Das ergibt folgende Ausgabe:
            [IMG]http://www.****************-funbolzer.de/images/array_freigeben.gif[/IMG]

            Nur gibt er mit dem Folgeformular imme rnoch keine Spieltage frei:

            PHP-Code:
              $id $_POST["id"];
              
            $liga $_POST["liga"];
              
            $gameday $_POST["gameday"];
              
            $status $_POST["status"]; 
              
              
            print_r ($id);
              
            print_r ($status);
              
            print_r ($gameday);
              
              
              for(
            $i=0$i<count($id); $i++)
              {
              
            $sqlab_update mysql_query("UPDATE fmo_ligen_spieltage SET status = '1' WHERE id = '$status[$i]'") OR die(mysql_error()); 
            Irgendwo liegt der Hase noch begraben.

            Kommentar


            • #21
              print_r($status) sollte dir doch sehr schön zeigen, dass der Array-Schlüssel jeweils die ID ist, oder etwa nicht? Wie kommst du dann auf die Idee, du könntest dir auf einmal die Werte eines assoziativen Arrays mit so 'ner blöden for-Schleife rausholen, die einfach stur fortlaufende numerische Schlüssel erzeugt? Warum nimmst du nicht foreach, was viel bequemer über ein Array iteriert und dir sogar noch die richtigen Schlüssel mitliefert?

              Warum setzt du im SQL-Statement status auf 1 wenn die ID = 'on' ist? Das ergibt doch keinen Sinn. Sieh dir bitte nochmal ganz genau an, was print_r dir ausgibt, denk darüber nach, wie du das sinnvoll verwursten kannst und lass dir um Himmels Willen dein Statement mit echo ausgeben, bevor du es abschickst. [COLOR="Red"]EDIT[/COLOR]: Achso, weil der Wert wieder die ID ist. Naja, ich würde das ändern, sonst zieht man aufgrund dieser verwirrenden Zusammenhänge noch falsche Schlüsse. Lass bei den Checkboxen einfach das value-Attribut weg.

              Dann wäre noch die Sache mit SQL Injections, die du mit mysql_real_escape-string ohne viel Aufwand verhindern kannst.
              Zuletzt geändert von AmicaNoctis; 28.06.2011, 14:17.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #22
                Das hört sich gerade nach nem verdienten Granatenanschiß an ^^
                Hab ich wohl verdient, aber ich blick überhaupt nix mehr.

                Trotzdem für deine Geduld und Mühe.

                Vieleicht komme ich mit bischen Abstand auf den Trichter, wie du es meinst.

                Gruß
                Ingo

                Kommentar


                • #23
                  Nimm's nicht persönlich, ich meinte es nicht böse.

                  Das mit der Auszeit klingt sinnvoll.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar

                  Lädt...
                  X