Ankündigung

Einklappen
Keine Ankündigung bisher.

mehrdimensionales array inhalte tauschen

Einklappen

Neue Werbung 2019

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

  • mehrdimensionales array inhalte tauschen

    hallo
    ich hab ein mehrdimensionales array das so zustande kommt
    PHP-Code:
    $res =& $db->query("SELECT id, sortierung FROM tbl_felder");
      
    $feld $res->fetchAll(MDB2_FETCHMODE_ASSOC); 
    die ausgabe sieht so aus
    [0] => Array
    (
    [id] => 1
    [sortierung] => 1
    )

    [1] => Array
    (
    [id] => 2
    [sortierung] => 2
    )

    [2] => Array
    (
    [id] => 3
    [sortierung] => 3
    )

    [3] => Array
    (
    [id] => 4
    [sortierung] => 4
    )

    [4] => Array
    (
    [id] => 5
    [sortierung] => 5
    )

    [5] => Array
    (
    [id] => 6
    [sortierung] => 6
    )

    [6] => Array
    (
    [id] => 7
    [sortierung] => 7
    )

    [7] => Array
    (
    [id] => 8
    [sortierung] => 8
    )

    [8] => Array
    (
    [id] => 9
    [sortierung] => 9
    )

    [9] => Array
    (
    [id] => 10
    [sortierung] => 10
    )

    [10] => Array
    (
    [id] => 11
    [sortierung] => 11
    )

    [11] => Array
    (
    [id] => 12
    [sortierung] => 12
    )

    [12] => Array
    (
    [id] => 13
    [sortierung] => 13
    )

    [13] => Array
    (
    [id] => 14
    [sortierung] => 14
    )

    [14] => Array
    (
    [id] => 15
    [sortierung] => 15
    )

    [15] => Array
    (
    [id] => 16
    [sortierung] => 16
    )

    [16] => Array
    (
    [id] => 17
    [sortierung] => 17
    )

    [17] => Array
    (
    [id] => 18
    [sortierung] => 18
    )

    [18] => Array
    (
    [id] => 19
    [sortierung] => 19
    )

    [19] => Array
    (
    [id] => 20
    [sortierung] => 20
    )

    [20] => Array
    (
    [id] => 21
    [sortierung] => 21
    )

    [21] => Array
    (
    [id] => 22
    [sortierung] => 22
    )

    [22] => Array
    (
    [id] => 23
    [sortierung] => 23
    )

    [23] => Array
    (
    [id] => 25
    [sortierung] => 25
    )

    [24] => Array
    (
    [id] => 24
    [sortierung] => 24
    )

    [25] => Array
    (
    [id] => 26
    [sortierung] => 26
    )
    ich hab ein formular das mit die Felder aus gibt und da hinter gibt es 2 buttons.
    wenn ich auf den Button "Hoch" drück, soll die sortierung sich mit der sortierung von dem vorherigen tauschen. Bsp.: ich hab id=>23 sortierung=>23. wenn ich dann auf den button"Hoch"drück sollen sich die sortierung vin id=>22 und id=>23 tauschen, so dass dann id=>23 sortierung=>22 steht und id=>22 sortierung=>23.
    Und dies soll dann ich die db eingefügt werden
    Mfg Pidaman


  • #2
    Und wie sieht dein bisheriger Ansatz dazu aus?
    http://hallophp.de

    Kommentar


    • #3
      Warum postest DU das Array nicht, so, dass man es auch (schnell) lesen kann? Es wurden nicht umsonst Zeilenumbrüche und Leerzeichen erfunden... (Browserquelltext!)
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        ich hab keine ahnung wie ich das umsetzen soll -.-

        Kommentar


        • #5
          Na bei hoch ist der Partner „aktueller Schlüssel - 1“ und bei runter „aktueller Schlüssel + 1“. WO ist die Frage?
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            so hatte ich es ja vorher nur dann hab ich in der DB zwei mal die gleich Sortierung drin stehen -> id=>22 sortierung=>22 und id=>23 sortierung=>22.
            PHP-Code:
            if(isset($_POST['btnFeldup'])){ 
                
            $res =& $db->query("SELECT sortierung FROM tbl_felder WHERE id= $id");
                
            $uparray $res->fetchRow(MDB2_FETCHMODE_ASSOC);
                if(
            $uparray['sortierung'] !=0)
                  foreach(
            $uparray as &$up 
                  {
                    
            $up $up 1
                    
            print_r($uparray);  
                  } 
                 
            $db->query("UPDATE tbl_felder SET sortierung = $up WHERE id= $id");
                    
              } 
            so hatte ichs am anfang

            Kommentar


            • #7
              ok hat sich erledigt habs jetzt so gelöst
              PHP-Code:
              if(isset($_POST['btnFeldup'])){ 
                  
              $res =& $db->query("SELECT sortierung FROM tbl_felder WHERE id= $id");
                  
              $uparray $res->fetchRow(MDB2_FETCHMODE_ASSOC);
                  if(
              $uparray['sortierung'] !=0)
                    foreach(
              $uparray as &$up 
                    {
                      
              $up $up 1
                      
              print_r($uparray);  
                    } 
                   
              $db->query("UPDATE tbl_felder SET sortierung = $up WHERE id= $id");
                   
              $id1 $id -1;
                   
              $up1 $up +1
                   
              $db->query("UPDATE tbl_felder SET sortierung = $up1 WHERE id= $id1");   
                } 

              Kommentar


              • #8
                Das funktioniert genau einmal, sobald aber die id nicht mehr gleich der Position ist, bekommst du ungewollte Ergebnisse.

                Du darfst dich in deinem zweiten UPDATE also nicht auf id beziehen sondern auf sortierung.

                Nochmal edit: Du wirst allerdings ganz schnell Konsistenzprobleme bekommen, wenn z.B. Datensätze gelöscht werden. Setze diese Lösung also nur ein wenn du sicher sein kannst, dass die Datensätze immer mit fortlaufenden ids (und somit aller Werte von 1-n für "sortierung") existieren.
                @fschmengler - @fschmengler - @schmengler
                PHP Blog - Magento Entwicklung - CSS Ribbon Generator

                Kommentar


                • #9
                  hmm ok danke. Wie meinste das? Hatse vllt nen code beispiel?

                  Kommentar


                  • #10
                    Wenn ich das richtig sehe, dass $up am Ende der neue Wert des hochgesetzten Elements ist und $up1 der alte:

                    PHP-Code:
                         $db->query("UPDATE tbl_felder SET sortierung = $up1 WHERE sortierung = $up"); 
                    Ich empfehle das aber ausdrücklich nicht, siehe mein Nachtrag oben.
                    @fschmengler - @fschmengler - @schmengler
                    PHP Blog - Magento Entwicklung - CSS Ribbon Generator

                    Kommentar


                    • #11
                      Hier mal ein anderer Ansatz in Pseudo-Code (PHP musst du schon selbst draus machen):

                      Code:
                      hoch($id) {
                        $sort = sql_first("SELECT sort FROM tbl WHERE id = $id");
                        sql("UPDATE tbl SET sort = sort - 1 WHERE id = $id");
                        sql("UPDATE tbl SET sort = $sort WHERE sort < $sort ORDER BY sort DESC LIMIT 1");
                      }
                      @fschmengler - @fschmengler - @schmengler
                      PHP Blog - Magento Entwicklung - CSS Ribbon Generator

                      Kommentar


                      • #12
                        ok danke.

                        Edit:

                        Das funktioniert auch nich so richtig
                        PHP-Code:
                        if(isset($_POST['btnFeldup'])){ 
                            
                            
                        $sort $db->query("SELECT first(sortierung) FROM tbl_felder WHERE id = $id");
                            
                        $db->query("UPDATE tbl_felder SET sortierung = sortierung - 1 WHERE id = $id");
                            
                        $db->query("UPDATE tbl_felder SET sortierung = $sort WHERE sort < $sort ORDER BY sortierung ASC LIMIT 1");

                        ich hoff ma ich habs richtig gehabt ^^
                        Da es nach dem 3-4 klicken 2 oder mehrere Felder überspringt und nicht nur ein Feld nach oben rutscht

                        Kommentar


                        • #13
                          hat vllt noch wer ne idee die mir weiterhelfen könnte?

                          Kommentar


                          • #14
                            Zitat von pidaman Beitrag anzeigen
                            PHP-Code:
                                $sort $db->query("SELECT first(sortierung) FROM tbl_felder WHERE id = $id"); 
                            ich kenne dein $db-Objekt nicht aber das ist mit ziemlicher Sicherheit falsch oder gibt query() direkt einen Wert zurück? Eine MySQL-Funktion namens first ist mir auch nicht bekannt

                            Ersetze diese Zeile durch etwas, was dir wirklich in $sort die erste Spalte des ersten Ergebnisses setzt. Das könnte auch so aussehen:

                            PHP-Code:
                                $res $db->query("SELECT sortierung FROM tbl_felder WHERE id = $id");
                                
                            $row $db->fetchRow();
                                
                            $sort $row['sortierung']; 
                            @fschmengler - @fschmengler - @schmengler
                            PHP Blog - Magento Entwicklung - CSS Ribbon Generator

                            Kommentar


                            • #15
                              ich benutzt MDB2

                              PHP-Code:
                               // verbinden mit DB
                                
                              $db =& MDB2::connect($dsn);
                                if (
                              PEAR::isError($db)) {
                                    die(
                              $db->getMessage());
                                } 

                              Manual :: A feature overview

                              Kommentar

                              Lädt...
                              X