# Mehrere optionale Variablen in URL übergeben



## suntrop (13. Januar 2010)

Ich habe auf meiner Website viele Links die Variablen über die URL an meine Skripte übergeben.
Zum Beispiel sind das Sortierreihenfolgen (auf-/absteigend), Sortierfeld (Name, Alter etc.), Seite usw. Und alle Variablen könne – müssen aber nicht gesetzt sein.

Jetzt habe ich die Schwierigkeit, dass ich für *jeden Link das HREF korrekt zusammenfügen* muss. Ein Beispiel:
Ich klicke auf "Alter" und in der URL steht anschließend example.com/ordner/seite.php?order=alter. Wenn ich jetzt noch auf den Link für Seite 2 klicke, dann steht in meiner URL example.com/ordner/seite.php?seite=2. Das heißt die Sortierreihenfolge ist flöten gegangen. Und so gehts bei allen Links.
Wenn ich die Request URI davorschreibe, könnten sich Variablen doppeln, wenn zweimal auf denselben Link geklickt wird (zur Info: kann nur mit Rquest URI arbeiten, da die URL mit mod_rewrite umgeschrieben wird).


*Wie kann ich mehrere (optionale) Variablen in der URL verketten?*
Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken


----------



## Carrear (13. Januar 2010)

Ähm. Ehrlich gesagt weiß ich jetzt nicht ob ich die komplexität deines Problems nicht verstehe, aber an sich ist es ja kein problem mehrere GET Variabeln zu übergeben : beispiel.php?order=alter&seite=2

Viele Grüße


----------



## suntrop (13. Januar 2010)

Ja, das ist richtig – und ja es ist komplexer. Denn diese "mehreren Variablen" werden ja nicht in einem Link (href="seite.php?var1=a&var2=b") sondern auch in mehreren ganz bestimmten Links vergeben.
 href="seite.php?seite=2"
 href="seite.php?order=alter"
 href="seite.php?stadt=hamburg"

Und wenn jetzt ein User auf den Link für Sortierung nach Alter geklickt hat sieht die aufgerufenen URL so aus: example.com/ordner/seite.php?order=alter

Der Link href="seite.php?stadt=hamburg" würde jetzt jedoch die Sortierung nach Alter löschen. Es müsste aber example.com/ordner&seite.php?order=alter&stadt=hamburg etc. sein.


----------



## Carrear (13. Januar 2010)

du kannst das doch in php angeben so nach dem motto

<a href="index.php?<?php if(isset ($_GET['order'])){ echo "order=".$_GET['order']."&"; }?>site=X"> Link</a>


----------



## suntrop (14. Januar 2010)

Ja, das wäre eine Lösung. Bei 6 Variablen finde ich es recht unhandlich. Zusätzlich muss ich auch immer darauf achten, ob es die erste Variable in der URL ist (dann ohne & dafür ein ?) oder ob bereits eine GET-Variable vorhanden ist.


----------



## Carrear (14. Januar 2010)

Der *erste* Parameter ist nicht kompliziert. Der letzte ist kompliziert. Du schreibst den Link an sich von Haus aus mit ? und dann bei jedem weiteren Parameter hängst du ein & an. Und da ist das Problem. Also wenn du ein bisschen Denksport machst die nächste Stunde kannst du dir eine super Funktion schreiben, der du nur den abzufragenden GET Parameter angibst. Das musst du dir dann aber eine Lösung füpr das Problem überlegen. Wie erkennst das Script, dass jetzt der *letzte* Parameter übergeben wird und kein & mehr angehangen werden muss.

Obwohl... wenn ich so drüber nachdenke. Vielleicht ist es sinnvoller es an den Anfang zu packen. das &. Also .. Du schreibst den Link 

http://www.example.com/index.php? und dann fügst du deine Funktion ein die folgendes machen muss:

Jede der *möglichen* GET Variabeln auf existenz (isset oder empty) prüfen und entsprechend dessen ob es die erste vorhandene GET Variable ist entweder nur var=b oder eben wennes nicht die erste GET Variable ist &var=b ausgeben...

Ha, und jetzt fällt mir auch grad ein wie du prüfen kannst ob es der erste Parameter ist. Du übergibst den Link an sich einfach in einer Variable ($HREF) an die Funktion (wie gesagt mit "?") und in der Funktion jedes mal, wenn du überprüfst ob die GET Variable die du grad abprüfst die erste ist, schaust du einfach ob in $HREF das letzte Zeichen ein ? oder etwas anderes ist. Ist es nämlich ein ? gibst du kein & am anfang aus und wenn es kein ? ist kann man davon ausgehen, dass du schon eine andere GET Variable angehangen hast und du kannst ein & mit ausgeben. Anschließend hängst du an $HREF einfach nur noch die entsprechenden Werte an und gibst am ende den kompletten Link zurück. Verstehste? ist grad kompliziert ausgedrückt.

Viele Grüße

Wie gesagt wenn du es in eine Funktion packst ist es nicht schwer zu händeln und du kannst es überall benutzen.


----------



## suntrop (14. Januar 2010)

Ist in der Tat etwas kompliziert zu verstehen - ich muss es mir glaube ich noch zweimal exakt durchlesen 
Und dann probieren.

Aber danke dir für deine Mühe!


----------

