ERLEDIGT
NEIN
NEIN
ANTWORTEN
20
20
ZUGRIFFE
916
916
EMPFEHLEN
-
03.03.04 14:01 #1
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?-- j.
-
03.03.04 14:04 #2
Darf ich fragen, was Du damit erreichen möchtest, vielleicht gibt es ja elegantere Möglichkeiten.
mfg, snuuDas Leben ist wie eine Ketchupflasche - erst kommt nichts und dann alles auf einmal.
www.sven-petruschke.de
-
03.03.04 14:14 #3
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.-- j.
-
Ä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:
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.PHP-Code:$page = $_GET['page'];
//Link:
$url = 'seite.php?page=' . $page;
Korrigiere mich, wenn ich was nicht verstanden habe."... the KKK took my baby away ..."
-
03.03.04 14:37 #5
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...-- j.
-
Wie wärs damit:
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.PHP-Code: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. ...
"... the KKK took my baby away ..."
-
03.03.04 14:45 #7
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.
snuuDas Leben ist wie eine Ketchupflasche - erst kommt nichts und dann alles auf einmal.
www.sven-petruschke.de
-
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.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...
name
page
sort
art
Dann muss Du deinen Link halt immer mit den Variablen aus der URL zusammenbauen. Also z.b. so:
Wenn Du jetzt auf Seite x springen willst, einfach entsprechende Varibale setzen, das gleiche gilt auch für die anderen Variablen.PHP-Code:$url = 'seite.php?name='.$_GET['name'].'&page='.$_GET['page'].'&sort='.$_GET['sort'].'&art='.$_GET['art'];
Eigentlich logisch, oder ich versteh nicht was du meinst.You want me to be, something I can never ever be!
-
03.03.04 15:03 #9
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-Code://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>");
-- j.
-
03.03.04 15:09 #10
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!-- j.
-
Ja, naja, ne Lösung ists bestimmt. Aber ob die so 'gut' ist und vor allem performant will ich mal anzweifeln.
Ach noch was: Anstatt ereg_replace() solltest du vielleicht besser preg_replace() verwenden (schneller!)."... the KKK took my baby away ..."
-
Hm, wenn ich meinen geposteten PHP-Code ansehe, hab ich auch nur einmal die Variable page in meiner URL.Original geschrieben von jenno
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.
Und wenn ich mir jetzt Deinen Code ansehe, stell ich mir die Frage, woher Du nach dem formatieren weißt, auf welche Seite dein Besucher gerade ist, denn das hast Du ja rausgefiltert. Also wird er, wenn ich z.b. Nach name sortieren lasse, wieder auf die erste Seite geschickt (page ist ja aus Deinem Link komplett gelöscht worden).You want me to be, something I can never ever be!
-
03.03.04 15:22 #13
Darf ich Dir dennoch eine (wie ich finde) elegantere Möglichkeit vorstellen?
Zu Beginn Deines Scriptaufrufes führst Du folgendes aus:
Dadurch werden alle an das Script übergebenen Variablen der Session zugeordnet. Der Vorteil ist: Wird ein Parameter nicht übergeben, so steht der alte Wert trotzdem in der Session. Somit musst Du nur die Parameter übergeben, die sich geändert haben und nicht den elend langen Querystring.PHP-Code:session_start();
reset($_REQUEST);
while (list ($key, $val) = each ($_REQUEST)) {
$_SESSION[$key] = $val;
}
Anschließend arbeitest Du nur noch mit den Session-Variablen (z.B. $_SESSION['page'])
Diese Technik macht sich vor allem bei größeren Projekten bezahlt, bei denen man sich unter Umständen recht viele Parameter "merken" muss.
mfg, snuuGeändert von Sven Petruschke (03.03.04 um 15:24 Uhr)
Das Leben ist wie eine Ketchupflasche - erst kommt nichts und dann alles auf einmal.
www.sven-petruschke.de
-
03.03.04 15:27 #14
Chino,
ok, nochmal. Ich habe den page-Parameter mehrmals, weil ich mir bei jedem Aufruf der Seite (es spielt sich im Moment alles auf ein und derselben Seite ab!) den querystring merke, um mir bereits festgelegte Parameter zu merken! Da aber jedesmal ein Parameter für die aktuelle Seite gesetzt wird (wenn ein entsprechender Link geklickt wurde), steht er dann immer öfter im querystring.
Lies doch bitte nochmal mein Beispiel durch.
Und der User wird nach dem formatieren nicht wieder auf die erste Seite geschickt, sondern entweder auf die Seite die er anklickt (da steht dann im Link eben widerum der page-Parameter von wo es hingehen soll). Nur hier hänge ich den formatierten querystring mit an die URL.
Wenn kein Link der zu einer anderen Seite führen soll angeklickt wird, sondern zum Beispiel ein Sortieren Link, dann wird natürlich auch nicht der formatierte querystring benutzt!-- j.
-
03.03.04 15:29 #15
Snuu,
und was ist, wenn ich dann nicht mehr nach dem Namen, sondern z.B. nach der Telefonnummer suchen will? Dann steht der Name ja immernoch in der Session.-- j.
Ähnliche Themen
-
Hilfe bei Code für regular expression
Von exiter28 im Forum .NET Web und KommunikationAntworten: 5Letzter Beitrag: 14.09.10, 14:52 -
[VBS]Regular Expression
Von Dark Ranger im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 19.10.07, 09:59 -
regular expression
Von jenno im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 07.09.06, 11:32 -
"regular expression" Hilfe erbeten
Von hondocrx im Forum PHPAntworten: 5Letzter Beitrag: 13.08.05, 22:47 -
regular expression
Von hudo im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 2Letzter Beitrag: 26.08.04, 16:37





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren