Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Durch Elemente in Array "durchklicken"

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Durch Elemente in Array "durchklicken"

    Hallo,

    angenommen ich habe ein Array wie dieses:

    PHP-Code:
    $obst = array (
    => Apfel,
    => Banane,
    => Birne,
    13 => Kiwi,
    => Ananans
    ); 
    und ich möchte gerne eine Seite ausgeben, die immer ein Element aus dem Array anzeigt (z.B. Banane) und zwei Pfeile anbietet, einen vorwärts (zur Birne) und einen rückwärts (zum Apfel), mit dem man sich durch die Elemente durchklicken kann.

    Normalerweise würde ich einen $counter mit ++ oder -- einführen, aber wegen der nicht aufeinander folgenden Zahlen würde das nicht funktionieren.

    Wie kann ich also herausfinden, welches das nächste oder vorhergehende Element im Array ist?


  • #2
    Wo kommt das Array denn her?

    Kommentar


    • #3
      Im Original aus einer MySQL-Datenbank. Die Zahlen sind die ID-Nummern von Bilder (hier Obst), die anhand eines anderen Kriteriums (Zugehörigkeit zu einem Projekt) ausgewählt werden. Deswegen sind diese IDs auch nicht fortlaufend, weil immer wieder neue Bilder zu Projekten hinzugefügt werden.

      Kommentar


      • #4
        Und du rufst das jedes mal wieder aus der Datenbank oder schreibst du das in die SESSION oder so?

        Kommentar


        • #5
          Aktuell ruf ich es jedes Mal neu ab, weil ich Sessions noch nicht beherrsche.

          Kommentar


          • #6
            Dann kannst du doch z.B. für das nächste Element folgendes machen.

            Angenommen du bist auf der Seite mit Element 7 = Banane.
            Dann sieht der Link zum vorigen und nächsten Element so aus.
            ...?id=7&show=prev
            ...?id=7&show=next

            Und bei der Seite wo du die Elemente darstellt holst du aus der Datenbank wie folgt die Element.

            if ($show == 'prev') ...
            SELECT * FROM tabelle WHERE id < $id ORDER BY id DESC LIMIT 1

            if ($show == 'next') ...
            SELECT * FROM tabelle WHERE id > $id LIMIT 1

            Und schon hast du den nächsten Eintrag dessen ID entweder größer oder kleiner der aktuellen ist.

            Kommentar


            • #7
              Zitat von Flor1an Beitrag anzeigen
              Dann kannst du doch z.B. für das nächste Element folgendes machen.

              Angenommen du bist auf der Seite mit Element 7 = Banane.
              Dann sieht der Link zum vorigen und nächsten Element so aus.
              ...?id=7&show=prev
              ...?id=7&show=next

              Und bei der Seite wo du die Elemente darstellt holst du aus der Datenbank wie folgt die Element.

              if ($show == 'prev') ...
              SELECT * FROM tabelle WHERE id < $id ORDER BY id DESC LIMIT 1

              if ($show == 'next') ...
              SELECT * FROM tabelle WHERE id > $id LIMIT 1

              Und schon hast du den nächsten Eintrag dessen ID entweder größer oder kleiner der aktuellen ist.
              Mit dem Beispiel oben wird das so allerdings nicht funktionieren. Man beachte die Arrayschlüssel. Da wird schon ein Sortierkriterium notwendig sein. Oder man macht das über einen laufenden Index, den man übergibt und dann für LIMIT {index},1 verwendet...
              --

              „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


              • #8
                Zitat von horstenpeter Beitrag anzeigen
                Aktuell ruf ich es jedes Mal neu ab, weil ich Sessions noch nicht beherrsche.
                Sessions sind kein Hexenwerk, du startest session_start() einmalig pro Skript/Aufruf, z.B. in deiner global.inc.php und danach kannst du den $_SESSION-Array beschreiben und auslesen wie du moechtest.

                PHP-Code:
                <?php
                session_start
                ();

                if (!
                array_key_exists("obst"$_SESSION)) {
                  
                // erster aufruf offenbar, session noch leer
                  
                $strQuery "SELECT id, name FROM obst WHERE herkunft = 'Europa'";
                  
                $resQuery mysql_query($strQuery) or die(mysql_error());
                  
                $_SESSION["obst"] = array();
                  while (
                $arrObst mysql_fetch_assoc($resQuery)) {
                    
                $_SESSION["obst"][] = $arrObst// alles in den session array schreiben
                  
                }
                }

                if (empty(
                $_SESSION["obst"])) {
                  die(
                "no obst, try gemuese"); // besser testen ob ueberhaupt was drinne ist, wenn nicht fehler abfangen oder ausgeben
                }

                if (!
                array_key_exists("index"$_GET)) {
                  
                $intIndex 0// kam nichts per GET an? dann mit index=0 anfangen
                } else {
                  
                $intIndex = (int)$_GET["index"] % count($_SESSION["obst"]); // falls doch in INT umwandeln und modulo nehmen (rest rechnen, falls unbekannt googlen), damit wir nicht hoehere Indexe bekommen als moeglich
                }

                printf('%s, <a href="?index=%u">weiter</a>'$_SESSION["obst"][$intIndex]["name"], $intIndex 1); // ausgeben, falls unklar welche hierarchie nun existiert, print_r($_SESSION) aufrufen
                ?>
                Bei Fragen zu Funktionen oder Fehlermeldungen (header's already sent) einfach mal Googlen.
                "Mein Name ist Lohse, ich kaufe hier ein."

                Kommentar


                • #9
                  Zergling ist ein Hexer, verbrennt ihn!!! ...Oh falscher Film... xD

                  Kommentar


                  • #10
                    Ich vermerke eine zunehmende Wiederverwendung des NickNames Zergling in Verbindung mit Gewaltandrohungen. Dit jiebt hier gleich die jelbe Karte meen Freund! Ausserdem ist anzunehmen, dass Zer'äh ... Gewicht jenseits dem einer kalten Ente liegen dürfte
                    --

                    „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


                    • #11
                      Wer ist eigentlich Zergling? Chriz oder wer???

                      Kommentar


                      • #12
                        Wer ist eigentlich RRRRaZoR?
                        --

                        „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


                        • #13
                          Mh okay hat sich erledigt ...

                          Kommentar


                          • #14
                            Zur Info:

                            Habe jetzt doch eine Lösung ohne Sessions gefunden. Ich fand es jetzt übertrieben, für dieses kleine Detail mit den Sessions anzufangen.
                            Eure Kommentare haben mich aber wieder für das Thema interessiert, und beim nächsten Projekt werde ich Sessions von vorneherein einplanen.

                            Hier meine Lösung (nach Willkommen im PHP Wiki von php::bar! - php bar)
                            PHP-Code:
                                        $bilder_q mysql_query ("SELECT id, url FROM bilder WHERE projekt = '$id'");
                                        
                            $bipoar = array ();
                                        while (
                            $obj mysql_fetch_array ($bilder_q)) {
                                            
                            $bipoar[$obj[id]] = $obj[url];
                                        }
                                        
                            $poka array_keys($bipoar);
                                        
                            $position array_search($bild$poka);            
                                        
                            $prev $poka[$position-1];
                                        
                            $next $poka[$position+1]; 

                            Kommentar


                            • #15
                              Und warum nimmst Du nicht einen numerischen GET Index und LIMIT {index},1 wie ich es oben vorgeschlagen habe? So liest Du doch alle Begriffe jedesmal komplett aus! Nicht sehr performant. Und sogar im obigen Code könntest Du das Auslesen spätestens beim next Wert abbrechen.
                              --

                              „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

                              Lädt...
                              X