Hilfe mit Regular Expression

jenno

Erfahrenes Mitglied
Ich habe einen QueryString, der eventuell ein "page=123" beeinhaltet. Wenn dem so ist, soll das aus dem QueryString verschwinden. Wenn danach noch ein & kommt, muss das natürlich auch weg. Ich weiss natürlich auch nicht, wieviele Stellen die page-nummer hat.
Kann mir jemand helfen, wie ich das anstellen kann?
 
Klar darfst Du fragen.

Ich habe eine Seite mit einer Auflistung von Ergebnissen einer Datenbankabfrage. Pro Seite wird immer nur eine bestimmte Anzahl von Ergebnissen angezeigt. Dazu gibt es noch eine Suchfunktion, die die Datenbankabfrage dann einschränkt. Ausserdem kann man die Ergebnisse noch unterschiedlich sortieren.

Die Suche ist in einem Formular verpackt. Wenn ich jedoch zum Beispiel sortiere oder zu einer anderen Seite blätter, dann geschieht das einfach über einen Klick auf einen Link und die Seite wird entsprechend wieder neu geladen. Dabei will ich aber jeweils die eingetragenen Suchkriterien oder eben zum Beispiel den Sortierparameter nicht unter den Tisch fallen lassen.

Ich habe das bis jetzt so gelöst, dass ich bei jedem neuen Aufruf der Seite den querystring abfrage und den dann an den Sortier- oder Blätterlink wieder ranhänge.

Wenn ich jetzt zum Beispiel von Seite zu Seite blätter, dann wird der querystring immer länger und enthält dann etliche page-Parameter, wobei der letzte dann für die Darstellung genutzt wird. Im Prinzip funktioniert das erstmal so. Aber wahrscheinlich eben nicht unendlich. Was ist, wenn der querystring zu lang wird?

So, und jetzt will ich genau das nicht haben und alle "alten" Parameter aus dem querystring wegschmeissen.
 
Äh versteh ich da was nicht?!
Wie wärs denn, wenn du einfach nur den Wert der Variable 'page' ausliest und diesen inkl. einem String 'page=' an die URL anfügst?
Also in etwa so:
PHP:
$page = $_GET['page'];
//Link:
$url = 'seite.php?page=' . $page;
Das ist doch einfacher, also wenn du immer wieder aus dem Querystring die Stelle mit 'page=123' entfernen müsstest, nur um dann wieder ein 'page=456' oder ähnliches anzuhängen.
Korrigiere mich, wenn ich was nicht verstanden habe.
 
Nein, es geht darum, dass da noch andere Parameter sind, die ich weiter brauche, die aber vom Benutzer nicht jedes Mal neu gesetzt werden können.

Beispiel:

Meine Datenbank gibt mir 354 Ergebnisse aus. Jetzt gebe ich in der Suchmaske an, dass nur alle Ergebnisse die im Namen "a." enthalten ausgegeben werden sollen.
querystring: name=a.&page=1

Jetzt habe ich als Ergebnis 75 Ergebnisse. Diese Ergebnisse sind auf 4 Seiten aufgeteilt. Jetzt klicke ich auf den Link zur Seite 2. Daraufhin wird die Seite wieder neu geladen. Ich will aber, dass nach dem neu Laden immer noch nur alle Ergebnisse angezeigt werden, die im Namen ein "a." (ohne das der Benutzer das nochmal neu im Formular eingeben muss). Deswegen benutze ich den alten querystring und ergänze ihn.
querystring: name=a.&page=1&page=2

So. Nun stelle ich fest, ich will alle Ergebnisse nach Status sortieren. Die Seite wird nach dem Klick auf den Link wieder neu geladen, muss aber immernoch nach "a." suchen, landet wieder auf Seite 2 und jetzt wird noch sortiert.
querystring: name=a.&page=1&page=2&sort=status&page=2

usw...
 
Wie wärs damit:
PHP:
foreach ($_GET as $key => $val) {
    $querystring .= $key . '=' . $val . '&';
}
$querystring = substr(0, (strlen($querystring) - 1));

//$querystring sieht dann z.B. so aus: page=1&name=a. ...
Soll nur das Prinzip klar machen. Du kannst dann ja mit Überprüfungen innerhalb der foreach-Schleife arbeiten oder nach was es dir eben gerade beliebt.
 
