array in update funktion

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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); 

    Comment


    • #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

      Comment


      • #4
        Was klappt nicht?

        Comment


        • #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++;

          Comment


          • #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]

            Comment


            • #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.

              Last edited by tcpip; 26-06-2006, 22:39.

              Comment


              • #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]

                Comment


                • #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

                  Comment


                  • #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.

                    Comment


                    • #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]

                      Comment


                      • #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.

                        Comment


                        • #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!

                          Comment


                          • #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.

                            Comment

                            Working...
                            X