[PHP5] Wert des darüberliegenden Feldes in einer While-Schleife

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

  • [PHP5] Wert des darüberliegenden Feldes in einer While-Schleife

    Hallo,

    ich lese aus einer Datenbank Werte mit einer While-Schleife aus:

    PHP-Code:
    $result mysql_query("SELECT * FROM $table WHERE user = '".$user."' ORDER BY sortpos");
    while (
    $data mysql_fetch_array($result)) 
    {   
    ....
    echo 
    $data['ID'];
    echo 
    $data['name'];
     
    .... 
    etc.


    Wie kann ich jetzt herausfinden, welche ID das vorhergehende bzw. das nachfolgende Feld hat, wo allerdings auch [FONT=courier new]user = '".$user."'[/FONT] der Fall ist?

    Thx & Greetz
    Boron

  • #2
    drei datensätze auslesen, statt einem.

    Kommentar


    • #3
      Danke.
      Ich habe das jetzt so gelöst:

      PHP-Code:
      $result mysql_query("SELECT * FROM $table WHERE user = '".$user."' ORDER BY sortpos");
      while (
      $data mysql_fetch_array($result)) 
      {   


      $pos $data['sortpos'];

      $res mysql_query("SELECT ID,sortpos FROM $table WHERE user = '".$user."' AND sortpos < '".$pos."' LIMIT 1");
      $IDminus mysql_fetch_array($res);
                  
      $res mysql_query("SELECT ID,sortpos FROM $table WHERE user = '".$user."'  AND sortpos > '".$pos."' LIMIT 1");
      $IDplus mysql_fetch_array($res);


      //Ausgabe
      echo "aktuelle ID: " $data['ID'] . "<br>";
      echo 
      "vorherige ID: " $IDminus['ID'] . "<br>";
      echo 
      "nächste ID: " $IDplus['ID']; 



      Geht soweit auch. Aber geht das noch schöner / anders / besser?
      Zuletzt geändert von Boron; 12.03.2005, 18:28.

      Kommentar


      • #4
        PHP-Code:
        //initialisieren
        $davor $danach 'gibt es nicht';
        //Datenbank abfragen
        $result mysql_query("SELECT id FROM $table WHERE user = '".$user."' ORDER BY sortpos");
        //Datensätze in Array einlesen
        while ($data[] = mysql_fetch_array($result));
        array_pop($data);
        $count count($data)
        //Datensätze abarbeiten
        for ($i 0$i $count$i++) {
          echo 
        'ID: '.$data[$i]['id'].'<br />';
          echo 
        'ID davor: '.$davor.'<br />';;
          
        $danach = isset($data[$i 1]) ? $data[$i 1]['id'] : 'gibt es nicht';
          echo 
        'ID danach: '.$danach.'<hr />';
          
        $davor $data[$i]['id'];

        Dass du die sortpos ausgibst und nicht die IDs, so wie du's im Text formuliert hast, weißt du?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          mrhappiness: 'Tschuldigung, aber ich hab' damit jetzt mal nen bisschen "rumprobiert" (ja, anders darf man es leider nicht sagen): Abgesehen davon, dass nicht so ganz klar ist, wo die While-Schleife beginnt und dass dort ein oder mehr Semikolons falsch gesetzt sind, bin ich mir nicht so sicher, ob [FONT=courier new]array_pop (-- Liefert das letzte Element eines Arrays)[/FONT] da wirklich der richtige Befehl sein soll.

          Zudem ist meine While-Schleife bereits etwas komplizierter aufgebaut, so dass ich ungerne aus [FONT=courier new]$data[/FONT] ein mehrdimensionales Array machen möchte (also [FONT=courier new]while ($data[] = mysql_fetch_array($result));[/FONT] tutet nicht so gut bei mir).

          Und hast du dir mal die Ausgabe angeschaut? So war es eigentlich nicht gedacht... (vllt. lag es auch daran, dass ich die "Fehler" nicht richtig beseitigt habe...)

          Leider musste ich auch feststellen, dass mein Code von oben nicht so wirklich funktioniert.

          Eigentlich geht's mir um genau dieses Problem hier: http://www.php-resource.de/forum/sho...threadid=23178

          Aber dummerweise schaffe ich es nicht, die [FONT=courier new]sortpos[/FONT] wirklich korrekt zu vertauschen...

          Kommentar


          • #6
            Original geschrieben von Boron
            Abgesehen davon, dass nicht so ganz klar ist, wo die While-Schleife beginnt
            bei while
            und dass dort ein oder mehr Semikolons falsch gesetzt sind
            welches?
            bin ich mir nicht so sicher, ob [FONT=courier new]array_pop (-- Liefert das letzte Element eines Arrays)[/FONT] da wirklich der richtige Befehl sein soll.
            ja, denn array_pop liefert das letzte element eines arrays und entfernt es dabei auch aus dem array

            wie sieht die ausgabe denn aus?

            was den rest angeht:
            du selektierst nur auf den user, nicht auf die sortpos, wie also willst du einträge vertauschen?

            Du willst zwei Beiträge miteinander tauschen?
            Dann mach's doch so, wie es in dem Post steht.
            Wenn du nicht klar kommst, poste mal den kompletten Code (ausnahmsweise)

            EDIT:
            da fehlte ein komma nach dem count, die zwei aufeinanderfolgenden ; sind zwar unschön, tun der funktionalität aber keinen abbruch

            PHP-Code:
            //initialisieren
            $davor $danach 'gibt es nicht';
            //Datenbank abfragen
            $result mysql_query("SELECT id FROM $table WHERE user = '".$user."' ORDER BY sortpos");
            //Datensätze in Array einlesen
            while ($data[] = mysql_fetch_array($result));
            array_pop($data);
            $count count($data);
            //Datensätze abarbeiten
            for ($i 0$i $count$i++) {
              echo 
            'ID: '.$data[$i]['id'].'<br />';
              echo 
            'ID davor: '.$davor.'<br />';
              
            $danach = isset($data[$i 1]) ? $data[$i 1]['id'] : 'gibt es nicht';
              echo 
            'ID danach: '.$danach.'<hr />';
              
            $davor $data[$i]['id'];

            so besser? (semikolon ergänzt/entfernt)
            Du bekommst so alle Datensätze von $user sortiert nach sortpos und es wird dir - sofern vorhanden - die id des datensatzes davor und danach (festgelegt durch die sortierung nach sortpos) ausgegeben

            wenn es nicht das war, was du wolltest, dann liegt's vermutlich daran, dass du nicht genung input geliefert hast
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              sortpos tauschen

              Erstmal danke, mrhappiness.

              Am besten ich stelle mein Problem nochmal neu, da es doch ein wenig anders als der Eingangspost ist.



              Ich möchte die [FONT=courier new]sortpos[/FONT] von zwei Einträgen ändern -- eigentlich Einträge, die in einer Tabelle aufgelistet werden, nach oben bzw. unten verschieben

              Hier mein Anfangscode: (der komplette Code würde doch etwas den Rahmen sprengen, deshalb stark gekürzt )

              PHP-Code:
              <table>

              <?
              $result = mysql_query("SELECT * FROM $table_leserliste WHERE austraeger='".$name."' ORDER BY sortpos");

              while ($data = mysql_fetch_array($result))
              {
              ?>
                
               <tr>
                   <td><? echo $data["name"]; ?></td>
                   <td><? echo $data["adresse"]; ?></td>
                   <td><? echo $data["telefonnr"]; ?></td>
               
                   <? // usw....... ?>

                   <td><? // HIER soll jetzt ein Link zum Vertauschen der [FONT=courier new]sortpos[/FONT] hin ?>nach oben</td>
                   <td>nach unten (ebenfalls als Link) <-- WIE?</td>

               </tr>

              <?
              }    //while ende
              ?>

              </table>
              So, das ist also die Situation.




              Mein Versuch sieht im Moment so aus -- dabei sende ich die zwei IDs der Einträge an eine extra Datei, die dann die [FONT=courier new]sortpos[/FONT] vertauscht.



              Erstmal die zwei Tabellenspalten aus meinem o.g. Script ersetzt:

              PHP-Code:
              <td><?

              // herausfinden, welche ID die Einträge dadrüber/dadrunter haben
              $pos = $data["sortpos"];

              $res = mysql_query("SELECT * FROM $table_leserliste WHERE austraeger = '".$name."' 
              AND sortpos < '".$pos."' LIMIT 1");

              $IDminus = mysql_fetch_array($res);
                          
              // Link zur Änderung der sortpos
               if($IDminus != "") { ?>
                 <a href="admin_leserliste_sort.php?action=change&id1=
                <? echo $data["id"]; ?>&id2=<? echo $IDminus["id"]; ?>">nach oben</a>
                     <? } ?>
              </td>



                          
              <td>
              <? 
              // nach unten
              $res = mysql_query("SELECT * FROM $table_leserliste WHERE austraeger = '".$name."'  
              AND sortpos > '".$pos."' LIMIT 1");

              $IDplus = mysql_fetch_array($res);
                     
              // Link zur Änderung der sortpos
              if($IDplus != "") { ?>
                <a href="admin_leserliste_sort.php?action=change&id1=
                  <? echo $data["id"]; ?>&id2=<? echo $IDplus["id"]; ?>">nach unten</a>
              <? } ?>
              </td>
              Meine Idee war also: Ich übergebe die aktuelle ID und die ID, mit der die erste ID vertauscht werden soll, an [FONT=courier new]admin_leserliste_sort.php[/FONT], wo dann der "sortpos-Tausch" stattfindet.

              So, als Problem hat sich aber herausgestellt, dass nicht immer die korrekte [FONT=courier new]id[/FONT] übergeben wird!!
              Sprich, so bringt mir der Code nichts, obwohl er eigentlich funktioniert. Manchmal werden halt ganz andere Tabelleninhalte vertauscht, als ich wollte.




              Und noch der Auszug aus der [FONT=courier new]admin_leserliste_sort.php[/FONT]: (das Vertauschen der sortpos funktioniert soweit auch!)

              PHP-Code:
              switch ($action)
              {
              default:

              break;
              case 
              "change":

               
              $id1result mysql_query("SELECT * FROM $table_leserliste WHERE id='".$id1."' LIMIT 1");
               
              $id1data mysql_fetch_array($id1result);
               
               
              $id2result mysql_query("SELECT * FROM $table_leserliste WHERE id='".$id2."' LIMIT 1");
               
              $id2data mysql_fetch_array($id2result);
               
               
              $sortpos1 $id1data["sortpos"];
               
              $sortpos2 $id2data["sortpos"];
               
               
              mysql_query("UPDATE $table_leserliste SET sortpos='".$sortpos2."' WHERE id='".$id1."'");
               
              mysql_query("UPDATE $table_leserliste SET sortpos='".$sortpos1."' WHERE id='".$id2."'"); 

               echo 
              "done.";
               
              break;
              }       
              // Switch ende 

              Wie müssen die zwei Tabellen-Links (siehe 1. code) also nun richtig aussehen?

              Thx & Greetz
              Zuletzt geändert von Boron; 16.03.2005, 14:24.

              Kommentar


              • #8
                Ich gestehe, ich hab's nur überflogen, bin aber prinzipiell gut gelaunt

                Baue den Link so auf:
                Code:
                sort.php?id=5&dir=up
                oder
                Code:
                sort.php?id=5&dir=down
                In sort.php
                PHP-Code:
                $sql 'SELECT id, sortpos
                FROM tabelle
                WHERE id = '
                .$_GET['id'].'
                LIMIT 1'
                ;
                $r mysql_query($sql);
                $sort['alt'] = mysql_fetch_assoc($r);

                $sql 'SELECT id, sortpos
                FROM tabelle
                WHERE sortpos %s %d
                ORDER BY sortpos %s
                LIMIT 1'
                ;
                if (
                $_GET['dir'] == 'up')
                  
                $sql sprintf($sql'<'$sort['alt']['sortpos'], 'DESC');
                else 
                  
                $sql sprintf($sql'>'$sort['alt']['sortpos'], 'ASC');
                $r mysql_query($sql);
                $sort['neu'] = mysql_fetch_assoc($r);

                $sql 'UPDATE tabelle
                SET sortpos = '
                .$sort['neu']['sortpos'].'
                WHERE id = '
                .$sort['alt']['id'];
                mysql_query($sql);
                $sql 'UPDATE tabelle
                SET sortpos = '
                .$sort['alt']['sortpos'].'
                WHERE id = '
                .$sort['neu']['id'];
                mysql_query($sql); 
                ohne Gewähr, funktioniert vielleicht auch nicht richtig, aber prinzipiell sollte es klar sein jetzt
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  bin aber prinzipiell gut gelaunt
                  War wohl mein Glück.


                  Sehr geil. Danke. Es funktioniert. (Anscheinend auch richtig.)

                  Kommentar

                  Lädt...
                  X