Verwende doch einfach Sessions!
Lege alle Parameter, die Du benötigst im superglobalen $_Session-Array ab und änder deren Werte nur, wenn sie via GET oder POST neu übergeben werden. Somit hast Du alle Parameter zur Verfügung und musst sie nur übergeben, wenn Du sie ändern möchtest.

snuu
 
Original geschrieben von jenno
Nein, es geht darum, dass da noch andere Parameter sind, die ich weiter brauche, die aber vom Benutzer nicht jedes Mal neu gesetzt werden können.

Beispiel:

Meine Datenbank gibt mir 354 Ergebnisse aus. Jetzt gebe ich in der Suchmaske an, dass nur alle Ergebnisse die im Namen "a." enthalten ausgegeben werden sollen.
querystring: name=a.&page=1

Jetzt habe ich als Ergebnis 75 Ergebnisse. Diese Ergebnisse sind auf 4 Seiten aufgeteilt. Jetzt klicke ich auf den Link zur Seite 2. Daraufhin wird die Seite wieder neu geladen. Ich will aber, dass nach dem neu Laden immer noch nur alle Ergebnisse angezeigt werden, die im Namen ein "a." (ohne das der Benutzer das nochmal neu im Formular eingeben muss). Deswegen benutze ich den alten querystring und ergänze ihn.
querystring: name=a.&page=1&page=2

So. Nun stelle ich fest, ich will alle Ergebnisse nach Status sortieren. Die Seite wird nach dem Klick auf den Link wieder neu geladen, muss aber immernoch nach "a." suchen, landet wieder auf Seite 2 und jetzt wird noch sortiert.
querystring: name=a.&page=1&page=2&sort=status&page=2

usw...
Erklär mir doch mal bitte, warum Du bei dem zweiten QueryString zweimal die Varivale page übergibst und beim dritten QueryString sogar dreimal. Was soll das bringen? Entweder hat page den Wert 1 oder 2. Aber beides geht nicht. Das muss es ja auch nich, da Du dich entweder auf Seite 1 oder auf Seite 2 befindest. Also musst Du nur page einmal an die URL dranhängen, analog zur Seite auf der Du springen willst. Wenn innerhalb deiner Suchmaske 4 Varibalen zur Verfügung stehen sollen z.b.

name
page
sort
art

Dann muss Du deinen Link halt immer mit den Variablen aus der URL zusammenbauen. Also z.b. so:

PHP:
$url = 'seite.php?name='.$_GET['name'].'&page='.$_GET['page'].'&sort='.$_GET['sort'].'&art='.$_GET['art'];
Wenn Du jetzt auf Seite x springen willst, einfach entsprechende Varibale setzen, das gleiche gilt auch für die anderen Variablen.

Eigentlich logisch, oder ich versteh nicht was du meinst.
 
Ja, das mit den Sessions hab ich mir auch schon überlegt. Bin aber wieder davon abgekommen.

Aber ich hab mich grad in der Zwischenzeit endlich mal mit Regular Expressions befasst und muss wirklich sagen, dass sich das lohnt!

Für die, die es interessiert, das hab ich gelesen:
PHP and Regular Expressions

Und mein Problem habe ich so gelöst:

PHP:
//Beispiel QueryString
$s = "link=aangiften.php&page=2&page=1&page=11&page=21&sort=aangiftenr&page=21";
echo("vorher: ".$s."<br>");

//alles was page=irgendnezahl heisst und das &
//danach (das einmal oder keinmal vorhanden ist) 
//kommen weg (wird durch '' ersetzt)
$s = ereg_replace("page=([0-9]+)(&?)", '', $s);

//eventuell bleibt ganz am Schluss noch ein & stehen,
//das kann auch weg
$s = ereg_replace("&$", '', $s);

echo("hinterher: ".$s."<br>");
 
Tach Chino,

ja, ich würde dann mal tippen, das Du nicht verstehst was ich meine. Denn darum geht es ja gerade, dass ich nicht xMal den Parameter page in meiner URL haben möchte.

Meiner Meinung nach habe ich es jetzt schon zweimal erklärt, wie es dazu kommt. Ich weiss jetzt nicht mehr, wie ich es noch anders mit Worten verpacken kann. Darum hatte ich übrigens auch ein Beispiel (was Du zitiert hast) gebracht.

Nun denn. Ich pflücke jetzt meine überflüssigen Paramter aus dem querystring heraus und finde das eine Prima Lösung!
 
Zurück