Einträge verschieben

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

  • Einträge verschieben

    Hallo,

    ich habe eine Liste mit Einträgen, deren Reihenfolge man verändern kann, in dem man die Einträge jeweils nach oben und nach unten verschieben kann. Leider klappt das nicht so ganz, wie ich mir das vorgestellt habe.

    Sobald man auf den Button "Eintrag nach oben schieben" klickt, wird das Feld 'nr' der aktuellen Zeile übergeben, das für die Reihenfolge der Einträge zuständig ist.
    PHP-Code:
    if($move=="up"){
    $sql_up "SELECT nr from rbf_texte WHERE nr<'$nr' ORDER by nr DESC LIMIT 1";
    $res_up mysql_query($sql_up);
    while (
    $row_up mysql_fetch_row ($res_up)) {
    $nr2 $row_up[0];
    mysql_query("UPDATE rbf_texte SET nr='9999' WHERE nr='$nr'");
    mysql_query("UPDATE rbf_texte SET nr='$nr' WHERE nr='$nr2'");
    mysql_query("UPDATE rbf_texte SET nr='$nr2' WHERE nr='9999'");
    }

    Leider passiert garnix. Ich bekomme nichtmal eine Fehlermeldung. Hat von euch jemand eine Ahnung woran's liegen könnte?

    Danke im Voraus,
    ChatJack

  • #2
    du musst wahrscheinlich noch -1 rechnen ...

    PHP-Code:
    $nr2 $row_up[0] - 1
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Hi,

      die Einträge sind nicht alle genau durchnummeriert, da hier und da auch mal ein Eintrag gelöscht wird und der neueste Eintrag immer die 'Nummer des letzten Eintrags' + 1 bekommt. Deshalb auch das austauschen.

      Beim Hochschieben soll er sich erst die nr, des vorherigen Eintrags krallen (deshalb vorher nochmal der SELECT) und dann mit der nr des aktuellen Eintrags austauschen.

      Das mit -1 hat leider nicht funktioniert.

      Trotzdem Danke.

      Gruß,
      Dennis Bohn

      Kommentar


      • #4
        ok.

        mache deine tabellenstruktur mal ganz anders.

        zuerst machst du ein feld ID. dies ist immer eindeutig. für die sortierung nimmst du ein anderes feld. z.b. SORT.

        das genannt trifft nur zu, wenn du die nr als einzige zuordnung verwendest, wenn ich dich richtig verstanden habe.

        eigentlich muss du alle werte der sortierung auslesen. wie willst du denn sonst erkennen, was davor oder danach ist? hinterher einen select zu machen, halte ich nicht vorteilhaft.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          hier mal noch ein beispiel von mir, wie ich eine sortierung gelöst habe.
          (das soll nur ne anregung sein)


          PHP-Code:

            
          /* ************************************************************************************* */
            
          function SortPage ($Id) {
              global 
          $PHP_SELF;
              
          $sortpage.= "<form action=\"$PHP_SELF\" name=\"\" method=\"get\">\n";
              
          $sortpage.= "<input type=\"hidden\" name=\"cmd\" value=\"sortsave\">\n";
              
          $sortpage.= "<input type=\"hidden\" name=\"SortId\" value=\"$Id\">\n";
              
          $sortpage.= "<input type=\"hidden\" name=\"id\" value=\"$Id\">\n";
              
          $sortpage.= "  <p class=\"groupbox\">\n";
              
          $sortpage.= "    Bitte eine neue Sortierung in das erste Feld eingeben.<br><br>\n";

              
          $result mysql_query("SELECT Id,Sort,Name,PageHeader FROM AllPages WHERE UpperId = '".GetTopFolderFromId($Id)."' ORDER BY Sort");
              while (
          $zeile mysql_fetch_array($result)) {
                
          // $sortpage.= "     ". $zeile["Id"] . "\n";
                
          $sortpage.= "     <input type=\"text\" name=\"SortIds[".$zeile["Id"]."]\" value=\"".$zeile["Sort"]."\" size=\"5\"> &nbsp; "$zeile["Name"] . "<br>\n";
              }
              
          $sortpage.= "    <br>\n";
              
          $sortpage.= "    <input type=\"submit\" name=\"\" value=\" speichern \">\n";
              
          $sortpage.= "  </p>\n";
              
          $sortpage.= "</form>\n";
              return 
          $sortpage;
            }



          /***************************************************************************************/
          /***************************************************************************************/
          /***************************************************************************************/
          /***************************************************************************************/

          hauptscript zum speichern

              
          case "sortsave" : if ($adminmodus) {
                                  while (list (
          $key$val) = each ($SortIds)) {
                                    
          $val = (ereg("^([0-9]+)$",$val)) ? "'".$val."'" "NULL" ;
                                    
          // echo "$key => $val<br />\n";
                                    
          $result mysql_query"UPDATE AllPages SET Sort = ".$val." WHERE Id = '".$key."'" );
                                    echo 
          mysql_error();
                                  }
                                }
                                
          header ("Location: ".$PHP_SELF."?id=".$id);
                                break; 
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Mom, jetzt komm ich nicht ganz mit. Bin im Grunde noch ein PHP- & MySQL-Newbie und kenne ein paar Befehle die du benutzt noch garnicht.

            PHP-Code:
            if($move=="up"){

            // Krall dir von allen Einträgen, die kleiner als $nr sind, den ersten, beginnend mit dem größten, zeige davon nur 1 an
            $sql_up "SELECT nr from rbf_texte WHERE nr<'$nr' ORDER by nr DESC LIMIT 1";

            $res_up mysql_query($sql_up);
            while (
            $row_up mysql_fetch_row ($res_up)) {

            $nr2 $row_up[0];

            // Gebe temporär der Zeile mit $nr den Wert 9999
            mysql_query("UPDATE rbf_texte SET nr='9999' WHERE nr='$nr'");

            // Tausche die Zeile mit $nr2 durch die nächstgrößere Zahl aus
            mysql_query("UPDATE rbf_texte SET nr='$nr' WHERE nr='$nr2'");

            // Gib der temporären Zeile den Wert der nächstkleineren Zahl zu $nr
            mysql_query("UPDATE rbf_texte SET nr='$nr2' WHERE nr='9999'");
            }

            Das müsste doch eigentlich funktionieren. Hab immernoch nicht ganz begriffen, wo jetzt genau der Fehler steckt.
            Zuletzt geändert von ChatJack; 27.12.2002, 13:23.

            Kommentar


            • #7
              in welcher abfolge sind denn deine werte vorhanden.

              wenn du schon zwei aufeinanderfolgende werte hast, was passiert dann?

              ich komme ehrlich gesagt nciht mehr mit...
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                So

                Aha, jetzt hab ich den Fehler gefunden, irgendwie hat der immer nach der falschen nr, nämlich der nr+1 gesucht, da die variabel irgendwie der in die quere kam, die zum hinzufügen eines neuen Eintrages benötigt wurden. Jaja, diese Newbies.

                Jetzt klappt alles wunderbar.

                Vielen Dank für die Hilfe, habe auf deinen Rat noch eine kleine Verbesserung eingebaut.

                PHP-Code:
                if($move=="up"){
                $sql_up "SELECT text_id, nr from rbf_texte WHERE nr<'$nr' ORDER by nr DESC LIMIT 1";
                $res_up mysql_query($sql_up);
                while (
                $row_up mysql_fetch_row ($res_up)) {
                $text_id2 $row_up[0];
                $nr2 $row_up[1];
                mysql_query("UPDATE rbf_texte SET nr='$nr2' WHERE text_id='$text_id'");
                mysql_query("UPDATE rbf_texte SET nr='$nr' WHERE text_id='$text_id2'");
                }
                }
                if(
                $move=="down"){
                $sql_down "SELECT text_id, nr from rbf_texte WHERE nr>'$nr' ORDER by nr LIMIT 1";
                $res_down mysql_query($sql_down);
                while (
                $row_down mysql_fetch_row ($res_down)) {
                $text_id2 $row_down[0];
                $nr2 $row_down[1];
                mysql_query("UPDATE rbf_texte SET nr='$nr' WHERE text_id='$text_id2'");
                mysql_query("UPDATE rbf_texte SET nr='$nr2' WHERE text_id='$text_id'");
                }

                Vielen Dank nochmal,

                Gruß,
                ChatJack
                Zuletzt geändert von ChatJack; 27.12.2002, 13:59.

                Kommentar


                • #9
                  oki
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar

                  Lädt...
                  X