array in update funktion

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

  • array in update funktion

    PHP-Code:
    $fertigkeit $_POST['fert'];
    echo 
    "Ausgewählte Fertigkeiten: ";
    $a=1;
    for (
    $i=0$i<sizeof($fertigkeit); $i++)
    {
       echo 
    " - ";
       echo 
    $fertigkeit[$i];
       echo 
    " - ";
       
    $myquery.="UPDATE `speicher` SET `fert[$a]` = '".$fertigkeit[$i]."' WHERE `speicher_id` =0 LIMIT 1 ;";
       
    $eintragen=mysql_query($myquery);
       
    $a++;

    so das ist der heilige code ...
    geht das überhaupt das ich SET fert[] als array hochzähle?
    in der datanbank stehen fert1, fert2, fert3, ich hab natürlich keine
    lust das alles einzeln einzugeben
    da muss es doch ne möglichkeite geben oder?

  • #2
    Re: array in update funktion

    PHP-Code:
    for ($i=0$i<sizeof($fertigkeit); $i++) {
        
    $set[] = "fert$i='".mysql_real_escape_string($fertigkeit[$i])."'";
    }
    $query "UPDATE `speicher` SET ".implode(', '$set)." WHERE speicher_id=0 LIMIT 1";
    mysql_query($query); 

    Kommentar


    • #3
      ich weiß nicht was da was bei dir macht is zu spät als das ich mich da hinterklämen kann ... ich habs einfach mal kopiert und etwas geändert aber es tut leider nicht

      Kommentar


      • #4
        Was klappt nicht?

        Kommentar


        • #5
          er schreibt die ausgewählten fertigkeiten nicht in die tabelle
          er schreibt nur einmal eine 1 in die erste fertigkeit
          aber sonst tut er nix

          PHP-Code:
           $fertigkeit $_POST['fert'];
          echo 
          "Ausgewählte Fertigkeiten: ";
          $a=1;
          for (
          $i=0$i<sizeof($fertigkeit); $i++)
          {
             echo 
          " - ";
             echo 
          $fertigkeit[$i];
             echo 
          " - ";
             
          $set[] = "fert$a='".mysql_real_escape_string($fertigkeit[$i])."'";
             
          $myquery.="UPDATE `speicher` SET ".implode(', '$set)."  = '".$fertigkeit[$i]."' WHERE `speicher_id` =0 LIMIT 1 ;";
             
          $eintragen=mysql_query($myquery);
             
          $a++;

          Kommentar


          • #6
            Schonmal an testausgaben nachgedacht ?

            PHP-Code:
            $fertigkeit $_POST['fert'];
            var_dump($fertigkeit);

            // bzw. nach der for schleife

            var_dump($set); 
            Dann hättest du vielleicht verstanden, das du mit deinem (Einfach mal kopiert und geändert) den Sinn hinter onemorenerd's tip zerstört hast.

            PHP-Code:
            $set[] = "fert$a='".mysql_real_escape_string($fertigkeit[$i])."'";
               
            $myquery.="UPDATE `speicher` SET ".implode(', '$set)."  = '".$fertigkeit[$i]."' WHERE `speicher_id` =0 LIMIT 1 ;"
            $set[] = Bewirkt das hinzufügen von fertX='fertigkeit'
            implode(',',$set) baut das ganze in einen String um (mit komma getrennt) ...

            ERST die schleife und dann 1x query.

            p.s Nutz mal "or die(mysql_error())" hinter deinem Query.
            gruss Chris

            [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

            Kommentar


            • #7
              Ich würde noch $set=array() machen - es könnte sein, dass später mal die Variable $set vor diesem Codestück verwendet wird.

              Hier ein Vorschlag, der das vorhandene weiterführt: Nur der fert1=.. Teil darf in der Schleife aufgebaut werden. Hinweise: Am Schluss des querystrings ist kein Semikolon. Dann ist eine Testausgabe drin so wie ich es mache: Label, Fehler, $query, und das erst nach der query.

              PHP-Code:
              $fertigkeit $_POST['fert'];
              echo 
              "Ausgewählte Fertigkeiten: ";
              $a=1;
              $myquery="UPDATE `speicher` SET " ;
              for (
              $i=0$i<sizeof($fertigkeit); $i++)
              {
                 echo 
              " - ";
                 echo 
              $fertigkeit[$i];
                 echo 
              " - ";
                 if(
              $i>0$myquery.=',';    //EDIT NEUE ZEILE
                 
              $myquery.=" `fert$a` = '" $fertigkeit[$i].  "'";
                 
              $a++;
              }
              $myquery .="  WHERE `speicher_id` =0 LIMIT 1";
                 
              $eintragen=mysql_query($myquery);

              // Testausgabe:
                   
              echo "errror und myquery: "mysql_error() . $myquery
              EDIT:
              Den unten festgestellten Komma-Fehler mit der markierten zusätzlichen
              Programmzeile behoben, und einen Strichpunkt am Zeilenende ergänzt.

              Zuletzt geändert von tcpip; 26.06.2006, 22:39.

              Kommentar


              • #8
                Und was soll das geben ?

                Dein Vorschlag würde nur einen SQL fehler bringen.
                gruss Chris

                [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                Kommentar


                • #9
                  Original geschrieben von hhcm
                  Schonmal an testausgaben nachgedacht ?

                  PHP-Code:
                  $fertigkeit $_POST['fert'];
                  var_dump($fertigkeit);

                  // bzw. nach der for schleife

                  var_dump($set); 
                  Dann hättest du vielleicht verstanden, das du mit deinem (Einfach mal kopiert und geändert) den Sinn hinter onemorenerd's tip zerstört hast.

                  PHP-Code:
                  $set[] = "fert$a='".mysql_real_escape_string($fertigkeit[$i])."'";
                     
                  $myquery.="UPDATE `speicher` SET ".implode(', '$set)."  = '".$fertigkeit[$i]."' WHERE `speicher_id` =0 LIMIT 1 ;"
                  $set[] = Bewirkt das hinzufügen von fertX='fertigkeit'
                  implode(',',$set) baut das ganze in einen String um (mit komma getrennt) ...

                  ERST die schleife und dann 1x query.

                  p.s Nutz mal "or die(mysql_error())" hinter deinem Query.
                  ... danke =)
                  sry das ich solche gedankengänge noch nicht durchmache ... ich mach das ganze erst seit 2 wochen ... solche kleinen tips bringen da nicht viel ohne erklärung wenn ich das gewusst hätte wäre ich auf die lösung selbst gekommen

                  Kommentar


                  • #10
                    Original geschrieben von hhcm
                    Und was soll das geben ?

                    Dein Vorschlag würde nur einen SQL fehler bringen.
                    Das kann sein, dann habe ich noch Tippfehler drin. Ich werde es abends noch in
                    die Sandbox tun und korrigieren falls nötig.

                    Jedenfalls ist die Logik mit
                    fert$a anstatt fert[$a] richtig

                    und das Aufbauen des $sql mit den drei Teilen
                    $sql='UPDATE....SET'
                    Schleife $sql.= " fert$a='wert[$i]' "
                    $sql.= WHERE...
                    ist auch korrekte Logik.

                    Kommentar


                    • #11
                      Du hast einfach nur ein Problem mit einem fehlenden komma in deinem Code.

                      UPDATE `tabelle` SET a=b b=c

                      funktioniert nicht..
                      gruss Chris

                      [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                      Kommentar


                      • #12
                        Original geschrieben von hhcm
                        Du hast einfach nur ein Problem mit einem fehlenden komma in deinem Code.

                        UPDATE `tabelle` SET a=b b=c

                        funktioniert nicht..
                        Solche Dinge merke ich in solch komplexer Situation erst beim Testen, oder (wahrscheinlicher, so auch heute: )
                        im Schwimmbad. Ich bringe bald eine verbesserte Antwort und hoffe, dass majin
                        noch da sein wird.

                        Kommentar


                        • #13
                          In der verbesserten Variante kannst du zunächst mal $a in die Schleife reinziehen, denn nur da wird es verwendet:
                          PHP-Code:
                          for ($i=$a=0$i<sizeof($fertigkeit); $i++) {
                             
                          $myquery.=" `fert".(++$a)."` = '".$fertigkeit[$i]."'";

                          oder gleich ganz darauf verzichten, denn $i steigt genau so an, wie man es braucht:
                          PHP-Code:
                          for ($i=1$i<sizeof($fertigkeit); $i++) {
                             
                          $myquery.=" `fert$i` = '".$fertigkeit[$i-1]."'";

                          Allerdings bleibt das Problem mit dem Komma. Könnte man so lösen:
                          PHP-Code:
                          for ($i=1$i<sizeof($fertigkeit); $i++) {
                             
                          $myquery.=" `fert$i` = '".$fertigkeit[$i-1]."',";
                          }
                          $myquery substr($myquery0, -1); 
                          Vielleicht sogar schneller als mein Vorschlag da oben, aber der Code ist etwas "unschöner".

                          Und jetzt komme ich endlich mal zum eigentlichen Anlass dieses Beitrags: $fertigkeit ist nur ein Alias von $_POST['fert'], enthält anscheinend Strings und es ist nicht zu sehen, dass die Daten schon irgendwie geprüft wurden. Also mysql_real_escape_string() nicht vergessen!

                          Kommentar


                          • #14
                            ursprünglicher Code:
                            PHP-Code:
                            $fertigkeit $_POST['fert'];
                            echo 
                            "Ausgewählte Fertigkeiten: ";
                            $a=1;
                            for (
                            $i=0$i<sizeof($fertigkeit); $i++)
                            {
                               echo 
                            " - ";
                               echo 
                            $fertigkeit[$i];
                               echo 
                            " - ";
                               
                            $myquery.="UPDATE `speicher` SET `fert[$a]` = '".$fertigkeit[$i]."' 
                                  WHERE `speicher_id` =0 LIMIT 1 ;"
                            ;
                               
                            $eintragen=mysql_query($myquery);
                               
                            $a++;

                            funktionierender Code:
                            PHP-Code:
                            $fertigkeit $_POST['fert'];
                            echo 
                            "Ausgewählte Fertigkeiten: ";
                            $a=1;
                            for (
                            $i=0$i<sizeof($fertigkeit); $i++)
                            {
                               echo 
                            " - ";
                               echo 
                            $fertigkeit[$i];
                               echo 
                            " - ";
                               
                            $myquery="UPDATE `speicher` SET `fert$a` = '".$fertigkeit[$i]."' 
                                 WHERE `speicher_id` =0 LIMIT 1"
                            ;
                               
                            $eintragen=mysql_query($myquery);
                               
                            $a++;

                            Aenderungen nur:
                            $myquery= anstatt $myquery.=
                            fert$a anstatt fert[$a]
                            Strichpunkt in der query weg (kein Fehler).

                            Es gäbe noch einige Bemerkungen, welche z.T. schon gemacht wurden, aber die
                            ursprüngliche Frage kann man so lösen.

                            Kommentar

                            Lädt...
                            X