php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.06.2006, 18:48  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard Parameter überschreiben

Guten Abend Leute und Leutinnen

Ich habe folgendes Problem:

Ich habe in der Navigation Menus, welcher der User öffnen und schliessen kann. Da ich möchte, dass der User nach dem Öffnen oder Schliessen eines Menus noch an der selben Stelle auf der Page ist, muss ich die gesamten aktuellen Parameter beim Öffnen und Schliessen der Menus mitgeben. Dies mache ich mit Hilfe von $_SERVER['QUERY_STRING'] (Parameter werden alle über die URL übergeben).

Hinter die aktuellen Parameter häng ich dann weitere Parameter. Beispiel:

Url irgendwo auf der Page:
Code:
index.php?pageid=6&sr_id=12&pic_id=18
Jetzt öffnet der User ein Menu:

PHP:
PHP-Code:
echo "<a href=\"index.php?".$_SERVER['QUERY_STRING']."&action=open_menu&menu=test\"> 
Url nach dem Klicken auf den Link:
Code:
index.php?pageid=6&sr_id=12&pic_id=18&action=open_menu&menu=test
Soweit, sogut. Das ist genau das, was ich will. Nun gibt es aber das Problem, dass jetzt die Parameter action und menu ebenfalls in $_SERVER['QUERY_STRING'] gespeichert sind. Wenn ich jetzt ein anderes Menu öffnen will, werden die alten und die neuen Parameter angehängt. Dann gibt es sowas wie:

Code:
index.php?pageid=6&sr_id=12&pic_id=18&action=open_menu&menu=test&action=open_menu&menu=blafasel
Nun zu meiner Frage:

Kennt jemand einen guten Weg, wie ich diesen hässlichen Nebeneffekt beseitigen kann? Gibt es bessere Varianten um die gegenwärtig gültigen Parameter zu erhalten als über $_SERVER['QUERY_STRING']?

Wäre sehr dankbar um einige Inputs.

Schönen Aabend und vielen Dank.

Gruss Igäl
Igäl ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 04.06.2006, 19:15  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

PHP 5:
PHP-Code:
<?php
$get 
$_GET// $_GET sollte readonly bleiben
$get['action'] = 'open_menu';
$get['menu'] = 'test';
print 
http_build_query($get);
?>
Für PHP4 müsste ich nochmal nachschauen, hatte da auch einen fixen
Algorithmus. Wobei das ja auch nicht schwer ist, hatte es aber glaube ich mit
einem 2 Zeiler ohne Schleife gelöst.
Zergling-new ist offline  
Alt 04.06.2006, 19:16  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard

So nach langem Herumprobieren habe ich schlussendlich eine befriedigende Lösung gefunden:

PHP-Code:
        $_SERVER['QUERY_STRING'] =  preg_replace("#(.+)&action=.+&menu=.+#""$1"$_SERVER['QUERY_STRING']); 
Habs jetzt einfach so gemacht. Schneide die beiden Parameter einfach aus der URL raus ;o)

Greetz Igäl
Igäl ist offline  
Alt 04.06.2006, 19:20  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Nimm http_build_query(), dafür ist die Funktion da
Zergling-new ist offline  
Alt 04.06.2006, 19:21  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard

Jo gut mach ich. Danke dir Hab meine Antwort geschrieben, als ich deine noch net gesehen habe.

Vielen Dank.
__________________
Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
Mark Twain
Igäl ist offline  
Alt 04.06.2006, 19:29  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard

Super das Funktioniert. Für alle die das Problem in Zukunft haben werden:

PHP-Code:
    //Prüft ob der User ein Menu öffnen will (wenn action-Parameter in der URL den Wert "open_menu" hat)
    
