php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.07.2008, 16:46  
Erfahrener Benutzer
 
Registriert seit: 10.10.2007
Beiträge: 104
horstenpeter befindet sich auf einem aufstrebenden Ast
Standard [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?
horstenpeter ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.07.2008, 16:52  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Wo kommt das Array denn her?
cycap ist offline  
Alt 03.07.2008, 16:56  
Erfahrener Benutzer
 
Registriert seit: 10.10.2007
Beiträge: 104
horstenpeter befindet sich auf einem aufstrebenden Ast
Standard

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.
horstenpeter ist offline  
Alt 03.07.2008, 16:59  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Und du rufst das jedes mal wieder aus der Datenbank oder schreibst du das in die SESSION oder so?
cycap ist offline  
Alt 03.07.2008, 17:02  
Erfahrener Benutzer
 
Registriert seit: 10.10.2007
Beiträge: 104
horstenpeter befindet sich auf einem aufstrebenden Ast
Standard

Aktuell ruf ich es jedes Mal neu ab, weil ich Sessions noch nicht beherrsche.
horstenpeter ist offline  
Alt 03.07.2008, 17:56  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

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.
Flor1an ist offline  
Alt 03.07.2008, 18:56  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.248
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Zitat:
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...
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 04.07.2008, 06:43  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.069
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Zitat:
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.
__________________
"Nuschel ich?" - "Was?"

Geändert von Chriz (04.07.2008 um 06:46 Uhr).
Chriz ist offline  
Alt 04.07.2008, 16:56  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zergling ist ein Hexer, verbrennt ihn!!! ...Oh falscher Film... xD
cycap ist offline  
Alt 04.07.2008, 17:09  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.248
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

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
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Soapfault: Undefined Property Argi PHP-Fortgeschrittene 0 28.07.2008 11:17
[Erledigt] Hat ein Array einen Wert? silver_surfer PHP Tipps 2008 6 22.06.2008 12:20
ein Array auf zwei gleiche Elemente prüfen phpbeginner PHP Tipps 2006 2 18.03.2006 01:06
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
Elemente in mehrdimensionalem Array gezielt updaten PHP Tipps 2005 4 29.04.2005 15:18
Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25
Elemente aus assoz. Array entfernen PHP-Fortgeschrittene 3 02.11.2004 11:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php array durchklicken

Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum