Über GET übergegebene Daten auslesen
Sebastian
- programmiertechnik
0 Rouven0 fastix®0 mbr0 Sven Rautenberg
Hallo zusammen,
ich möchte die Daten, welche über GET direkt übergeben werden, in PHP auslesen, stehe aber vor dem Problem das meine bisherige Strategie nicht damit zurecht kommt.
Die gesamte URL sieht folgendermaßen aus:
/index.php?id=52&L=3&tx_ttnews[tt_news]=7&tx_ttnews[backPid]=28&cHash=944ab0955c
Kann mir jemand eine elegante Lösung antworten, wie ich mit PHP an die Daten herankomme, um sie auch wieder entsprechend mit key und value zusammensetzen zu können.
Danke
Hi!
ich möchte die Daten, welche über GET direkt übergeben werden, in PHP auslesen, stehe aber vor dem Problem das meine bisherige Strategie nicht damit zurecht kommt.
Und deine bisherige Strategie wäre? Wie eine GET-URL aussieht weiß ich, wie deine Strategie ist, weiß ich nicht. Hast du dich u.U. bisher auf register_globals verlassen, also die automatische Umwandlung von URL-Parametern in PHP-Variable? Wenn ja, dann ist die Antwort folgende: Das stellt ein gewisses Sicherheitsrisiko dar. Die Daten müssen daher vom Skript explizit über $_GET[name] oder $_POST[name] oder $_REQUEST[name] ausgelesen werden.
MfG
Rouven
Hi!
Bisher habe ich mich darauf verlassen, dass folgendes Skript funktioniert:
foreach ($_GET as $key => $value ) {
if($key != "L") {
if (is_array($value) == true) {
$query = $query.$key."=".implode('',$value)."&";
}
else {
$query = $query.$key."=".$value."&";
}
}
}
Nun habe ich aber das Problem, dass einige Teile des $_GET-Arrays wiederum Arrays sind...
hi,
Nun habe ich aber das Problem, dass einige Teile des $_GET-Arrays wiederum Arrays sind...
Dann mache dich und die Rekursion miteinander bekannt.
gruß,
wahsaga
Hi,
Rekursion - die gleiche Sache hatte ich auch im Kopf. Nur vielleicht kennt jemand hierfür schon eine Standardlösung bzw. ein Skript-Schnipsel, damit ich nicht alles neu erfinden muss...
Wäre ja auch dumm, wenn Du dir täglich überlegen müsstest, welche Form die Reifen an deinem Auto haben sollten, damit es ordentlich fährt und Du sie Dir täglich entsprechend selber herstellen müsstest.
echo $begrüßung;
Rekursion - die gleiche Sache hatte ich auch im Kopf. Nur vielleicht kennt jemand hierfür schon eine Standardlösung bzw. ein Skript-Schnipsel, damit ich nicht alles neu erfinden muss...
Ich weiß ja nicht, ob du mit array_walk_recursive() glücklich wirst (PHP 5 vorausgesetzt, ansonsten die Userkommentar-Alternative)...
Wäre ja auch dumm, wenn Du dir täglich überlegen müsstest, welche Form die Reifen an deinem Auto haben sollten, damit es ordentlich fährt und Du sie Dir täglich entsprechend selber herstellen müsstest.
Dann solltest du dir vielleicht vorher Gedanken über Struktur und Namen der zu übertragenden Werte machen.
echo "$verabschiedung $name";
Hi,
dann sag das bitte Kasper Skårhøj - Entwickler von Typo3.
Aber danke für den Link. Mal schauen, ob er mich weiterbringt...
Hi!
Eine Kleinigkeit, obwohl ich dir leider bei deinem Problem nich helfen kann:
if (is_array($value) == true) {
stimmt es, dass es wahr ist?
Warum nicht einfach if(is_array($value)) {
Gruß aus Iserlohn
Martin
Moin!
Die gesamte URL sieht folgendermaßen aus:
/index.php?id=52&L=3&tx_ttnews[tt_news]=7&tx_ttnews[backPid]=28&cHash=944ab0955c
Kann mir jemand eine elegante Lösung antworten, wie ich mit PHP an die Daten herankomme, um sie auch wieder entsprechend mit key und value zusammensetzen zu können.
Kennst Du die übergebenen Arrays? Dann:
if (isset($_GET['id'])) {
$id=$_GET['id'];
} else {
# Fehlerbehandlung
}
if (isset($_GET['tx_ttnews']['tt_news'])) {
$tx_ttnews['tt_news']=$_GET['tx_ttnews']['tt_news'];
} else {
# Fehlerbehandlung
}
Und so weiter... und so fort.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo Sebastian
Probier doch mal folgendes Script:
<?PHP
$query="";
$first=true;
foreach ($_GET as $key => $value ) {
if($key != "L")
{
if(!$first)
{
$query.="&";
}
if (is_array($value) === true) {
$query = $query.print_array($key,$value,'');
}
else {
$query = $query.$key."=".$value;
}
$first=false;
}
}
echo "Resultat: ".$query;
function print_array($lastkey,$arr,$prefix)
{
$first=true;
if($prefix=='')
{
$prefix=$lastkey;
}
else
{
$prefix.="[".$lastkey."]";
}
foreach($arr as $key => $value)
{
if(!$first)
{
$ret.="&";
}
if(is_array($value)===true)
{
$ret.=print_array($key,$value,$prefix);
}
else
{
$ret.=$prefix."[".$key."]=".$value;
}
$first=false;
}
return $ret;
}
?>
Das funktioniert bei mir zumindest mit diesen drei Testfällen
index.php?id=52&ad=7&bd=9
index.php?id=52&L=3&tx_ttnews[tt_news]=7&tx_ttnews[backPid]=28&cHash=944ab0955c
index.php?id=52&L=3&tx_ttnews[tt_news][7]=7&tx_ttnews[tt_news][9]=9&tx_ttnews[backPid]=28&cHash=944ab0955c
also mit arrays und auch mehrdimensionalen arrays (habs jetzt nur bis 2-dim getestet - wobei ich mir auch gar nicht so ganz sicher bin, ob eine solche Übergabe noch "sauber" ist)
liebe Grüße
mbr
Moin!
Die gesamte URL sieht folgendermaßen aus:
/index.php?id=52&L=3&tx_ttnews[tt_news]=7&tx_ttnews[backPid]=28&cHash=944ab0955cKann mir jemand eine elegante Lösung antworten, wie ich mit PHP an die Daten herankomme, um sie auch wieder entsprechend mit key und value zusammensetzen zu können.
Der gesamte Query-String steht - oh wunder - unverändert in $_SERVER['QUERY_STRING'] zur Verfügung. Wenn du darin nur noch die & zu & maskierst, kannst du den String direkt wieder an Links in der HTML-Ausgabe drankleben.
Das Ergänzen von neuen Parametern hinten am String ist auch erlaubt.
- Sven Rautenberg