if(getDefault("action") == "open_menu")    {
        
//Wenn der User ein Menu öffnen will, wird der Name des zu öffnenden Menus in eine Session-Variabel geschrieben
        
$_SESSION['active_menu'] = getDefault("menu");
        
//Das GET-Array wird in ein selbst erstelltes Array kopiert, da es readonly bleiben sollte
        
$get $_GET;
        
//Action und Menuparameter werden aus dem Array gelöscht
        
unset($get['action']);
        unset(
$get['menu']);
        
//Der Query-String wird angepasst
        
$_SERVER['QUERY_STRING'] = http_build_query($get);
    }elseif(
getDefault("action") == "close_menu")    {
        
//Hier passiert was ähnliches, wenn der User ein Menu schliessen will
        
$_SESSION['active_menu'] = "none";
        
$get $_GET;
        unset(
$get['action']);
        
$_SERVER['QUERY_STRING'] = http_build_query($get);
    } 
Gruss Igäl
Igäl ist offline  
Alt 04.06.2006, 19:42  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Nicht nur $_GET sollte readonly bleiben, sondern auch alle anderen Super-Globalen ($_SERVER, $_POST, $_COOKIE, $_REQUEST, $_FILES).

Denn die Daten kommen von außen und andere Teile deines Skriptes könnten auf die (Original-)Daten angewiesen sein.
Zergling-new ist offline  
Alt 04.06.2006, 19:52  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard

Ok. Hab ich nun umgerüstet. Aufm Webserver läuft aber kein PHP 5. Was soll ich jetzt machen? War die Idee mit dem preg_replace so schlecht oder gibts ein Äquivalent zu http_build_query() für PHP 4?
__________________
Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
Mark Twain
Igäl ist offline  
Alt 04.06.2006, 19:55  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

PHP 4:

PHP-Code:
<?php
$get 
$_GET;
$get['action'] = 'open_menu';
$httpquery = array();
foreach (
$get as $key => $value) {
  
$httpquery[] = "$key=$value";
}
print 
implode('&amp;'$httpquery);
?>
Hatte mal ne schönere Methode, find sie aber grad nicht mehr.
Zergling-new 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
mod_rewrite - fehlenden Parameter erkennen tekknotrip PHP-Fortgeschrittene 2 10.06.2008 09:28
[Erledigt] Variable Anzahl Parameter bie build-in-functions sqrt PHP Tipps 2008 16 25.05.2008 23:00
$_GET, $_POST direkt auslesen oder als Parameter Igäl PHP Tipps 2008 5 17.08.2007 14:36
Variable als optionalen Parameter? Mex PHP Tipps 2006 3 20.04.2006 07:05
?id= und andere Parameter Beitragsarchiv 10 12.04.2006 09:43
Darstellung von Links ohne Parameter seven-12 PHP Tipps 2006 4 16.02.2006 15:31
einen parameter verstecken seven-12 PHP Tipps 2005-2 8 27.07.2005 16:57
? in parameter ?! PHP Tipps 2005-2 4 23.07.2005 18:24
[Erledigt] Parameter uebergeben PHP Tipps 2005-2 10 20.07.2005 16:55
text aus parameter in bestehendes bild schreiben PHP Tipps 2005-2 3 10.06.2005 20:21
functionen - optionale Parameter PHP Tipps 2005 7 23.05.2005 19:08
Parameter von checkdnsrr ? PHP Tipps 2005 2 22.01.2005 02:36
Parameter Tschuu PHP Tipps 2004-2 4 02.12.2004 20:05
URL aus Datei über Parameter aufrufen PHP Tipps 2004 12 27.08.2004 15:29
Alle $_GET[] parameter auslesen PHP Tipps 2004 3 09.08.2004 14:14

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php get überschreiben, php $_get überschreiben, $_get überschreiben, $_server überschreiben, php get variable überschreiben, php parameter überschreiben, get parameter überschreiben, php server[\'query_string\'] implode, http_build_query php4, php $_server überschreiben, parameter überschreiben, php get parameter überschreiben, get php überschreiben, get überschreiben php, php get-variable überschreiben, $_cookie überschreiben, $_server , php paramter überschreiben, php $_server[\'query_string\'] variable löschen, php bei klick vorhandenes $_get überschreiben

Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.